image of READY prompt

Wang2200.org

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"