Listing of file='28DFSR1' on disk='vmedia/mvp-diag-2.6.2.wvd.zip'
# Sector 3906, program filename = '28DFSR1' 0030 DIM A$3,R$15,L$1,D$1,P,A1$1,S$4,Q,P$(1) 0040 DIM A2$2,B$3,C$1,F$50,H$5,W$5,M$(9)60,G$(5)1,K$(4)60,N$2,Q$2,X$2,D1$8,T$( 5)60,E$(5)60,E1$(5)50,O$(5)40,A2$2,A3$10 0050 P,Z,X,L,M,Q,S=0 0060 INIT(00)X$ : INIT(FF)R$ : A$="01C" 0110 M$(1)="Is the LED OFF ? 'Y' or 'N' " : M$(2)="Is the LED Flashing ? 'Y' or 'N' " : M$(3)="* The program will STOP on error " 0120 M$(4)="* The program will LOOP on error " : M$(5)="* Instructions will be displayed " : M$(6)="The controller has a non reportable failure you can not use" 0130 M$(7)="this diagnostic or the Error Interpreter " : M$(8)="* Please enter a value less than 10000" 0150 PRINT HEX(0304);AT(10,13);HEX(0E);"WARNING";HEX(0F);" FIELD SERVICE DIAG NOSTIC FOR ";HEX(200E);"2228D REV 1 ONLY";HEX(0F);AT(10,12);BOX(1,8);AT(1 0,51);BOX(1,17) : GOSUB '30 0170 PRINT HEX(030E);AT(0,18);"2228D TC FIELD SERVICE DIAGNOSTICS REV 1121";A T(1,17);BOX(0,44);HEX(0F) 0190 PRINT AT(2,15);"Requires VP BASIC Rev. 2.3 or MVP BASIC Rev. 2.1";AT(4,23 );"Available device addresses are:";AT(6,22);"019 01A 01B 01C 01D 01 E 01F" 0210 PRINT HEX(0F);AT(9,23); : LINPUT "What is the device address ?"-A$ 0240 IF STR(A$,1,1)="0"THEN 260 : GOTO 290 0260 IF STR(A$,2,1)<>"1"THEN 290 : IF STR(A$,3,1)<"9"THEN 290 0270 IF STR(A$,3,1)>"F"THEN 290 0280 SELECT #1<A$> : GOTO 310 0290 PRINT AT(15,28); : GOSUB '55 : PRINT " INVALID ADDRESS" : GOSUB '30 : PRINT AT(22,25,16); : GOTO 210 0310 STR(R$,3,2)=HEX(000D) 0330 $GIOSELECT#1(12321020,R$) : ERRORX=ERR : GOTO 600 0350 PRINT AT(12,31);"DEVICE IS ";HEX(06020404020E); 0360 STR(R$,8,1)=STR(R$,8,1)AND HEX(10) : IF STR(R$,8,1)=HEX(10)THEN 380 : PRINT "READY";HEX(020400000F) : GOSUB '30 : GOTO 390 0370 PRINT AT(15,10); : GOSUB '55 : PRINT " System is not configured for this device address" : GOSUB '30 : GOTO 210 0380 PRINT "BUSY";HEX(020400000F) : GOSUB '30 0390 PRINT HEX(0306);AT(0,10);"Device address '";A$;"' will be used for all te sts ";AT(1,25);BOX(0,4);HEX(0F) 0400 STR(A$,2,1)=STR(A$,2,1)OR HEX(08) : SELECT #2<A$> 0420 P1=1 : L=3 : L$=HEX(20) : GOSUB 540 : LINPUT L$ : IF L$="N"THEN 440 : IF L$="Y"THEN 720 : L=5 : GOSUB 580 : GOTO 420 0440 P1=2 : L=7 : D$=HEX(20) : GOSUB 540 : LINPUT D$ : IF D$="Y"THEN 460 : IF D$="N"THEN 520 : L=9 : GOSUB 580 : GOTO 440 0460 $GIO#1(40037510123286021200,R$) : IF STR(R$,2,1)>HEX(03)THEN 500 0470 PRINT HEX(06);AT(10,0);"The Power Up diagnostic has detected a failure in one of the following tests." : PRINT AT(11,0);"Write Bad Parity/Parity Generator Test/ Bank Decoder Test / Marching AA/55 Test" 0480 PRINT AT(12,0);"This failure must be corrected before this diagnostic can be used." : GOTO 470 0500 $GIO#1(40FF75FF75FF,R$) : GOTO 730 0520 P1=6 : L=9 : GOSUB 540 : GOTO 560 0540 PRINT AT(L,10);M$(P1); : RETURN 0560 P1=7 : L=10 : GOSUB 540 : PRINT HEX(06) : GOTO 520 0580 PRINT AT(L,10);"PLEASE TYPE A 'Y' OR 'N' ALL OTHER KEYS ARE INVALID" : GOSUB '40 : FOR I=10TO 60 : PRINT HEX(06) : PRINT AT(L,I);HEX(20) : NEXT I : RETURN 0600 IF X=48THEN 370 0610 PRINT AT(16,36,44);HEX(06020404020E);"ERROR";HEX(020400000F);" ";X; : GOSUB '30 : GOTO 170 0620 GOTO 370 0640 DEFFN'40 : FOR I=1TO 5000 : NEXT I : RETURN 0660 DEFFN'30 : PRINT HEX(06020402000E); : PRINT AT(22,26);"PRESS 'RETURN' TO CONTINUE";HEX(0F); : KEYIN C$,670,670 0670 IF C$=HEX(0D)THEN 680 : GOTO 660 0680 PRINT AT(10,0,); : INIT(00)C$ : RETURN 0700 DEFFN'55 : PRINT HEX(06020404020E);" ERROR ";HEX(020400000F); : RETURN 0720 $GIODUMMYREAD#1(123286021200,R$) 0730 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,30);"CHECKING DMA/PIO";AT(2,29);BOX(0,19);HEX(0F) 0740 STR(H$,1,5)=HEX(0001000900) : STR(R$,3,2)=HEX(0004) : $GIOWRITE#1(1232A0001200,R$)H$ : V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 760 0750 PRINT HEX(06);AT(4,0,);"CPU TIMED OUT WHILE SENDING WRITE COMMAND TO CONT ROLLER" : GOSUB '30 : GOTO 110 0760 PRINT HEX(06);AT(4,0,);"SENDING 256 BYTES OF DATA TO CONTROLLER MEMORY" 0770 C=0 : STR(R$,1,1)=HEX(00) : GOTO 790 0780 C=0 : $GIO#1(1910,R$) 0790 $GIOSENDDATA#1(123242101200,R$) : IF STR(R$,8,1)=HEX(00)THEN 810 0800 PRINT HEX(06);AT(6,0);"CPU TIMED OUT WHILE SENDING DATA TO CONTROLLER MEM ORY" : GOSUB '30 0810 IF STR(R$,1,1)<>HEX(FF)THEN 780 : STR(H$,1,5)=HEX(0101000900) : STR(R$,3,2)=HEX(0004) : $GIOREAD#1(1232A0001200,R$)H$ : V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 830 0820 PRINT HEX(06);AT(6,0,);"CPU TIMED OUT WHILE SENDING READ COMMAND TO CONTR OLLER" : GOSUB '30 : GOTO 110 0830 PRINT HEX(06);AT(6,0,);"READING & COMPARING 256 BYTES OF DATA FROM CONTRO LLER MEMORY" 0840 C=0 : STR(R$,1,1)=HEX(00) : GOTO 860 0850 C=0 : $GIO#1(1910,R$) 0860 STR(R$,3,2)=HEX(0004) : $GIOREADDATA#1(123283121200,R$) : STR(R$,8,1)=STR(R$,8,1)AND HEX(14) 0870 T$=STR(R$,8,1)AND HEX(10) : IF T$=HEX(10)THEN GOSUB 890 : V$=STR(R$,8,1)AND HEX(04) : IF V$=HEX(04)THEN GOSUB 900 0880 IF STR(R$,1,1)<>HEX(FF)THEN 850 : PRINT HEX(06);AT(8,0,);"DMA/PIO TEST PASSED" : J=70 : GOSUB '45 : GOTO 940 0890 PRINT AT(20,0);"THE CPU TIMED OUT BEFORE RECEIVING AN IB STROBE" : GOSUB '30 : RETURN 0900 PRINT AT(10,0);"THE PATTERN RECEIVED DOES NOT EQUAL THE PATTERN SENT" 0910 PRINT AT(15,20);"SENT PATTERN ";HEXOF(STR(R$,1,1)) : PRINT AT(15,40);"RECEIVED PATTERN ";HEXOF(STR(R$,2,1)) : GOSUB '30 : RETURN 0940 STR(H$,1,5)=HEX(0000018000) : STR(W$,1,5)=HEX(0100018000) 0950 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,27);"DMA MULTIPLEXER TEST";AT(2,26);BOX(0,21);HEX( 0F);AT(3,0);"SENDING UNIQUE ADDRESS PATTERNS" 0960 STR(R$,1,1)=HEX(00) : GOSUB '25 : $GIO#1(4210,R$) 0970 $GIO#1(1910,R$) 0980 STR(H$,4,1)=OR STR(R$,1,1) : GOSUB '25 : $GIO#1(4210,R$) 0990 R1$=STR(R$,1,1) : ROTATE(R1$,1) : STR(R$,1,1)=R1$ : IF STR(R$,1,1)=HEX(80)THEN 1000 : STR(H$,4,1)=HEX(80) : GOTO 980 1000 PRINT HEX(06);AT(5,0);"READING AND COMPARING UNIQUE ADDRESS PATTERNS" 1010 STR(R$,1,1)=HEX(00) : STR(H$,1,5)=STR(W$,1,5) : GOSUB '25 : $GIO#1(75108702,R$) 1020 IF STR(R$,1,1)=STR(R$,2,1)THEN 1040 1030 PRINT HEX(06);AT(10,0,);,"THE PATTERN RECEIVED DOES NOT EQUAL THE PATTERN SENT" : PRINT AT(15,27);"ADDRESS OF FAILURE = ";HEXOF(STR(H$,4,2));AT(20,20);"EX PECTED DATA = ";HEXOF(STR(R$,1,1));AT(20,45);"ACTUAL DATA = ";HEXOF(STR (R$,2,1)) : GOSUB '30 : GOTO 1050 1040 IF STR(R$,1,1)<>HEX(00)THEN 1050 : $GIO#1(1910,R$) 1050 STR(H$,4,1)=OR STR(R$,1,1) : GOSUB '25 : $GIO#1(75108702,R$) 1060 IF STR(R$,1,1)<>STR(R$,2,1)THEN 1030 1070 R1$=STR(R$,1,1) : ROTATE(R1$,1) : STR(R$,1,1)=R1$ : IF STR(R$,1,1)=HEX(80)THEN 1120 : STR(H$,4,1)=HEX(80) : GOTO 1050 1080 DEFFN'25 1090 STR(R$,3,2)=HEX(0004) : $GIOSENDCOMMANDSTRING#1(1232A0001200,R$)H$ 1100 V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN RETURN 1110 PRINT HEX(06);AT(4,0,);"CPU TIMED OUT WHILE SENDING COMMAND STRING TO CON TROLLER" : GOSUB '30 : GOTO 110 1120 PRINT HEX(06);AT(7,0,);"DMA ADDRESS MULTIPLEXER TEST PASSED" : GOSUB '40 : GOTO 1150 1150 M$(1)="Do you want to loop on error 'Y' or 'N' " : M$(2)="Do you want to display instructions 'Y' or 'N' " : M$(3)="* The program will STOP on error " 1160 M$(4)="* The program will LOOP on error " : M$(5)="* Instructions will be displayed " : M$(6)="* Instructions will NOT be displayed " 1170 M$(7)="How many passes do you wish to make (less than 10000) " : M$(8)="* Please enter a value less than 10000" : STR(A$,2,1)=HEX(31) 1180 PRINT HEX(0306);AT(0,10);"Device address '";A$;"' will be used for all te sts ";AT(1,25);BOX(0,4);HEX(0F) 1190 P1=1 : L=3 : L$=" " : GOSUB 1310 : LINPUT L$ : IF L$="Y"THEN 1210 : IF L$="N"THEN 1230 : L=5 : GOSUB 1380 : GOTO 1190 1210 P1=4 : L=5 : GOSUB 1310 : GOTO 1250 1230 P1=3 : L=5 : GOSUB 1310 1250 P1=2 : L=7 : D$=" " : GOSUB 1310 : LINPUT D$ : IF D$="Y"THEN 1270 : IF D$="N"THEN 1290 : L=9 : GOSUB 1380 : GOTO 1250 1270 P1=5 : L=9 : GOSUB 1310 : GOTO 1330 1290 P1=6 : L=9 : GOSUB 1310 : GOTO 1330 1310 PRINT AT(L,10);M$(P1); : RETURN 1330 P1=7 : L=11 : GOSUB 1310 : INPUT P : IF P>9999THEN 1360 1350 PRINT AT(13,10,70);"* All tests will make ";P;" pass(es)" : GOSUB '30 : GOTO 1400 1360 P1=8 : L=13 : GOSUB 1310 : GOSUB '30 : GOTO 1330 1380 PRINT AT(L,10);"PLEASE TYPE A 'Y' OR 'N' ALL OTHER KEYS ARE INVALID" : GOSUB '40 : FOR I=10TO 60 : PRINT HEX(06) : PRINT AT(L,I);HEX(20) : NEXT I : RETURN 1400 STR(H$,1,5)=HEX(000C300900) 1410 STR(W$,1,5)=HEX(0200000914) 1420 PRINT HEX(0306);AT(6,15);"SENDING MICROCODE TEST PROGRAMS TO CONTROLLER M EMORY" 1430 D1$="FSDIAG1" : GOSUB '21 : GOSUB '25 : GOSUB '150 : PRINT AT(8,15);"TRANSFER OF MICROCODE SUCCESSFUL";AT(10,15);"FORCING CONT ROLLER INTO MICROCODE TEST PROGRAM" : GOSUB '26 : GOTO 1620 1440 GOSUB '26 : PRINT AT(12,15);"CONTROLLER ENTERED MICROCODE HOST ROUTINE" : GOSUB '40 : GOTO 1620 1460 DEFFN'150 1470 STR(R$,1,13)=HEX(09070600000000000000000000) 1480 DATA LOAD DC OPEN T#0,D1$ 1490 DATA LOAD DC #0,A2$,A3$,K$() : IF END THEN 1560 : IF STR(A2$,1,1)>HEX(7F)THEN 1490 : IF STR(A2$,1,1)>HEX(03)THEN 1570 : $GIO/000(A604,R$)K$() : IF STR(A2$,2,1)<>STR(R$,5,1)THEN 1580 1500 ON A2$GOTO 1510,1520 : GOTO 1490 1510 IF STR(R$,3,1)<>HEX(06)THEN 1590 : GOTO 1530 1520 IF STR(R$,3,1)<>HEX(01)THEN 1590 1530 GOSUB '140 : GOTO 1490 1540 DEFFN'140 1550 $GIO#1(1232A0001200,R$)K$() : RETURN 1560 DATA SAVE DC CLOSE : RETURN 1570 PRINT AT(23,0);"CONVERSION NEEDED"; : STOP 1580 PRINT AT(23,0);"LRC ERROR"; : STOP 1590 PRINT AT(23,0);"WRONG TYPE"; : STOP 1600 PRINT AT(23,0);"CODE ADDRESS OUT OF RANGE"; : STOP 1620 A1$=HEX(00) 1630 SELECT PRINT 005(80) : PRINT HEX(03060E);AT(0,30);"TEST SELECTION MENU";AT(1,29);BOX(0,20);HEX(0 F) 1640 PRINT AT(2,10);"SF 0 - RE-KEY INPUT PARAMETERS";AT(3,10);"SF 1 - MOVING I NVERSIONS MEMORY TEST";AT(4,10);"SF 2 - SIO EXTERNAL LOOP";AT(5,10);"SF 3 - SIO/DMA TEST";AT(6,10);"SF 4 - CONTROL CHARACTER RAM TEST";AT(7,10);"S F 5 - PRIORITY INTERRUPT TEST " 1650 PRINT AT(8,10);"SF 6 - RS449 LOOP BACK TEST ";AT(9,10);"SF 7 - OPTION SWI TCH TEST";AT(10,10);"SF 8 - CHAIN MODE ";AT(11,10);"SF 9 - RESTART ";AT(1 2,10);"SF 16 - RETURN TO MAIN MENU" 1670 PRINT AT(14,10);"STRIKE THE SPECIAL FUNCTION KEY ASSOCIATED WITH THE DESI RED TEST";HEX(06) 1680 PRINT AT(16,10,70);"WHICH TEST DO YOU DESIRE?" : KEYIN A1$,,1700 : GOTO 1720 1700 IF A1$=HEX(00)THEN 1710 : IF A1$>HEX(09)THEN 1720 : ON VAL(A1$)GOTO 1740,1750,1760,1770,1780,1790,1800,1810,1820 : GOTO 1620 1710 STR(S$,1,2)=HEX(403F) : GOSUB '22 : GOTO 1150 1720 IF A1$=HEX(10)THEN 1830 : PRINT AT(17,10);"THERE IS NO SUCH TEST TRY AGAIN";HEX(07) 1730 FOR I=1TO 2000 : NEXT I : PRINT AT(17,10,31); : GOTO 1680 1740 GOSUB '1 : GOTO 1620 1750 GOSUB '2 : GOTO 1620 1760 GOSUB '3 : GOTO 1620 1770 GOSUB '4 : GOTO 1620 1780 GOSUB '5 : GOTO 1620 1790 GOSUB '6 : GOTO 1620 1800 GOSUB '7 : GOTO 1620 1810 GOSUB '8 : GOTO 1620 1820 $GIORESTART#1(4580,R$) : GOTO 30 1830 GOSUB '16 1850 DEFFN'1 1860 STR(W$,1,5)=HEX(0200000914) 1870 M$(1)="MOVING INVERSIONS TEST FAILED" : M$(9)="FAILING ADDRESS = " : M$(7)="EXPECTED DATA = " : M$(8)="ACTUAL DATA = " 1880 O$(5)="MOVING INVERSIONS TEST PASSED" : P$(1)=HEX(00) 1890 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,26);"MOVING INVERSIONS TEST";AT(2,25);BOX(0,23);HE X(0F) : IF A1$=HEX(08)THEN PRINT AT(0,70);"CHAIN MODE" 1900 IF A1$<>HEX(08)THEN P1=0 : IF D$="N"THEN 1930 1910 PRINT HEX(0F) : PRINT AT(10,0);"This test will run a more complete RAM check and is bank selective. In the ChainMode bank selection will be an automatic function. " 1920 GOSUB '30 1930 IF P=0THEN RETURN 1940 IF A1$<>HEX(08)THEN 1950 : IF Q>=4THEN Q=0 : Q=Q+1 : GOTO 1990 1950 PRINT AT(10,0,);AT(10,15);"RAM MEMORY WILL ONLY BE TESTED ON 1 BANK AT A TIME";AT(12,20);"ENTER 1 FOR BANK 1 ADDRESS 2000 TO 3FFF";AT(13,20);"ENTE R 2 FOR BANK 2 ADDRESS 4000 TO 7FFF" 1960 PRINT AT(14,20);"ENTER 3 FOR BANK 3 ADDRESS 8000 TO BFFF";AT(15,20);"ENTE R 4 FOR BANK 4 ADDRESS C000 TO FFFF";AT(18,15);"ENTER THE NUMBER OF THE B ANK YOU WISH TO TEST "; 1970 PRINT AT(18,15);"ENTER THE NUMBER OF THE BANK YOU WISH TO TEST "; : INPUT Q : IF Q>4THEN 1980 : GOTO 1990 1980 PRINT AT(20,15);"ILLEGAL BANK TRY AGAIN" : GOSUB '40 : PRINT AT(20,0,) : GOTO 1970 1990 ON QGOTO 2000,2010,2010,2010 2000 STR(S$,1,2)=HEX(453A) : GOTO 2040 2010 IF Q=2THEN STR(W$,2,2)=HEX(407F) : IF Q=3THEN STR(W$,2,2)=HEX(80BF) : IF Q=4THEN STR(W$,2,2)=HEX(C0FF) 2020 PRINT HEX(06);AT(10,0,) : C=0 : J=754 : Y=4 : X=2 : STR(S$,1,2)=HEX(403F) 2030 GOSUB '21 : GOSUB '22 : GOSUB '26 : STR(S$,1,2)=HEX(4639) 2040 GOSUB '20 : GOSUB '21 : GOSUB '22 2050 PRINT HEX(06);AT(20,25);"CURRENTLY TESTING BANK #";Q : J=30000 : C=0 : GOSUB '100 2060 IF STR(R$,2,1)=HEX(30)THEN 2080 2070 IF STR(R$,2,1)<>HEX(31)THEN 4120 : GOTO 2100 2080 GOSUB '23 : C=0 : J=754 : Y=4 : X=2 2090 GOSUB '20 : GOTO 2040 2100 IF C<>0THEN 2120 : GOSUB '70 : GOSUB '200 : IF S>1THEN 4130 : ON SGOTO 2110 2110 PRINT HEX(06);AT(10,0,);AT(10,23);M$(1) : GOSUB '80 2120 GOSUB '95 : GOSUB '100 : GOTO 2060 2150 DEFFN'2 2160 O$(5)=" SIO EXTERNAL LOOP PASSED" : P$(1)=HEX(00) 2170 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,30);"SIO EXTERNAL LOOP";AT(2,29);BOX(0,18);HEX(0F) : IF A1$=HEX(08)THEN PRINT AT(0,70);"CHAIN MODE" 2180 IF A1$<>HEX(08)THEN P1=0 : IF D$="N"THEN 2210 2190 PRINT HEX(0F) : PRINT AT(10,0,);"This program tests the controller's SIO external loop ba ck circuitry. The tests are conducted in all 3 modes ie Async, Bisync and SDLC. In addition 3 vectored interrupt tests are performed, Transmit, R eceive, Overrun, CTS, & DCD." 2200 GOSUB '30 2210 IF P=0THEN RETURN 2220 C=0 : Y=4 : STR(S$,1,2)=HEX(413E) 2230 M$(1)="SIO ASYNC TEST FAILED" : M$(2)="SIO BISYNC TEST FAILED" : M$(3)="SIO SDLC TEST FAILED" : M$(4)="EXPECTED DATA = " : M$(5)="ACTUAL DATA = " : M$(6)="CONTROLLER FAILED TO ENTER THE HUNT MODE" 2240 M$(7)="NO SYNC CHARACTERS OR FLAG CHARACTER BEING TRANSMITTED" : M$(8)="NOT RECEIVING SYNC OR FLAG CHARACTERS" : M$(9)="NOT TRANSMITTING DATA CHARACTERS" : T$(1)="NOT RECEIVING DATA CHARACTERS" : T$(2)="DATA ERROR BETWEEN TRANSMITTED AND RECEIVED DATA" 2250 T$(3)="TRANSMIT INTERRUPT FAILED" : T$(4)="RECEIVE INTERRUPT FAILED" : T$(5)="OVERRUN INTERRUPT FAILED" : E$(1)="NO EXTERNAL STATUS INTERRUPT FROM CTS LINE" : E$(2)="NO EXTERNAL STATUS INTERRUPT FROM DCD LINE" 2260 E$(3)="DCD INTERRUPT OCCURRED DURING CTS INTERRUPT CHECK. DTR IS TURNED O FF" 2270 GOSUB '20 : GOSUB '21 : GOSUB '22 2280 J=15000 : C=0 : GOSUB '100 2290 IF STR(R$,2,1)=HEX(30)THEN 2480 2300 IF STR(R$,2,1)<>HEX(31)THEN 4120 2310 IF C<>0THEN 2350 : GOSUB '70 : IF G$(2)>HEX(02)THEN 2330 : IF G$(2)=HEX(00)THEN A=1 : IF G$(2)=HEX(01)THEN A=2 : IF G$(2)=HEX(02)THEN A=3 2320 PRINT HEX(06);AT(8,0,);AT(8,28);M$(A) 2330 GOSUB '200 : IF S>12THEN 4130 : ON SGOTO 2340,2360,2370,2380,2390,2400,2410,2420,2430,2440,2450,2470 2340 PRINT HEX(06);AT(10,0,);AT(10,21);M$(6) 2350 GOSUB '95 : GOSUB '100 : GOTO 2290 2360 PRINT HEX(06);AT(10,0,);AT(10,12);M$(7) : GOTO 2350 2370 PRINT HEX(06);AT(10,0,);AT(10,22);M$(8) : GOTO 2350 2380 PRINT HEX(06);AT(10,0,);AT(10,23);M$(9) : GOTO 2350 2390 PRINT HEX(06);AT(10,0,);AT(10,26);T$(1) : GOTO 2350 2400 PRINT HEX(06);AT(10,13,);T$(2) : GOTO 2460 2410 PRINT HEX(06);AT(10,0,);AT(10,26);T$(3) : GOTO 2350 2420 PRINT HEX(06);AT(10,0,);AT(10,27);T$(4) : GOTO 2350 2430 PRINT HEX(06);AT(10,0,);AT(10,27);T$(5) : GOTO 2350 2440 PRINT HEX(06);AT(10,0,);AT(10,20);E$(1) : GOTO 2350 2450 PRINT HEX(06);AT(10,0,);AT(10,20);E$(2) : GOTO 2350 2460 PRINT AT(12,15);M$(4);HEX(20);BOX(1,5);HEX(20200E);HEXOF(G$(3));HEX(0F);A T(12,39);M$(5);HEX(20);BOX(1,5);HEX(20200E);HEXOF(G$(4));HEX(0F) : GOTO 2350 2470 PRINT HEX(06);AT(10,0,);AT(10,10);E$(3) : GOTO 2350 2480 GOSUB '23 : GOTO 2270 2510 DEFFN'3 2520 X$=ALL(00) 2530 M$(1)="SIO/DMA TEST FAILED" : M$(2)="EXPECTED DATA = " : M$(3)="ACTUAL DATA = " : M$(4)="CONTROLLER TIMED OUT WAITING FOR TRANSFER TO COMPLETE" 2540 M$(7)="DATA ERROR BETWEEN TRANSMITTED AND RECEIVED DATA" : M$(9)="TC FAILED TO DECREMENT CTC CHANNEL 2 DOWNCOUNTER" : T$(1)="PARITY ERROR DURING TRANSFER" 2550 O$(5)=" SIO/DMA TEST PASSED" : P$(1)=HEX(00) 2560 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,30);"SIO/DMA TEST";AT(2,29);BOX(0,13);HEX(0F) : IF A1$=HEX(08)THEN PRINT AT(0,70);"CHAIN MODE" 2570 IF A1$<>HEX(08)THEN P1=0 : IF D$="N"THEN 2610 2580 PRINT HEX(0F) : PRINT AT(10,0);"This test requires the \D2\D3\B2\B3\B2 LOOP BACK Plug. Th e test checks the ability to transfer data from one section of memory to another. The test is run in the Async mode." 2590 PRINT ;"This test checks transfers of 256 bytes, 512 bytes, 1k, 2k, 4k, 8 k,and 16k." 2600 GOSUB '30 2610 IF P=0THEN RETURN 2620 Y=4 : X=2 : STR(S$,1,2)=HEX(423D) 2630 GOSUB '20 : GOSUB '21 : GOSUB '22 2640 J=30000 : C=0 : GOSUB '100 2650 IF STR(R$,2,1)=HEX(30)THEN 2670 2660 IF STR(R$,2,1)=HEX(31)THEN 2680 : GOTO 4120 2670 GOSUB '23 : GOTO 2620 2680 IF C<>0THEN 2700 : GOSUB '70 : GOSUB '200 : IF S>4THEN 4130 : ON SGOTO 2690,2710,2730,2740 2690 PRINT HEX(06);AT(10,0,);AT(10,29);M$(1);AT(15,19);M$(9) 2700 GOSUB '95 : GOSUB '100 : GOTO 2650 2710 PRINT HEX(06);AT(10,0,);AT(10,29);M$(1);AT(12,17);M$(7) 2720 PRINT AT(15,20);M$(2);HEX(20);BOX(1,5);HEX(20200E);HEXOF(G$(2));HEX(0F);A T(15,44);M$(3);HEX(20);BOX(1,5);HEX(20200E);HEXOF(G$(3));HEX(0F) : GOTO 2700 2730 PRINT HEX(06);AT(10,0,);AT(10,29);M$(1);AT(14,25);T$(1) : GOTO 2700 2740 PRINT HEX(06);AT(10,0,);AT(10,29);M$(1);AT(14,15);M$(4) : GOTO 2700 2770 DEFFN'4 2780 M$(1)="CHARACTER RAM TEST FAILURE" : M$(2)="CHARACTER RECOGNIZED DURING NON RECOGNITION TEST" : M$(3)="CHARACTER NOT RECOGNIZED DURING RECOGNITION TEST" : M$(4)="CHARACTER RAM ADDRESS FAILURE = " 2790 D1$="CCRRTST" 2800 O$(5)="CHARACTER RAM TEST PASSED" : P$(1)=HEX(00) 2810 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,20);"CONTROL CHARACTER RECOGNITION RAM TEST ";AT(2 ,19);BOX(0,39);HEX(0F) : IF A1$=HEX(08)THEN PRINT AT(0,70);"CHAIN MODE" 2820 IF A1$<>HEX(08)THEN P1=0 : IF D$="N"THEN 2850 2830 PRINT HEX(0F) : PRINT AT(10,0);"This program checks the static ram using the SIO in Async mode. The failing character is interpreted as the RAM address. \C9\CE\D3 \D4\C1\CC\CC \D2\D3\B2\B3\B2 \CC\CF\CF\D0 \C2\C1\C3\CB" 2840 GOSUB '30 2850 IF P=0THEN RETURN 2860 Y=4 : X=2 : STR(S$,1,2)=HEX(433C) 2870 GOSUB '20 : GOSUB '21 : GOSUB '22 2880 J=20000 : C=0 : GOSUB '100 2890 IF STR(R$,2,1)=HEX(30)THEN 2910 2900 IF STR(R$,2,1)<>HEX(31)THEN 4120 : GOTO 2920 2910 GOSUB '23 : GOTO 2870 2920 IF C<>0THEN 2940 : GOSUB '70 : GOSUB '200 : IF S>2THEN 4130 : ON SGOTO 2930,2950 2930 PRINT HEX(06);AT(10,0,);AT(10,26);M$(1);AT(13,15);M$(2);AT(16,22);M$(4);H EX(20);HEXOF(G$(2)) 2940 GOSUB '95 : GOSUB '100 : GOTO 2890 2950 PRINT HEX(06);AT(10,0,);AT(10,26);M$(1);AT(13,15);M$(3);AT(16,22);M$(4);H EX(20);HEXOF(G$(2)) : GOTO 2940 2960 GOSUB '26 : J=745 : C=0 : GOSUB '100 2980 DEFFN'23 2990 PRINT HEX(06);AT(10,0,);AT(10,25);O$(5);AT(15,25);"CONTROLLER IS BACK IN HOST" : GOSUB '40 : IF P1<9999THEN 3000 : PRINT AT(0,5,6); : P1=0 3000 IF A1$=HEX(08)THEN 3010 : IF P1<PTHEN RETURN : RETURN CLEAR : RETURN 3010 RETURN CLEAR : RETURN 3030 DEFFN'21 3040 $IF ON #1,3080 3050 IF C<>0THEN 3060 : PRINT AT(4,14);"Device is not ready.........Expected -RBI to be Low" 3060 IF L$="N"THEN GOSUB '30 3070 IF L$="N"THEN 3080 : GOSUB '60 : GOTO 3040 3080 RETURN 3100 DEFFN'20 3110 PRINT AT(2,0) 3120 IF A1$=HEX(08)THEN 3130 : P1=P1+1 3130 GOSUB '66 : RETURN 3150 DEFFN'22 3160 PRINT AT(4,0,);AT(10,0);"FORCING CONTROLLER OUT OF HOST...." 3170 STR(R$,1,1)=STR(S$,1,1) : $GIO#1(4310752F123286021200,R$) 3190 V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 3220 3200 PRINT AT(10,49);"FAILED TO COME OUT OF HOST";AT(15,5);"2200 CPU TIMED OUT " : GOTO 4130 3220 IF STR(R$,2,1)=STR(S$,2,1)THEN 3250 3230 PRINT HEX(06);AT(10,0,);,"CONTROLLER RETURNED INCORRECT RESPONSE CODE" 3240 GOSUB '95 : GOTO 3160 3250 PRINT HEX(06);AT(10,0,);," CONTROLLER ENTERED SELECTED TEST" : J=50 : GOSUB '45 : PRINT HEX(06);AT(10,0,);," WAITING FOR CONTROLLER TO COMPLETE TESTS" : RETURN 3270 DEFFN'200 3280 S=0 3290 IF G$(1)=HEX(F0)THEN S=1 : IF G$(1)=HEX(F1)THEN S=2 : IF G$(1)=HEX(F2)THEN S=3 : IF G$(1)=HEX(F3)THEN S=4 : IF G$(1)=HEX(F4)THEN S=5 : IF G$(1)=HEX(F5)THEN S=6 : IF G$(1)=HEX(F6)THEN S=7 : IF G$(1)=HEX(F7)THEN S=8 : IF G$(1)=HEX(F8)THEN S=9 : IF G$(1)=HEX(F9)THEN S=10 : IF G$(1)=HEX(FA)THEN S=11 : IF G$(1)=HEX(FB)THEN S=12 3300 IF S=0THEN 4130 : RETURN 3320 DEFFN'24 3330 $GIODELAY#1(19501C5675FFE000,R$) : RETURN 3350 DEFFN'25 3360 STR(R$,3,2)=HEX(0004) : $GIO#1(1232A0001200,R$)H$ 3370 V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN RETURN 3380 PRINT HEX(06);AT(10,0,);," CPU TIMED OUT WHILE SENDING WRITE PARAMETERS" : GOTO 4130 3400 DEFFN'26 3410 STR(R$,3,2)=HEX(0002) : $GIO#1(75FF1232A0001200,R$)W$ 3420 V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 3440 3430 PRINT HEX(06);AT(10,0,);," CPU TIMED SENDING COMMAND STRING TO CONTROLLER " : GOTO 4130 3440 $GIO#1(75FF123287021200,R$) 3450 V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 3470 3460 PRINT HEX(06);AT(10,0,);" TIMED OUT WAITING FOR CONTROLLER TO RESPONED TO COMMAND STRING" : GOTO 4130 3470 IF STR(R$,2,1)=HEX(3F)THEN RETURN 3480 PRINT AT(10,0,);,"CONTROLLER RETURNED IMPROPER RESPONSE TO COMMAND STRING " : GOTO 4130 3500 DEFFN'95 3510 GOSUB '90 : IF L$="N"THEN GOSUB '30 : IF L$="N"THEN 3520 : GOSUB '60 : RETURN 3520 PRINT AT(18,0);"THE CONTROLLER IS NOW BACK IN THE HOST ROUTINE." : IF A1$=HEX(08)THEN 3530 : IF P1<PTHEN 3540 : RETURN CLEAR : RETURN 3530 RETURN CLEAR : RETURN 3540 PRINT AT(2,0) : IF A1$=HEX(08)THEN 3550 : P1=P1+1 3550 GOSUB '66 : PRINT AT(12,42);BOX(-1,-7);AT(15,33);BOX(-1,-5);AT(15,54);BOX(-1,-5) : GOSUB '22 : RETURN 3580 DEFFN'5 3590 M$(1)="CTC FAILED TO INTERRUPT" : M$(2)="SIO FAILED TO INTERRUPT DURING CTC INTERRUPT SERVICE" : M$(3)="PIO INTERRUPTED DURING CTC INTERRUPT SERVICE" : M$(4)="PIO FAILED TO INTERRUPT" 3600 M$(5)="INTERRUPT RECEIVED BUT VECTOR ADDRESS = FF" : O$(5)="PRIORITY INTERRUPT TEST PASSED" : P$(1)=HEX(00) 3610 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,25);"PRIORITY INTERRUPT TEST";AT(2,24);BOX(0,24);H EX(0F) : IF A1$=HEX(08)THEN PRINT AT(0,70);"CHAIN MODE" 3620 IF A1$<>HEX(08)THEN P1=0 : IF D$="N"THEN 3650 3630 PRINT HEX(0F) : PRINT AT(10,0);"This test checks the IEI and IEO line between the SIO,CTC , and PIO chips. The test insures also that higher priorty is observed. \C9\CE\D3\D4\C1\CC\CC \D2\D3\B2\B3\B2 \CC\CF\CF\D0 \C2\C1\C3\CB" 3640 GOSUB '30 3650 IF P=0THEN RETURN 3660 Y=4 : X=2 : STR(S$,1,2)=HEX(443B) 3670 GOSUB '20 : GOSUB '21 : GOSUB '22 3680 STR(R$,2,3)=HEX(000001) : $GIO#1(415575038602,R$) : STR(R$,8,1)=AND HEX(10) : IF STR(R$,8,1)<>HEX(10)THEN 3700 3690 PRINT HEX(06);AT(10,0,);AT(10,20);"CPU TIMED OUT WAITING FOR TEST COMPLET I0N" : GOTO 4130 3700 IF STR(R$,2,1)=HEX(56)THEN 3730 3710 IF STR(R$,2,1)=HEX(30)THEN 3740 3720 IF STR(R$,2,1)<>HEX(31)THEN 4120 : GOTO 3750 3730 $GIO#1(4055,R$) : J=300 : GOSUB '100 : GOTO 3700 3740 GOSUB '23 : GOTO 3660 3750 IF C<>0THEN 3770 : GOSUB '70 : GOSUB '200 : IF S>5THEN 4130 : ON SGOTO 3760,3780,3790,3800,3810 3760 PRINT HEX(06);AT(10,0,);AT(10,28);M$(1) 3770 GOSUB '95 : GOTO 3680 3780 PRINT HEX(06);AT(10,0,);AT(10,15);M$(2) : GOTO 3770 3790 PRINT HEX(06);AT(10,0,);AT(10,18);M$(3) : GOTO 3770 3800 PRINT HEX(06);AT(10,0,);AT(10,28);M$(4) : GOTO 3770 3810 PRINT HEX(06);AT(10,0,);AT(10,28);M$(5) : GOTO 3770 3840 DEFFN'6 3850 O$(5)=" RS449 LOOP BACK PASSED" : P$(1)=HEX(00) 3860 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,30);"RS449 LOOP BACK";AT(2,29);BOX(0,16);HEX(0F) : IF A1$=HEX(08)THEN PRINT AT(0,70);"CHAIN MODE" 3870 IF A1$<>HEX(08)THEN P1=0 : IF D$="N"THEN 3900 3880 PRINT HEX(0F) : PRINT AT(10,0);"This program tests the controller's SIO external loop bac k circuitry for the RS449 plug. The RS449 LOOP BACK must be INSTALLED and the Toggle switch switched. Testing is the same as for the SIO Extern al Loop Test." 3890 GOSUB '30 3900 IF P=0THEN RETURN 3910 GOTO 2220 3930 DEFFN'100 3940 FOR I=1TO J : $GIO#1(7501,R$) : $IF ON #2,3950 : NEXT I 3950 STR(R$,2,3)=HEX(000001) : $GIO#1(123286021200,R$) : STR(R$,8,1)=AND HEX(10) : IF STR(R$,8,1)<>HEX(10)THEN RETURN 3960 PRINT HEX(06);AT(10,0,);AT(10,20);"CPU TIMED OUT WAITING FOR TEST COMPLET I0N" : GOTO 4130 3980 DEFFN'70 3990 STR(R$,1,1)=HEX(47) 4000 FOR I=1TO Y : $GIO#1(42107510123287021200,R$) : V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 4020 4010 PRINT HEX(06);AT(10,0,);,"CPU TIMED OUT WAITING FOR RESPONSE TO BYTE REQU EST" : GOTO 4130 4020 IF STR(R$,2,1)<>HEX(38)THEN 4010 4030 $GIO#1(123287021200,R$) : V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 4040 : GOTO 4010 4040 G$(I)=STR(R$,2,1) : NEXT I : RETURN 4050 DEFFN'80 4060 PRINT AT(12,24);M$(9);HEX(20);BOX(1,7);HEX(20200E);HEXOF(G$(4));HEXOF(G$( 5));HEX(0F) 4070 PRINT AT(15,17);M$(7);HEX(20);BOX(1,5);HEX(20200E);HEXOF(G$(2));HEX(0F202 020);M$(8);HEX(20);BOX(1,5);HEX(20200E);HEXOF(G$(3));HEX(0F) : RETURN 4080 DEFFN'90 4100 STR(R$,1,1)=HEX(49) : IF L$="Y"THEN STR(R$,1,1)=HEX(48) : $GIO#1(123252121200,R$) : V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 4110 : GOTO 4130 4110 V$=STR(R$,1,1)XOR STR(R$,2,1)AND HEX(7F) : IF V$=HEX(7F)THEN RETURN 4120 PRINT HEX(06);AT(10,0,);,"CONTROLLER FAILED TO RETURN CORRECT PASS/FAIL R ESPONSE " 4130 GOSUB '30 : PRINT HEX(0306);AT(9,18);"THE CONTROLLER IS NOT RESPONDING PROPERLY.";AT( 11,16);"RUN RESTART OR CHAIN MODE TESTS" : GOSUB '40 : GOSUB '40 : RETURN CLEAR : GOTO 1620 4140 DEFFN'50 : PRINT AT(R,50,30);E$(A);AT(19,0,26);E1$(B) : RETURN 4160 DEFFN'66 : PRINT HEX(06);AT(0,0);"PASS#";P1;AT(20,0,) : RETURN 4180 DEFFN'60 : C=C+1 : PRINT AT(22,35);"LOOP#";C;HEX(0C); : IF C<>9999THEN RETURN : PRINT HEX(07);AT(22,40,5) : C=1 : RETURN 4210 DEFFN'8 4220 PRINT HEX(0E);AT(3,47);"*";AT(4,35);"*";AT(5,30);"*";AT(6,44);"*";AT(7,41 );"*"; : GOSUB '40 : GOSUB '40 : IF P>0THEN 4230 : P=1 4230 P1=1 : PRINT HEX(0306);AT(0,28);"CHAIN MODE TEST ROUTINE"; : IF D$="Y"THEN GOSUB 4260 : PRINT HEX(0503) 4240 GOSUB '1 : GOSUB '2 : GOSUB '3 : GOSUB '4 : GOSUB '5 4250 IF P1=PTHEN RETURN : P1=P1+1 : GOTO 4240 4260 PRINT AT(11,16);"THIS TEST WILL CALL AND EXECUTE ALL MARKED (*) TESTS";AT (13,16);"THE ENTIRE TEST WILL BE EXECUTED";" ";P;" ";"TIME(S)" : GOSUB '30 : D$="N" : RETURN 4280 DEFFN'7 4290 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,30);"OPTION SWITCH TEST";AT(2,29);BOX(0,19);HEX(0F ) 4300 IF D$="N"THEN 4330 4310 PRINT HEX(0F06) : PRINT AT(10,0,);"This program tests the user option switch on the daughte r board. The user sets the switch to the desired switch setting which wi ll automatically be updated on the screen. To exit the routine the user m ust key RETURN." 4320 GOSUB '30 4330 C=0 : Y=1 : STR(S$,1,2)=HEX(4A35) : STR(C$,1,1)=HEX(00) 4340 GOSUB '21 : GOSUB '22 4350 PRINT HEX(06);AT(04,0,);AT(9,27);"1 2 3 4 5 6 7 8";AT(11,22 );"O";AT(12,22);"N";AT(13,22);"^";AT(16,30);"USER OPTION SWITCH (SW2)" : I=10 : J=25 4360 PRINT HEX(0E);AT(22,30);"KEY RETURN TO EXIT TEST";HEX(0F) 4370 FOR K=1TO 8 4380 PRINT AT(I,J); : PRINT BOX(5,4) 4390 J=J+4 : NEXT K : J=0 : IF I>8THEN 4410 4400 I=I+4 : GOTO 4370 4410 $GIO#1(123286021200,R$) : V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 4420 : PRINT AT(18,20);"TIMED OUT WAITING FOR CURRENT SWITCH SETTING FROM CONTRO LLER" : GOTO 4660 4420 STR(C$,1,1)=STR(R$,2,1) 4430 I=11 : J=27 : C8$=STR(C$,1,1)AND HEX(01) : IF C8$=HEX(00)THEN 4440 : GOSUB 4600 : GOTO 4450 4440 GOSUB 4590 4450 J=31 : C8$=STR(C$,1,1)AND HEX(02) : IF C8$=HEX(00)THEN 4460 : GOSUB 4600 : GOTO 4470 4460 GOSUB 4590 4470 J=35 : C8$=STR(C$,1,1)AND HEX(04) : IF C8$=HEX(00)THEN 4480 : GOSUB 4600 : GOTO 4490 4480 GOSUB 4590 4490 J=39 : C8$=STR(C$,1,1)AND HEX(08) : IF C8$=HEX(00)THEN 4500 : GOSUB 4600 : GOTO 4510 4500 GOSUB 4590 4510 J=43 : C8$=STR(C$,1,1)AND HEX(10) : IF C8$=HEX(00)THEN 4520 : GOSUB 4600 : GOTO 4530 4520 GOSUB 4590 4530 J=47 : C8$=STR(C$,1,1)AND HEX(20) : IF C8$=HEX(00)THEN 4540 : GOSUB 4600 : GOTO 4550 4540 GOSUB 4590 4550 J=51 : C8$=STR(C$,1,1)AND HEX(40) : IF C8$=HEX(00)THEN 4560 : GOSUB 4600 : GOTO 4570 4560 GOSUB 4590 4570 J=55 : C8$=STR(C$,1,1)AND HEX(80) : IF C8$=HEX(00)THEN 4580 : GOSUB 4600 : GOTO 4610 4580 GOSUB 4590 : GOTO 4610 4590 K=I : PRINT AT(K,J);HEX(0E);"O" : K=K+1 : PRINT AT(K,J);HEX(0E);"F" : K=K+1 : PRINT AT(K,J);HEX(0E);"F" : PRINT HEX(0F) : RETURN 4600 K=I : PRINT AT(K,J);HEX(0E);"O" : K=K+1 : PRINT AT(K,J);HEX(0E);"N" : K=K+1 : PRINT AT(K,J);" " : PRINT HEX(0F) : RETURN 4610 E$=HEX(20) : KEYIN E$,4620,4610 : GOSUB '40 : GOTO 4410 4620 IF E$=HEX(0D)THEN 4630 : GOTO 4610 4630 $GIO#1(40507510123286021200,R$) : V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 4640 : PRINT AT(18,20);"TIMED OUT FORCING CONTROLLER BACK TO HOST" : GOTO 4130 4640 IF STR(R$,2,1)=HEX(30)THEN 4650 : GOTO 4660 4650 PRINT HEX(0306);AT(10,15);"CONTROLLER RETURNED TO HOST" : GOSUB '40 : RETURN 4660 GOSUB '30 : PRINT HEX(0306);AT(9,18);"THE CONTROLLER IS NOT RESPONDING PROPERLY.";AT( 11,16);"RUN EITHER AUTOMATIC TESTS OR CHAIN MODE TESTS" : GOSUB '40 : GOSUB '40 : GOTO 1620 4680 DEFFN'45 4690 FOR I=1TO J : $GIO#1(750A,R$) : NEXT I : RETURN 5000 DEFFN'16 : LOAD T"START" 9999 DEFFN'16 : LOAD T"START"