Listing of file='28DFSR2' on disk='vmedia/mvp-diag-2.6.2.wvd.zip'
# Sector 4363, program filename = '28DFSR2' 0010 DIM A$3,A1$1,A2$2,A3$10,A4$3,B$3,C$1,D$1,D1$8,E$(5)60,E1$(5)50,F$50,G$(5) 1,H$5,K$(4)60,L$1,M$(9)60,N$2,O$(5)40,P$(1),Q$2,R$15,S$4,S1$3,S2$1,S3$1,T $(5)60,W$5,X$2 0020 P,Z,X,L,M,Q,S=0 0030 INIT(00)X$ : INIT(FF)R$ : A$="01C" 0040 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 " 0050 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" 0060 M$(7)="this diagnostic or the Error Interpreter " : M$(8)="* Please enter a value less than 10000" 0070 PRINT HEX(0306);AT(02,30);HEX(0E);"REVISION: 1158";HEX(0F) 0080 PRINT HEX(06);AT(10,13);HEX(0E);"WARNING";HEX(0F);" FIELD SERVICE DIAGNO STIC FOR ";HEX(200E);"2228D REV 2 & UP";HEX(0F);AT(10,12);BOX(1,8);AT(10, 51);BOX(1,17) : GOSUB '30 0090 PRINT HEX(030E);AT(0,17);"2228D TC FIELD SERVICE DIAGNOSTICS REV 1158";A T(1,16);BOX(0,45);HEX(0F) 0100 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,19);"019 01A 01B 01C 01D 01E 01F" 0110 PRINT HEX(0F);AT(9,23); : LINPUT "What is the device address ?"-A$ 0120 IF STR(A$,1,1)="0"THEN 130 : GOTO 150 0130 IF STR(A$,2,1)<>"1"THEN 150 : IF STR(A$,3,1)<"9"THEN 150 : IF STR(A$,3,1)>"F"THEN 150 0140 SELECT #1<A$> : GOTO 160 0150 PRINT AT(15,28); : GOSUB '55 : PRINT " INVALID ADDRESS" : GOSUB '30 : PRINT AT(22,25,16); : GOTO 110 0160 STR(R$,3,2)=HEX(000D) 0170 $GIOSELECT#1(12321020,R$) : ERRORX=ERR : GOTO 390 0180 PRINT HEX(06);AT(12,31,);"DEVICE IS ";HEX(06020404020E); 0190 STR(R$,8,1)=STR(R$,8,1)AND HEX(10) : IF STR(R$,8,1)=HEX(10)THEN 210 : PRINT "READY";HEX(020400000F) : GOSUB '30 : GOTO 240 0200 PRINT AT(15,10); : GOSUB '55 : PRINT " System is not configured for this device address" : GOSUB '30 : GOTO 110 0210 PRINT "BUSY";HEX(020400000F) 0220 L$=" " : PRINT AT(15,0) : LINPUT " Do you wish to invoke a software RESET of the Controller (Y o r N)?"-L$ : L=20 : IF L$="N"THEN 240 : IF L$="Y"THEN 230 : GOSUB 380 : GOTO 220 0230 $GIORESET#1(4580,R$) : GOTO 170 0240 PRINT HEX(0306);AT(0,10);"Device address '";A$;"' will be used for all te sts ";AT(1,25);BOX(0,4);HEX(0F) 0250 A4$=A$ : STR(A4$,2,1)=STR(A4$,2,1)OR HEX(08) : SELECT #2<A4$> 0260 P1=1 : L=3 : L$=" " : GOSUB 360 : LINPUT L$ : IF L$="N"THEN 270 : IF L$="Y"THEN 460 : L=5 : GOSUB 380 : GOTO 260 0270 P1=2 : L=7 : D$=" " : GOSUB 360 : LINPUT D$ : IF D$="Y"THEN 310 : IF D$="N"THEN 350 : L=9 : GOSUB 380 : GOTO 270 0280 IF U7$=" "THEN 480 : CONVERT U7$TO U4 : ERRORPRINT "Error in spacek." : END 0290 IF U4<=SPACEKTHEN 480 : SELECT P9 : PRINT HEX(0E);AT(2,0,40);"Insufficient memory.";AT(3,0,48);U4;"K partitio n required.";HEX(0D0D) : GOTO 120 0300 IF U6$<>HEX(1F)THEN 330 0310 $GIO#1(40037510123286021200,R$) : IF STR(R$,2,1)>HEX(03)THEN 340 0320 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" 0330 PRINT AT(12,0);"This failure must be corrected before this diagnostic can be used." : GOTO 320 0340 $GIO#1(40FF75FF75FF,R$) : GOTO 470 0350 P1=6 : L=9 : GOSUB 360 : GOTO 370 0360 PRINT AT(L,10);M$(P1); : RETURN 0370 P1=7 : L=10 : GOSUB 360 : PRINT HEX(06) : GOTO 350 0380 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 0390 IF X=48THEN 200 0400 PRINT AT(16,36,44);HEX(06020404020E);"ERROR";HEX(020400000F);" ";X; : GOSUB '30 : GOTO 90 0410 DEFFN'40 : FOR I=1TO 5000 : NEXT I : RETURN 0420 DEFFN'30 : PRINT HEX(06020402000E); : PRINT AT(22,26);"PRESS 'RETURN' TO CONTINUE";HEX(0F); : KEYIN C$,430,430 0430 IF C$=HEX(0D)THEN 440 : GOTO 420 0440 PRINT AT(10,0,); : INIT(00)C$ : RETURN 0450 DEFFN'55 : PRINT HEX(06020404020E);" ERROR ";HEX(020400000F); : RETURN 0460 $GIODUMMYREAD#1(123286021200,R$) 0470 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,30);"DMA/PIO TEST";AT(2,29);BOX(0,13);HEX(0F) 0480 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 500 0490 PRINT HEX(06);AT(4,0,);"CPU timed out while sending write command to cont roller" : GOSUB '30 : GOTO 40 0500 PRINT HEX(06);AT(4,0,);"Sending 256 Bytes of data to controller memory" 0510 C=0 : STR(R$,1,1)=HEX(00) : GOTO 530 0520 C=0 : $GIO#1(1910,R$) 0530 $GIOSENDDATA#1(123242101200,R$) : IF STR(R$,8,1)=HEX(00)THEN 550 0540 PRINT HEX(06);AT(6,0);"CPU timed out while sending data to controller mem ory" : GOSUB '30 0550 IF STR(R$,1,1)<>HEX(FF)THEN 520 : 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 570 0560 PRINT HEX(06);AT(6,0,);"CPU timed out while sending read command to contr oller" : GOSUB '30 : GOTO 40 0570 PRINT HEX(06);AT(6,0,);"Reading & comparing 256 Bytes of data from contro ller memory" 0580 C=0 : STR(R$,1,1)=HEX(00) : GOTO 600 0590 C=0 : $GIO#1(1910,R$) 0600 STR(R$,3,2)=HEX(0004) : $GIOREADDATA#1(123283121200,R$) : STR(R$,8,1)=STR(R$,8,1)AND HEX(14) 0610 T$=STR(R$,8,1)AND HEX(10) : IF T$=HEX(10)THEN GOSUB 630 : V$=STR(R$,8,1)AND HEX(04) : IF V$=HEX(04)THEN GOSUB 640 0620 IF STR(R$,1,1)<>HEX(FF)THEN 590 : PRINT HEX(06);AT(8,0,);"DMA/PIO test passed" : J=70 : GOSUB '45 : GOTO 660 0630 PRINT AT(20,0);"The CPU timed out before receiving an IB strobe" : GOSUB '30 : RETURN 0640 PRINT AT(10,0);"The pattern received does not equal the pattern sent" 0650 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 0660 STR(W$,1,5)=HEX(01000107FE) : STR(R$,3,2)=HEX(0004) : $GIO#1(1232A0001200,R$)W$ : V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 670 : PRINT HEX(0306);AT(1,0);"CPU TIMED OUT DURING MEMORY SIZE REQUEST" : GOSUB '30 : GOTO 10 0670 $GIO#1(75108702,R$) : S1$="64k" : S2$=HEX(80) : S3$=HEX(80) : IF STR(R$,2,1)=HEX(7F)THEN S1$="32k" : IF STR(R$,2,1)=HEX(BF)THEN S1$="48k" : IF STR(R$,2,1)=HEX(7F)THEN S2$=HEX(40) : IF STR(R$,2,1)=HEX(BF)OR STR(R$,2,1)=HEX(7F)THEN S3$=HEX(40) 0680 STR(H$,1,5)=HEX(0000018000) : STR(W$,1,5)=HEX(0100018000) : STR(H$,4,1)=S2$ : STR(W$,4,1)=S2$ 0690 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" 0700 STR(R$,1,1)=HEX(00) : GOSUB '25 : $GIO#1(4210,R$) 0710 $GIO#1(1910,R$) 0720 STR(H$,4,1)=OR STR(R$,1,1) : GOSUB '25 : $GIO#1(4210,R$) 0730 R1$=STR(R$,1,1) : ROTATE(R1$,1) : STR(R$,1,1)=R1$ : IF STR(R$,1,1)=S3$THEN 740 : STR(H$,4,1)=S2$ : GOTO 720 0740 PRINT HEX(06);AT(5,0);"Reading and comparing unique address patterns" 0750 STR(R$,1,1)=HEX(00) : STR(H$,1,5)=STR(W$,1,5) : GOSUB '25 : $GIO#1(75108702,R$) 0760 IF STR(R$,1,1)=STR(R$,2,1)THEN 780 0770 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 790 0780 IF STR(R$,1,1)<>HEX(00)THEN 790 : $GIO#1(1910,R$) 0790 STR(H$,4,1)=OR STR(R$,1,1) : GOSUB '25 : $GIO#1(75108702,R$) 0800 IF STR(R$,1,1)<>STR(R$,2,1)THEN 770 0810 R1$=STR(R$,1,1) : ROTATE(R1$,1) : STR(R$,1,1)=R1$ : IF STR(R$,1,1)=S3$THEN 860 : STR(H$,4,1)=S2$ : GOTO 790 0820 DEFFN'25 0830 STR(R$,3,2)=HEX(0004) : $GIOSENDCOMMANDSTRING#1(1232A0001200,R$)H$ 0840 V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN RETURN 0850 PRINT HEX(06);AT(4,0,);"CPU timed out while sending command string to con troller" : GOSUB '30 : GOTO 40 0860 PRINT HEX(06);AT(7,0,);"DMA address multiplexer test passed" : GOSUB '40 : GOTO 870 0870 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 " 0880 M$(4)="* The program will LOOP on error " : M$(5)="* Instructions will be displayed " : M$(6)="* Instructions will NOT be displayed " 0890 M$(7)="How many passes do you wish to make (less than 10000) " : M$(8)="* Please enter a value greater than 0 but less than 10000" 0900 PRINT HEX(0306);AT(0,10);"Device address '";A$;"' will be used for all te sts ";AT(1,25);BOX(0,4);HEX(0F) 0910 P1=1 : L=3 : L$=HEX(20) : GOSUB 970 : LINPUT L$ : IF L$="Y"THEN 920 : IF L$="N"THEN 930 : L=5 : GOSUB 1010 : GOTO 910 0920 P1=4 : L=5 : GOSUB 970 : GOTO 940 0930 P1=3 : L=5 : GOSUB 970 0940 P1=2 : L=7 : D$=HEX(20) : GOSUB 970 : LINPUT D$ : IF D$="Y"THEN 950 : IF D$="N"THEN 960 : L=9 : GOSUB 1010 : GOTO 940 0950 P1=5 : L=9 : GOSUB 970 : GOTO 980 0960 P1=6 : L=9 : GOSUB 970 : GOTO 980 0970 PRINT AT(L,10);M$(P1); : RETURN 0980 P1=7 : L=11 : GOSUB 970 : INPUT P : IF P<1OR P>9999THEN 1000 0990 PRINT AT(13,10,70);"* All tests will make ";P;" pass(es)" : GOSUB '30 : GOTO 1020 1000 P1=8 : L=13 : GOSUB 970 : GOSUB '30 : GOTO 980 1010 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 1020 STR(H$,1,5)=HEX(000C300900) 1030 STR(W$,1,5)=HEX(0200000914) 1040 PRINT HEX(0306);AT(4,0);"Sending microcode test programs to controller me mory" 1050 D1$="FSDIAG2" : GOSUB '21 : GOSUB '25 : GOSUB '150 : PRINT AT(5,0);"Transfer of microcode successful";AT(6,0);"Forcing control ler into microcode test program" : GOSUB '26 : GOTO 1220 1060 GOSUB '26 : PRINT AT(7,0);"Controller entered microcode Host routine" : GOSUB '40 : GOTO 1220 1070 DEFFN'150 1080 STR(R$,1,13)=HEX(09070600000000000000000000) 1090 DATA LOAD DC OPEN T#0,D1$ 1100 DATA LOAD DC #0,A2$,A3$,K$() : IF END THEN 1170 : IF STR(A2$,1,1)>HEX(7F)THEN 1100 : IF STR(A2$,1,1)>HEX(03)THEN 1180 : $GIO/000(A604,R$)K$() : IF STR(A2$,2,1)<>STR(R$,5,1)THEN 1190 1110 ON A2$GOTO 1120,1130 : GOTO 1100 1120 IF STR(R$,3,1)<>HEX(06)THEN 1200 : GOTO 1140 1130 IF STR(R$,3,1)<>HEX(01)THEN 1200 1140 GOSUB '140 : GOTO 1100 1150 DEFFN'140 1160 $GIO#1(1232A0001200,R$)K$() : RETURN 1170 DATA SAVE DC CLOSE : RETURN 1180 PRINT AT(23,0);"CONVERSION NEEDED"; : STOP 1190 PRINT AT(23,0);"LRC ERROR"; : STOP 1200 PRINT AT(23,0);"WRONG TYPE"; : STOP 1210 PRINT AT(23,0);"CODE ADDRESS OUT OF RANGE"; : STOP 1220 A1$=HEX(00) 1230 SELECT PRINT 005(80) : PRINT HEX(03060E);AT(0,30);"TEST SELECTION MENU";AT(1,29);BOX(0,20);HEX(0 F);AT(0,55);"MEMORY SIZE = ";S1$; 1240 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 " 1250 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" 1260 PRINT AT(14,10);"STRIKE THE SPECIAL FUNCTION KEY ASSOCIATED WITH THE DESI RED TEST";HEX(06) 1270 PRINT AT(16,10,70);"WHICH TEST DO YOU DESIRE?" : KEYIN A1$,,1280 : GOTO 1300 1280 IF A1$=HEX(00)THEN 1290 : IF A1$>HEX(09)THEN 1300 : ON VAL(A1$)GOTO 1320,1330,1340,1350,1360,1370,1380,1390,1400 : GOTO 1220 1290 STR(S$,1,2)=HEX(403F) : GOSUB '22 : GOTO 870 1300 IF A1$=HEX(10)THEN 1410 : PRINT AT(17,10);"THERE IS NO SUCH TEST TRY AGAIN";HEX(07) 1310 FOR I=1TO 2000 : NEXT I : PRINT AT(17,10,31); : GOTO 1270 1320 GOSUB '1 : GOTO 1220 1330 GOSUB '2 : GOTO 1220 1340 GOSUB '3 : GOTO 1220 1350 GOSUB '4 : GOTO 1220 1360 GOSUB '5 : GOTO 1220 1370 GOSUB '6 : GOTO 1220 1380 GOSUB '7 : GOTO 1220 1390 GOSUB '8 : GOTO 1220 1400 $GIORESTART#1(4580,R$) : GOTO 10 1410 GOSUB '16 1420 DEFFN'1 1430 STR(W$,1,5)=HEX(0200000914) 1440 M$(1)="Bank 1 (2000 to 3FFF)" : M$(2)="Bank 2 (4000 to 7FFF)" : M$(3)="Bank 3 (8000 to BFFF)" : M$(4)="Bank 4 (C000 to FFFF)" 1450 M$(6)="MOVING INVERSIONS TEST FAILED" : M$(9)="FAILING ADDRESS = " : M$(7)="EXPECTED DATA = " : M$(8)="ACTUAL DATA = " 1460 O$(5)="Moving Inversions test passed" : P$(1)=HEX(00) 1470 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" 1480 IF A1$<>HEX(08)THEN P1=0 : IF D$="N"THEN 1510 1490 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 all available banks." 1500 GOSUB '30 1510 IF P=0THEN RETURN 1520 IF A1$<>HEX(08)THEN 1530 : Q=5 : GOTO 1580 1530 PRINT AT(9,0,);AT(9,20);"Available memory = ";HEX(20);S1$;AT(10,20);"Ente r 1 for bank 1 address 2000 TO 3FFF";AT(11,20);"Enter 2 for bank 2 addres s 4000 TO 7FFF" 1540 IF S1$="32k"THEN 1550 : PRINT AT(12,20);"Enter 3 for bank 3 address 8000 TO BFFF"; : IF S1$="48k"THEN 1550 : PRINT AT(13,20);"Enter 4 for bank 4 address C000 TO FFFF"; 1550 PRINT AT(14,20);"Enter 5 for all of the above" 1560 PRINT AT(16,15);"Enter the number of the bank you wish to test "; : INPUT Q : IF S1$="32k"AND Q>2THEN 1570 : IF S1$="48k"AND Q>3THEN 1570 : IF Q>5THEN 1570 : GOTO 1580 1570 IF Q=5THEN 1580 : PRINT AT(20,15);"ILLEGAL BANK TRY AGAIN" : GOSUB '40 : PRINT AT(20,0,) : GOTO 1560 1580 ON QGOTO 1590,1600,1600,1600,1720 1590 STR(S$,1,2)=HEX(453A) : GOTO 1630 1600 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) 1610 PRINT HEX(06);AT(10,0,) : C=0 : J=754 : Y=5 : X=2 : STR(S$,1,2)=HEX(403F) 1620 GOSUB '21 : GOSUB '22 : GOSUB '26 : STR(S$,1,2)=HEX(4639) 1630 GOSUB '20 : GOSUB '21 : GOSUB '22 1640 PRINT HEX(06);AT(7,0);"Currently testing bank #";Q : J=30000 : C=0 : GOSUB '100 1650 IF STR(R$,2,1)=HEX(30)THEN 1670 1660 IF STR(R$,2,1)<>HEX(31)THEN 3700 : GOTO 1690 1670 GOSUB '23 : C=0 : J=754 : Y=4 : X=2 1680 GOTO 1630 1690 IF C<>0THEN 1710 : GOSUB '70 : GOSUB '200 : IF S>1THEN 3710 : ON SGOTO 1700 1700 PRINT HEX(06);AT(15,0,);AT(15,23);M$(6) : GOSUB '80 1710 GOSUB '95 : GOSUB '100 : GOTO 1650 1720 Q=1 : STR(S$,1,2)=HEX(4B34) : L=0 1730 GOSUB '20 : GOSUB '21 : GOSUB '22 1740 PRINT HEX(06);AT(8+L,0);M$(Q);" " : L=L+1 : Q=Q+1 1750 IF S1$="32k"AND Q=3THEN 1760 : IF S1$="48k"AND Q=4THEN 1760 : IF Q<>5THEN 1740 1760 J=30000 : C=0 : GOSUB '100 1770 IF STR(R$,2,1)=HEX(30)THEN 1810 1780 IF STR(R$,2,1)=HEX(31)THEN 1820 1790 $GIO#1(41554100,R$) : L=0 : IF STR(R$,2,1)=HEX(40)THEN L=1 : IF STR(R$,2,1)=HEX(80)THEN L=2 : IF STR(R$,2,1)=HEX(C0)THEN L=3 : IF L=0THEN 3700 1800 PRINT HEX(060E);AT(7+L,25);"OK";HEX(0F) : GOTO 1760 1810 L=L+1 : PRINT HEX(060E);AT(7+L,25);"OK";HEX(0F) : L=0 : Q=1 : GOSUB '23 : C=0 : J=754 : STR(S$,1,2)=HEX(4B34) : Q=1 : GOTO 1730 1820 IF C<>0THEN 1840 : GOSUB '70 : GOSUB '200 : IF S>1THEN 3710 : ON SGOTO 1830 1830 PRINT HEX(06);AT(15,0,);AT(15,23);M$(6) : GOSUB '80 1840 GOSUB '95 : GOSUB '100 1850 IF STR(R$,2,1)=HEX(30)THEN 1810 1860 IF STR(R$,2,1)=HEX(31)THEN 1820 1870 $GIO#1(41554100,R$) : L=0 : IF STR(R$,2,1)=HEX(40)THEN L=1 : IF STR(R$,2,1)=HEX(80)THEN L=2 : IF STR(R$,2,1)=HEX(C0)THEN L=3 : IF L=0THEN 3700 1880 PRINT HEX(060E);AT(7+L,25);"OK";HEX(0F) : GOSUB '100 : GOTO 1850 1890 DEFFN'2 1900 O$(5)="SIO external loop passed" : P$(1)=HEX(00) 1910 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" 1920 IF A1$<>HEX(08)THEN P1=0 : IF D$="N"THEN 1950 1930 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." 1940 GOSUB '30 1950 IF P=0THEN RETURN 1960 C=0 : Y=4 : STR(S$,1,2)=HEX(413E) 1970 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" 1980 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" 1990 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" 2000 E$(3)="DCD INTERRUPT OCCURRED DURING CTS INTERRUPT CHECK. DTR IS TURNED O FF" 2010 GOSUB '20 : GOSUB '21 : GOSUB '22 2020 J=15000 : C=0 : GOSUB '100 2030 IF STR(R$,2,1)=HEX(30)THEN 2220 2040 IF STR(R$,2,1)<>HEX(31)THEN 3700 2050 IF C<>0THEN 2090 : GOSUB '70 : IF G$(2)>HEX(02)THEN 2070 : IF G$(2)=HEX(00)THEN A=1 : IF G$(2)=HEX(01)THEN A=2 : IF G$(2)=HEX(02)THEN A=3 2060 PRINT HEX(06);AT(8,0,);AT(8,28);M$(A) 2070 GOSUB '200 : IF S>12THEN 3710 : ON SGOTO 2080,2100,2110,2120,2130,2140,2150,2160,2170,2180,2190,2210 2080 PRINT HEX(06);AT(15,21);M$(6) 2090 GOSUB '95 : GOSUB '100 : GOTO 2030 2100 PRINT HEX(06);AT(15,12);M$(7) : GOTO 2090 2110 PRINT HEX(06);AT(15,22);M$(8) : GOTO 2090 2120 PRINT HEX(06);AT(15,23);M$(9) : GOTO 2090 2130 PRINT HEX(06);AT(15,26);T$(1) : GOTO 2090 2140 PRINT HEX(06);AT(15,13);T$(2) : GOTO 2200 2150 PRINT HEX(06);AT(15,26);T$(3) : GOTO 2090 2160 PRINT HEX(06);AT(15,27);T$(4) : GOTO 2090 2170 PRINT HEX(06);AT(15,27);T$(5) : GOTO 2090 2180 PRINT HEX(06);AT(15,20);E$(1) : GOTO 2090 2190 PRINT HEX(06);AT(15,20);E$(2) : GOTO 2090 2200 PRINT AT(18,15);M$(4);HEX(20);BOX(1,5);HEX(20200E);HEXOF(G$(3));HEX(0F);A T(18,39);M$(5);HEX(20);BOX(1,5);HEX(20200E);HEXOF(G$(4));HEX(0F) : GOTO 2090 2210 PRINT HEX(06);AT(15,10);E$(3) : GOTO 2090 2220 GOSUB '23 : GOTO 2010 2230 DEFFN'3 2240 X$=ALL(00) 2250 M$(1)="256 Byte transfer" : M$(2)="512 Byte transfer" : M$(3)="1k transfer" : M$(4)="2k transfer" : M$(5)="4k transfer" : M$(6)="8k transfer" : M$(7)="16k transfer" 2260 M$(8)="EXPECTED DATA = " : M$(9)="ACTUAL DATA = " : T$(1)="CONTROLLER FAILED TO ENTER THE HUNT MODE" : T$(2)="NO SYNC CHARACTERS BEING TRANSMITTED" : T$(3)="NOT RECEIVING SYNC CHARACTERS" : T$(4)="DATA ERROR BETWEEN TRANSMITTED AND RECEIVED DATA" 2270 T$(5)="TC FAILED TO DECREMENT CTC CHANNEL 0 DOWNCOUNTER" : E$(1)="FAILED TO GET TC ON BOTH CHANNELS 0 & 1 OF DMA" : E$(2)="PARITY ERROR DURING TRANSFER" 2280 O$(5)="SIO/DMA test passed" : P$(1)=HEX(00) 2290 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" 2300 IF A1$<>HEX(08)THEN P1=0 : IF D$="N"THEN 2340 2310 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 Bisync mode." 2320 PRINT ;"This test checks transfers of 256 bytes, 512 bytes, 1k, 2k, 4k, 8 k,and a 16k transfer for 48k and 64k controllers." 2330 GOSUB '30 2340 IF P=0THEN RETURN 2350 Q=1 : L=0 : Y=4 : X=2 : STR(S$,1,2)=HEX(423D) 2360 GOSUB '20 : GOSUB '21 : GOSUB '22 2370 PRINT HEX(06);AT(8+L,0);M$(Q);" " : L=L+1 : Q=Q+1 2380 IF S1$="32k"AND Q=7THEN 2390 : IF Q<>8THEN 2370 2390 J=30000 : C=0 : GOSUB '100 2400 IF STR(R$,2,1)=HEX(30)THEN 2420 2410 IF STR(R$,2,1)=HEX(31)THEN 2430 : GOTO 2510 2420 L=L+1 : PRINT HEX(060E);AT(7+L,19);"OK";HEX(0F) : L=0 : Q=1 : GOSUB '23 : C=0 : J=754 : STR(S$,1,2)=HEX(423D) : GOTO 2350 2430 IF C<>0THEN 2450 : GOSUB '70 : GOSUB '200 : IF S>8THEN 3710 : ON SGOTO 2440,2440,2440,2460,2480,2490,2500 2440 PRINT HEX(06);AT(15,29);;T$(S) 2450 GOSUB '95 : GOSUB '100 : GOTO 2400 2460 PRINT HEX(06);AT(16,0,);AT(16,29);T$(4) 2470 PRINT AT(18,20);M$(8);HEX(20);BOX(1,5);HEX(20200E);HEXOF(G$(2));HEX(0F);A T(18,44);M$(9);HEX(20);BOX(1,5);HEX(20200E);HEXOF(G$(3));HEX(0F) : GOTO 2450 2480 PRINT HEX(06);AT(16,0,);AT(16,20);T$(5) : GOTO 2450 2490 PRINT HEX(06);AT(16,0,);AT(16,29);E$(1) : GOTO 2450 2500 PRINT HEX(06);AT(16,0,);AT(16,29);E$(2) : GOTO 2450 2510 $GIO#1(41554100,R$) : L=0 : IF STR(R$,2,1)=HEX(01)THEN L=1 : IF STR(R$,2,1)=HEX(03)THEN L=2 : IF STR(R$,2,1)=HEX(07)THEN L=3 : IF STR(R$,2,1)=HEX(0F)THEN L=4 : IF STR(R$,2,1)=HEX(1F)THEN L=5 : IF STR(R$,2,1)=HEX(3F)THEN L=6 : IF L=0THEN 3710 2520 PRINT HEX(060E);AT(7+L,19);"OK";HEX(0F) : GOTO 2390 2530 DEFFN'4 2540 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 = " 2550 D1$="CCRRTST" 2560 O$(5)="Character RAM test passed" : P$(1)=HEX(00) 2570 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" 2580 IF A1$<>HEX(08)THEN P1=0 : IF D$="N"THEN 2610 2590 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" 2600 GOSUB '30 2610 IF P=0THEN RETURN 2620 Y=4 : X=2 : STR(S$,1,2)=HEX(433C) 2630 GOSUB '20 : GOSUB '21 : GOSUB '22 2640 J=20000 : C=0 : GOSUB '100 2650 IF STR(R$,2,1)=HEX(30)THEN 2670 2660 IF STR(R$,2,1)<>HEX(31)THEN 3700 : GOTO 2680 2670 GOSUB '23 : GOTO 2630 2680 IF C<>0THEN 2700 : GOSUB '70 : GOSUB '200 : IF S>2THEN 3710 : ON SGOTO 2690,2710 2690 PRINT HEX(06);AT(15,0,);AT(15,26);M$(1);AT(18,15);M$(2);AT(20,22);M$(4);H EX(20);HEXOF(G$(2)) 2700 GOSUB '95 : GOSUB '100 : GOTO 2650 2710 PRINT HEX(06);AT(15,0,);AT(15,26);M$(1);AT(18,15);M$(3);AT(20,22);M$(4);H EX(20);HEXOF(G$(2)) : GOTO 2700 2720 GOSUB '26 : J=745 : C=0 : GOSUB '100 2730 DEFFN'23 2740 PRINT HEX(060E);AT(7,0);O$(5);AT(7,35);"....Controller is back in host";H EX(0F) : GOSUB '40 : IF P1<9999THEN 2750 : PRINT AT(0,5,6); : P1=0 2750 IF A1$=HEX(08)THEN 2760 : IF P1<PTHEN RETURN : RETURN CLEAR : RETURN 2760 RETURN CLEAR : RETURN 2770 DEFFN'21 2780 $IF ON #1,2820 2790 IF C<>0THEN 2800 : PRINT AT(4,0,);AT(4,14);"Device is not ready.........Expected -RBI to be Low" 2800 IF L$="N"THEN GOSUB '30 2810 IF L$="N"THEN 2820 : GOSUB '60 : GOTO 2780 2820 RETURN 2830 DEFFN'20 2840 PRINT AT(2,0) 2850 IF A1$=HEX(08)THEN 2860 : P1=P1+1 2860 GOSUB '66 : RETURN 2870 DEFFN'22 2880 PRINT AT(4,0,);AT(4,0);"Forcing controller out of host...." 2890 STR(R$,1,1)=STR(S$,1,1) : $GIO#1(4310752F123286021200,R$) 2900 V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 2920 2910 PRINT AT(4,36);"Failed to come out of host";AT(20,0);"2200 CPU timed out" : GOTO 3710 2920 IF STR(R$,2,1)=STR(S$,2,1)THEN 2950 2930 PRINT HEX(06);AT(5,0,);,"Controller returned incorrect response code" 2940 GOSUB '95 : GOTO 2880 2950 PRINT HEX(06);AT(5,0);"Controller entered selected test(s)";AT(6,0);"Wait ing for controller to complete selected test(s)" : RETURN 2960 DEFFN'200 2970 S=0 2980 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 2990 IF S=0THEN 3710 : RETURN 3000 DEFFN'24 3010 $GIODELAY#1(19501C5675FFE000,R$) : RETURN 3020 DEFFN'25 3030 STR(R$,3,2)=HEX(0004) : $GIO#1(1232A0001200,R$)H$ 3040 V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN RETURN 3050 PRINT HEX(06);AT(10,0,);," CPU timed out while sending write command stri ng" : GOTO 3710 3060 DEFFN'26 3070 STR(R$,3,2)=HEX(0002) : $GIO#1(75FF1232A0001200,R$)W$ 3080 V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 3100 3090 PRINT HEX(06);AT(10,0,);," CPU timed out sending goto command string to c ontroller" : GOTO 3710 3100 $GIO#1(75FF123287021200,R$) 3110 V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 3130 3120 PRINT HEX(06);AT(10,0,);" Timed out waiting for controller to respond to goto command string" : GOTO 3710 3130 IF STR(R$,2,1)=HEX(3F)THEN RETURN 3140 PRINT AT(10,0,);,"Controller returned improper response to goto command s tring" : GOTO 3710 3150 DEFFN'95 3160 GOSUB '90 : IF L$="N"THEN GOSUB '30 : IF L$="N"THEN 3170 : GOSUB '60 : RETURN 3170 PRINT AT(18,0);"The controller is now back in the host routine." : IF A1$=HEX(08)THEN 3180 : IF P1<PTHEN 3190 : RETURN CLEAR : RETURN 3180 RETURN CLEAR : RETURN 3190 PRINT AT(2,0) : IF A1$=HEX(08)THEN 3200 : P1=P1+1 3200 GOSUB '66 : PRINT AT(15,42);BOX(-1,-7);AT(18,33);BOX(-1,-5);AT(18,54);BOX(-1,-5) : GOSUB '22 : RETURN 3210 DEFFN'5 3220 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" 3230 M$(5)="INTERRUPT RECEIVED BUT VECTOR ADDRESS = FF" : O$(5)="Priority Interrupt test passed" : P$(1)=HEX(00) 3240 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" 3250 IF A1$<>HEX(08)THEN P1=0 : IF D$="N"THEN 3280 3260 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 priority is observed . \C9\CE\D3\D4\C1\CC\CC \D2\D3\B2\B3\B2 \CC\CF\CF\D0 \C2\C1\C3\CB" 3270 GOSUB '30 3280 IF P=0THEN RETURN 3290 Y=4 : X=2 : STR(S$,1,2)=HEX(443B) 3300 GOSUB '20 : GOSUB '21 : GOSUB '22 3310 STR(R$,2,3)=HEX(000001) : $GIO#1(405575038602,R$) : STR(R$,8,1)=AND HEX(10) : IF STR(R$,8,1)<>HEX(10)THEN 3330 3320 PRINT HEX(06);AT(10,0,);AT(10,20);"CPU timed out waiting for test complet ion" : GOTO 3710 3330 IF STR(R$,2,1)=HEX(56)THEN 3360 3340 IF STR(R$,2,1)=HEX(30)THEN 3370 3350 IF STR(R$,2,1)<>HEX(31)THEN 3700 : GOTO 3380 3360 $GIO#1(4055,R$) : J=300 : GOSUB '100 : GOTO 3330 3370 GOSUB '23 : GOTO 3290 3380 IF C<>0THEN 3400 : GOSUB '70 : GOSUB '200 : IF S>5THEN 3710 : ON SGOTO 3390,3410,3420,3430,3440 3390 PRINT HEX(06);AT(15,0,);AT(15,28);M$(1) 3400 GOSUB '95 : GOTO 3310 3410 PRINT HEX(06);AT(15,0,);AT(15,15);M$(2) : GOTO 3400 3420 PRINT HEX(06);AT(15,0,);AT(15,18);M$(3) : GOTO 3400 3430 PRINT HEX(06);AT(15,0,);AT(15,28);M$(4) : GOTO 3400 3440 PRINT HEX(06);AT(15,0,);AT(15,28);M$(5) : GOTO 3400 3450 DEFFN'6 3460 O$(5)="RS449 loop back passed" : P$(1)=HEX(00) 3470 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" 3480 IF A1$<>HEX(08)THEN P1=0 : IF D$="N"THEN 3510 3490 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." 3500 GOSUB '30 3510 IF P=0THEN RETURN 3520 GOTO 1960 3530 DEFFN'100 3540 FOR I=1TO J : $GIO#1(7501,R$) : $IF ON #2,3550 : NEXT I 3550 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 3560 PRINT HEX(06);AT(15,0,);AT(15,20);"CPU timed out waiting for test complet ion" : GOTO 3710 3570 DEFFN'70 3580 STR(R$,1,1)=HEX(47) 3590 FOR I=1TO Y : $GIO#1(42107510123287021200,R$) : V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 3610 3600 PRINT HEX(06);AT(15,0,);,"CPU timed out waiting for response to byte requ est" : GOTO 3710 3610 IF STR(R$,2,1)<>HEX(38)THEN 3600 3620 $GIO#1(123287021200,R$) : V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 3630 : GOTO 3600 3630 G$(I)=STR(R$,2,1) : NEXT I : RETURN 3640 DEFFN'80 3650 PRINT AT(18,24);M$(9);HEX(20);BOX(1,7);HEX(20200E);HEXOF(G$(4));HEXOF(G$( 5));HEX(0F) 3660 PRINT AT(20,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 3670 DEFFN'90 3680 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 3690 : GOTO 3710 3690 V$=STR(R$,1,1)XOR STR(R$,2,1)AND HEX(7F) : IF V$=HEX(7F)THEN RETURN 3700 PRINT HEX(06);AT(7,0);"Controller failed to return correct pass/fail resp onse " 3710 GOSUB '30 : PRINT HEX(0306);AT(9,18);"The controller is not responding properly.";AT( 11,18);"Run Restart or Chain mode test" : GOSUB '40 : GOSUB '40 : RETURN CLEAR : GOTO 1220 3720 DEFFN'50 : PRINT AT(R,50,30);E$(A);AT(19,0,26);E1$(B) : RETURN 3730 DEFFN'66 : PRINT HEX(06);AT(0,0);"PASS#";P1;AT(20,0,) : RETURN 3740 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 3750 DEFFN'8 3760 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 3770 : P=1 3770 P1=1 : PRINT HEX(0306);AT(0,28);"CHAIN MODE TEST ROUTINE"; : IF D$="Y"THEN GOSUB 3800 : PRINT HEX(0503) 3780 GOSUB '1 : GOSUB '2 : GOSUB '3 : GOSUB '4 : GOSUB '5 3790 IF P1=PTHEN RETURN : P1=P1+1 : GOTO 3780 3800 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 3810 DEFFN'7 3820 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,30);"OPTION SWITCH TEST";AT(2,29);BOX(0,19);HEX(0F ) 3830 IF D$="N"THEN 3860 3840 PRINT HEX(0F06) : PRINT AT(10,0,);"This program tests the user option switch on the mother 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." 3850 GOSUB '30 3860 C=0 : Y=1 : STR(S$,1,2)=HEX(4A35) : STR(C$,1,1)=HEX(00) 3870 GOSUB '21 : GOSUB '22 3880 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 3890 PRINT HEX(0E);AT(22,30);"KEY RETURN TO EXIT TEST";HEX(0F) 3900 FOR K=1TO 8 3910 PRINT AT(I,J); : PRINT BOX(5,4) 3920 J=J+4 : NEXT K : J=0 : IF I>8THEN 3940 3930 I=I+4 : GOTO 3900 3940 $GIO#1(123286021200,R$) : V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 3950 : PRINT AT(18,20);"Timed out waiting for current switch setting from contro ller" : GOTO 4190 3950 STR(C$,1,1)=STR(R$,2,1) 3960 I=11 : J=27 : C8$=STR(C$,1,1)AND HEX(01) : IF C8$=HEX(00)THEN 3970 : GOSUB 4130 : GOTO 3980 3970 GOSUB 4120 3980 J=31 : C8$=STR(C$,1,1)AND HEX(02) : IF C8$=HEX(00)THEN 3990 : GOSUB 4130 : GOTO 4000 3990 GOSUB 4120 4000 J=35 : C8$=STR(C$,1,1)AND HEX(04) : IF C8$=HEX(00)THEN 4010 : GOSUB 4130 : GOTO 4020 4010 GOSUB 4120 4020 J=39 : C8$=STR(C$,1,1)AND HEX(08) : IF C8$=HEX(00)THEN 4030 : GOSUB 4130 : GOTO 4040 4030 GOSUB 4120 4040 J=43 : C8$=STR(C$,1,1)AND HEX(10) : IF C8$=HEX(00)THEN 4050 : GOSUB 4130 : GOTO 4060 4050 GOSUB 4120 4060 J=47 : C8$=STR(C$,1,1)AND HEX(20) : IF C8$=HEX(00)THEN 4070 : GOSUB 4130 : GOTO 4080 4070 GOSUB 4120 4080 J=51 : C8$=STR(C$,1,1)AND HEX(40) : IF C8$=HEX(00)THEN 4090 : GOSUB 4130 : GOTO 4100 4090 GOSUB 4120 4100 J=55 : C8$=STR(C$,1,1)AND HEX(80) : IF C8$=HEX(00)THEN 4110 : GOSUB 4130 : GOTO 4140 4110 GOSUB 4120 : GOTO 4140 4120 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 4130 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 4140 E$=HEX(20) : KEYIN E$,4150,4140 : GOSUB '40 : GOTO 3940 4150 IF E$=HEX(0D)THEN 4160 : GOTO 4140 4160 $GIO#1(40507510123286021200,R$) : V$=STR(R$,8,1)AND HEX(10) : IF V$<>HEX(10)THEN 4170 : PRINT AT(18,20);"Timed out forcing controller back to host" : GOTO 3710 4170 IF STR(R$,2,1)=HEX(30)THEN 4180 : GOTO 4190 4180 PRINT HEX(0306);AT(10,15);"Controller returned to host" : GOSUB '40 : RETURN 4190 GOSUB '30 : PRINT HEX(0306);AT(9,18);"The controller is not responding properly.";AT( 11,18);"Run Restart or Chain mode test" : GOSUB '40 : GOSUB '40 : GOTO 1220 4200 DEFFN'45 4210 FOR I=1TO J : $GIO#1(750A,R$) : NEXT I : RETURN 4220 DEFFN'16 : LOAD T"START"