Listing of file='28EFSR2' on disk='vmedia/mvp-diag-2.6.2.wvd.zip'
# Sector 4210, program filename = '28EFSR2' 0010 REM %^ : REM **** 2228E/F FIELD SERVICE DIAGNOSTICS LAST MODIFIED 07/08/83 **** : REM **** '30 '40 '55 GLOBAL SUBROUTINES DEFINED IN THIS CODE SECTION **** 0020 REM *************************** INITIALIZATION ************************** 0030 DIM A$3,A1$1,A2$2,A3$3,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$4,S2$1,S3$1,T$ (5)60,W$5,X$2 0040 P,Z,X,L,M,Q,S=0 : INIT(00)X$ : INIT(00)K$ : INIT(FF)R$ : A$="01C" 0050 REM % COMMON VARIABLES : REM R$ = $GIO REGISTER STRING : REM L$ = LOOP ON ERROR (Y OR N) : REM D$ = INSTRUCTIONS (Y, N, OR C) : REM P = NUMBER OF PASSES (<10000) 0060 REM % VARIABLES : REM A$ = 3 DIGIT DEVICE ADDRESS : REM B$ = ERROR STRING : REM C$ = SINGLE CHAR KEYIN VARIABLE : REM M$ = MESSAGE ARRAY FOR DISPLAY 0070 REM L = LINE NUMBER FOR PRINT SUBROUTINE : REM M = MESSAGE POINTER : REM Z = TEST NUMBER : REM X = ERROR VARIABLE 0080 REM % MESSAGE ARRAY 0090 M$(1)="Is the LED OFF ? 'Y' or 'N'" : M$(2)="Is the LED Flashing ? 'Y' or 'N'" : M$(3)="The controller has a non reportable failure you can not use" : M$(4)="this diagnostic or the Error Interpreter " 0100 REM % PRINT REV 2 WARNING SCREEN 0110 PRINT HEX(0306); AT(02,30);HEX(0E);"REVISION: 1370"; HEX(0F) 0120 PRINT HEX(06); AT(10,6);HEX(0E);"WARNING";HEX(0F);" FIELD SERVICE DIAGNO STIC FOR ";HEX(200E);"2228E/F RS232, RS449,& X21";HEX(0F);AT(10,5);BOX(1, 8);AT(10,44);BOX(1,27) : GOSUB '30 0130 REM % PRINT TEST HEADER 0140 PRINT HEX(030E);AT(0,17);"2228E/F TC FIELD SERVICE DIAGNOSTICS REV 1370" ;AT(1,16);BOX(0,47);HEX(0F) 0150 REM % PRINT AVALIABLE DEVICE ADDRESSES 0160 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" 0170 REM % INPUT DEVICE ADDRESS, STORE IT IN A$ 0180 PRINT HEX(0F);AT(9,23); : LINPUT "What is the device address ?"-A$ 0190 REM % CHECK TO SEE IF ADDRESS IS WITHIN VALID RANGE 0200 REM FIRST DIGIT OF A$ MUST = 0 0210 IF STR(A$,1,1) = "0" THEN 230 : GOTO 250 0220 REM THE SECOND DIGIT IS PRESENTLY SPECIFIED TO BE A 1, : REM THE LAST DIGIT IS PRESENTLY SPECIFIED TO BE 9,A,B,C,D,E, OR F 0230 IF STR(A$,2,1) <>"1" THEN 250 : IF STR(A$,3,1) <"9" THEN 250 : IF STR(A$,3,1) >"F" THEN 250 0240 SELECT #1 <A$> : GOTO 270 0250 PRINT AT(15,28); : GOSUB '55 : PRINT " INVALID ADDRESS" : GOSUB '30 : PRINT AT(22,25,16); : GOTO 180 0260 REM % SET UP $GIO TIMEOUT (MAX VALUE FOR INPUT ON MVP SYSTEM) 0270 STR(R$,3,2)=HEX(000D) 0280 REM % SELECT DEVICE AND TIMEOUT READY 0290 $GIO SELECT #1 (1232 1020,R$) : ERROR X = ERR : GOTO 570 0300 REM % PRINT RESULT OF SELECTION ROUTINE 0310 PRINT AT(12,31);"DEVICE IS "; HEX(06020404020E); 0320 STR(R$,8,1)=STR(R$,8,1)AND HEX(10) : IF STR(R$,8,1)=HEX(10) THEN 370 0330 REM % RESET THE T.C. CONTROLLER 0340 $GIO #1(4580,R$) 0350 PRINT "READY";HEX(020400000F) : GOSUB '30 : GOSUB 380 0360 PRINT AT(15,10); : GOSUB '55 : PRINT " System is not configured for this device address" : GOSUB '30 : GOTO 180 0370 PRINT "BUSY";HEX(020400000F) : GOSUB '30 0380 PRINT HEX(0306);AT(0,10);"Device address '";A$;"' will be used for all te sts ";AT(1,25);BOX(0,4);HEX(0F) 0390 STR(A4$,1,3)=STR(A$,1,3) : STR(A4$,2,1)=STR(A$,2,1) OR HEX(08) : SELECT #2<A4$> 0400 REM % INPUT THE LED ON / OFF CONDITION PARAMETER 0410 P1=1 : L=3 : L$=" " : GOSUB 530 : LINPUT L$ : IF L$ = "N" THEN 430 : IF L$ = "Y" THEN 680 : L=5 : GOSUB 550 : GOTO 410 0420 REM % INPUT THE LED FLASHING OR ON SOLID PARAMETER 0430 P1=2 : L=7 : D$=" " : GOSUB 530 : LINPUT D$ : IF D$ = "Y" THEN 450 : IF D$ = "N" THEN 510 : L=9 : GOSUB 550 : GOTO 430 0440 REM %^ CHECK CONTROLLERS REPORTABLE ERROR CONDITION FOR MEMORY ERRORS 0450 $GIO #1(4003 7510 1232 8602 1200,R$) : IF STR(R$,2,1) >HEX(03) THEN 490 0460 PRINT HEX(06); AT(10,0);"The Power Up diagnostic has detected a failure i n one of the following tests." : PRINT AT(11,0);"Write Bad Parity/Parity Generator Test/ Bank Decoder Test / Marching AA/55 Test" 0470 PRINT AT(12,0);"This failure must be corrected before this diagnostic can be used." : GOTO 460 0480 REM % NO CONTROLLER MEMORY FAILURE DETECTED. FORCE CONTROLLER TO BOOT 0490 $GIO #1(40FF 75FF 75FF,R$) : GOTO 690 0500 REM % MEMORY FAILURE DETECTED. REPORT CONDITION TO USER. 0510 P1=3 : L=9 : GOSUB 530 : P1=4 : L=10 : GOSUB 530 : PRINT HEX(06) : GOTO 510 0520 REM % PRINT NON REPORTABLE ERROR MESSAGE FOR SOLID LED 0530 PRINT AT(L,10);M$(P1); : RETURN 0540 REM % ERROR ON INPUT SEQUENCE FOR Y OR N QUESTION 0550 PRINT AT(L,10);"PLEASE TYPE A 'Y' OR 'N' ALL OTHER KEYS ARE INVALID" : GOSUB '40 : FOR I = 10 TO 60 : PRINT HEX(06) : PRINT AT(L,I); HEX(20) : NEXT I : RETURN 0560 REM %^ ERROR HANDLING ROUITNE FOR NON CONFIGURED ADDRESS 0570 IF X = 48 THEN 360 0580 PRINT AT(16,36,44);HEX(06020404020E);"ERROR"; HEX(020400000F);" ";X; : GOSUB '30 : GOTO 140 0590 REM % '40 SUBROUTINE ( SIMPLE DELAY ROUTINE ) 0600 DEFFN'40 : FOR I = 1 TO 5000 : NEXT I : RETURN 0610 REM % '30 SUBROUTINE ( WAIT FOR A CARRIAGE RETURN TO CONTINUE ) 0620 DEFFN'30 : PRINT HEX(06020402000E); : PRINT AT(22,26);"PRESS 'RETURN' TO CONTINUE";HEX(0F); : KEYIN C$,630,630 0630 IF C$=HEX(0D) THEN 640 : GOTO 620 0640 PRINT AT(10,0,); : INIT(00)C$ : RETURN 0650 REM % '55 SUBROUTINE ( PRINT REVERSE VIDEO "ERROR" ) 0660 DEFFN'55 : PRINT HEX(06020404020E);" ERROR ";HEX(020400000F); : RETURN : REM %^ 0670 REM % DMA / PIO TEST 0680 $GIO DUMMY READ #1(1232 8602 1200,R$) 0690 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,30); "DMA/PIO TEST";AT(2,29);BOX (0,13);HEX(0F) 0700 STR(H$,1,5)=HEX(0001000900) : STR(R$,3,2)=HEX(0004) : $GIO WRITE #1(1232 A000 1200,R$)H$ : V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 720 0710 PRINT HEX(06);AT(4,0,);"CPU timed out while sending write command to cont roller" : GOSUB '30 : GOTO 90 0720 PRINT HEX(06);AT(4,0,);"Sending 256 Bytes of data to controller memory" 0730 C=0 : STR(R$,1,1)=HEX(00) : GOTO 750 0740 C=0 : $GIO #1(1910,R$) 0750 $GIO SEND DATA #1(1232 4210 1200,R$) : IF STR(R$,8,1)= HEX(00) THEN 770 0760 PRINT HEX(06);AT(6,0);"CPU timed out while sending data to controller mem ory" : GOSUB '30 0770 IF STR(R$,1,1) <> HEX(FF) THEN 740 : STR(H$,1,5)=HEX(0101000900) : STR(R$,3,2)= HEX(0004) : $GIO WRITE #1(1232 A000 1200,R$)H$ : V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 790 0780 PRINT HEX(06);AT(6,0,);"CPU timed out while sending read command to contr oller" : GOSUB '30 : GOTO 90 0790 PRINT HEX(06);AT(6,0,);"Reading & comparing 256 Bytes of data from contro ller memory" 0800 C=0 : STR(R$,1,1)=HEX(00) : GOTO 820 0810 C=0 : $GIO #1(1910,R$) 0820 STR(R$,3,2)=HEX(0004) : $GIO READ DATA #1(1232 8312 1200,R$) : STR(R$,8,1)=STR(R$,8,1) AND HEX(14) 0830 T$=STR(R$,8,1) AND HEX(10) : IF T$=HEX(10) THEN GOSUB 850 : V$=STR(R$,8,1) AND HEX(04) : IF V$=HEX(04) THEN GOSUB 860 0840 IF STR(R$,1,1) <> HEX(FF) THEN 810 : PRINT HEX(06);AT(8,0,);"DMA/PIO test passed" : J=70 : GOSUB '45 : GOTO 890 0850 PRINT AT(20,0);"The CPU timed out before receiving an IB strobe" : GOSUB '30 : RETURN 0860 PRINT AT(10,0);"The pattern received does not equal the pattern sent" 0870 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 0880 REM %^ GET THE MEMORY SIZE BYTE 0890 STR(W$,1,5)=HEX(01000107FE) : STR(R$,3,2)=HEX(0004) : $GIO #1(1232 A000 1200,R$)W$ : V$=STR(R$,8,1) AND HEX(10) : IF V$<> HEX(10) THEN 900 : PRINT HEX(0306);AT(1,0);"CPU timed out during memory size request" : GOSUB '30 : GOTO 10 0900 $GIO #1(7510 8702,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(28) THEN S1$="128K" : 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) 0910 REM % DMA ADDRESS MULTIPLEXER CHECK 0920 STR(H$,1,5)=HEX(0000018000) : STR(W$,1,5)=HEX(0100018000) : STR(H$,4,1)=S2$ : STR(W$,4,1)=S2$ 0930 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,27); "DMA MULTIPLEXER TEST";AT(2,26);BOX (0,21);HE X(0F);AT(3,0);"Sending unique address patterns" 0940 STR(R$,1,1)=HEX(00) : GOSUB '25 : $GIO #1(4210,R$) 0950 $GIO #1(1910,R$) 0960 STR(H$,4,1)=OR STR(R$,1,1) : GOSUB '25 : $GIO #1(4210,R$) 0970 R1$=STR(R$,1,1) : ROTATE(R1$,1) : STR(R$,1,1)=R1$ : IF STR(R$,1,1)=S3$ THEN 980 : STR(H$,4,1)=S2$ : GOTO 960 0980 PRINT HEX(06);AT(5,0);"Reading and comparing unique address patterns" 0990 STR(R$,1,1)=HEX(00) : STR(H$,1,5)=STR(W$,1,5) : GOSUB '25 : $GIO #1(7510 8702 ,R$) 1000 IF STR(R$,1,1)= STR(R$,2,1) THEN 1020 1010 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 1030 1020 IF STR(R$,1,1)<>HEX(00) THEN 1030 : $GIO #1(1910,R$) 1030 STR(H$,4,1)=OR STR(R$,1,1) : GOSUB '25 : $GIO #1(7510 8702 ,R$) 1040 IF STR(R$,1,1)<> STR(R$,2,1) THEN 1010 1050 R1$=STR(R$,1,1) : ROTATE(R1$,1) : STR(R$,1,1)=R1$ : IF STR(R$,1,1)=S3$ THEN 1100 : STR(H$,4,1)=S2$ : GOTO 1030 1060 DEFFN '25 1070 STR(R$,3,2)=HEX(0004) : $GIO SEND COMMAND STRING #1(1232 A000 1200,R$)H$ 1080 V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN RETURN 1090 PRINT HEX(06);AT(4,0,);"CPU timed out while sending command string to con troller" : GOSUB '30 : GOTO 90 1100 PRINT HEX(06);AT(7,0,);"DMA address multiplexer test passed" : GOSUB '40 : GOTO 1120 1110 REM %^ INPUT TEST PARAMETERS (LOOP ON ERROR, INSTRUCTIONS, PASSES) 1120 INIT(20)M$() : 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" : M$(4)="* The program will LOOP on error" : M$(5)="* Instructions will be displayed" 1130 M$(6)="* Instructions will NOT be displayed" : 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" : STR(A$,2,1)= HEX(31) 1140 PRINT HEX(0306);AT(0,10);"Device address '";A$;"' will be used for all te sts ";AT(1,25);BOX(0,4);HEX(0F) 1150 P1=1 : L=3 : L$=HEX(20) : GOSUB 1270 : LINPUT L$ : IF L$ = "Y" THEN 1170 : IF L$ = "N" THEN 1190 : L=5 : GOSUB 1340 : GOTO 1150 1160 REM % DISPLAY LOOP CRITERIA : REM L$ = Y 1170 P1=4 : L=5 : GOSUB 1270 : GOTO 1210 1180 REM L$ = N 1190 P1=3 : L=5 : GOSUB 1270 1200 REM % INPUT THE MESSAGE PARAMETER 1210 P1=2 : L=7 : D$=HEX(20) : GOSUB 1270 : LINPUT D$ : IF D$ = "Y" THEN 1230 : IF D$ = "N" THEN 1250 : L=9 : GOSUB 1340 : GOTO 1210 1220 REM % DISPLAY MESSAGE CRITERIA : REM D$ = Y 1230 P1=5 : L=9 : GOSUB 1270 : GOTO 1290 1240 REM D$ = N 1250 P1=6 : L=9 : GOSUB 1270 : GOTO 1290 1260 REM % PRINT COMMENT LINE AT L 1270 PRINT AT(L,10);M$(P1); : RETURN 1280 REM % INPUT THE NUMBER OF PASSES 1290 P1=7 : L=11 : GOSUB 1270 : INPUT P : IF P > 9999 OR P < 1 THEN 1320 1300 REM % DISPLAY MESSAGE CRITERIA 1310 PRINT AT(13,10,70);"* All tests will make ";P;" pass(es)" : GOSUB '30 : GOTO 1360 1320 P1=8 : L=13 : GOSUB 1270 : GOSUB '30 : GOTO 1290 1330 REM ERROR ON INPUT SEQUENCE 1340 PRINT AT(L,10);"PLEASE TYPE A 'Y' OR 'N' ALL OTHER KEYS ARE INVALID" : GOSUB '40 : FOR I = 10 TO 60 : PRINT HEX(06) : PRINT AT(L,I); HEX(20) : NEXT I : RETURN : REM %^ 1350 REM % DOWNLINE LOAD THE MICROCODE BEFORE GOING TO MENU 1360 STR(H$,1,5)= HEX(0000F00900) 1370 STR(W$,1,5)=HEX(0200000914) 1380 PRINT HEX(0306);AT(4,0);"Sending microcode test programs to controller me mory" 1390 D1$="EFSDIAG" : GOSUB '21 : GOSUB '25 : GOSUB '150 : PRINT AT(5,0);"Transfer of microcode successful";AT(6,0);"Forcing control ler into microcode test program" 1400 GOSUB '26 : PRINT AT(7,0);"Controller entered microcode Host routine" : GOSUB '40 : GOTO 1500 1410 REM % LOAD MICROCODE FROM DISK AND SEND TO CONTROLLER MEMORY 1420 DEFFN '150 1430 STR(R$,1,13)=HEX(09070600000000000000000000) 1440 F=0 : DATA LOAD DC OPEN T#0,D1$ : ERRORIF ERR = 82 THEN 1480 1450 DATA LOAD DC #0,A2$,A3$,K$() : IF END THEN F=1 : IF STR(A2$,1,1)<>HEX(01)THEN 1450 : $GIO SEND BYTE STRING #1(A200)K$() : IF F = 1 THEN 1470 1460 STR(H$,4,2)=ADDC HEX(00F0) : GOSUB '21 : GOSUB '25 : INIT (00)K$ : GOTO 1450 1470 DATA SAVE DC CLOSE : RETURN 1480 PRINT AT(5,0);"File not in Catalog. Non Recoverable Error" : STOP 1490 REM % FIELD SERVICE DIAGNOSTICS MENU 1500 A1$ = HEX(00) 1510 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$; 1520 PRINT AT(2,10);"SF 0 - RE-KEY INPUT PARAMETERS"; AT(3,10);"SF 1 - PUSH/ POP MEMORY TEST";AT(4,10);"SF 2 - SIO EXTERNAL LOOP";AT(5,10);"SF 3 - S IO/DMA TEST";AT(6,10);"SF 4 - CONTROL CHARACTER RAM TEST";AT(7,10);"SF 5 - PRIORITY INTERRUPT TEST " 1530 PRINT AT(8,10);"SF 6 - ACU 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 (12,10);"SF 16 - RETURN TO MAIN MENU" 1540 REM % INPUT DESIRED TEST 1550 PRINT AT(14,10);"STRIKE THE SPECIAL FUNCTION KEY ASSOCIATED WITH THE DESI RED TEST"; HEX(06) 1560 PRINT AT(16,10,70);"WHICH TEST DO YOU DESIRE?" : KEYIN A1$,,1580 : GOTO 1600 1570 REM % LINK INPUT TEST TO CODE SECTION : REM SF0' = RESTART 1580 IF A1$ = HEX(00) THEN 1590 : IF A1$ > HEX(09) THEN 1600 : ON VAL(A1$) GOTO 1620,1630,1640,1650,1660,1670,1680,1690,1700 : GOTO 1500 1590 STR(S$,1,2)=HEX(403F) : GOSUB '22 : GOTO 1120 1600 IF A1$= HEX(10) THEN 1710 : PRINT AT(17,10);"THERE IS NO SUCH TEST TRY AGAIN";HEX(07) 1610 REM DELAY FOR ERROR MESSAGE : FOR I = 1 TO 2000 : NEXT I : REM CLEAR ERROR MESSAGE FROM SCREEN : PRINT AT(17,10,31); : REM RE-INPUT THE DESIRED TEST : GOTO 1560 1620 GOSUB '1 : GOTO 1500 1630 GOSUB '2 : GOTO 1500 1640 GOSUB '3 : GOTO 1500 1650 GOSUB '4 : GOTO 1500 1660 GOSUB '5 : GOTO 1500 1670 GOSUB '6 : GOTO 1500 1680 GOSUB '7 : GOTO 1500 1690 GOSUB '8 : GOTO 1500 1700 $GIO RESTART #1(4580 ,R$) : GOTO 30 1710 GOSUB '16 1720 REM % '1 SUBROUTINE (MOVING INVERSIONS MEMORY TEST) 1730 DEFFN'1 1740 STR(W$,1,5)= HEX(0200000914) : IF S1$ = "128K" THEN 2200 1750 INIT(20)M$() : 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)" 1760 M$(6)="PUSH/POP Memory Test failed" : M$(9)="Failing Address = " : M$(7)="Expected Data = " : M$(8)="Actual Data = " 1770 O$(5)="PUSH/POP Memory test passed" : P$(1)=HEX(00) 1780 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,28); "PUSH/POP MEMORY TEST";AT(2,25);BOX (0,23);HE X(0F) : IF A1$=HEX(08) THEN PRINT AT(0,70);"CHAIN MODE" 1790 IF A1$<>HEX(08) THEN P1=0 : IF D$="N" THEN 1820 1800 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." 1810 GOSUB '30 1820 IF P=0 THEN RETURN 1830 IF A1$<>HEX(08) THEN 1840 : Q=5 : GOTO 1890 1840 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" 1850 IF S1$ ="32k" THEN 1860 : PRINT AT(12,20);"Enter 3 for bank 3 address 8000 TO BFFF"; : IF S1$ ="48k" THEN 1860 : PRINT AT(13,20);"Enter 4 for bank 4 address C000 TO FFFF"; 1860 PRINT AT(14,20);"Enter 5 for all of the above" 1870 PRINT AT(16,15);"Enter the number of the bank you wish to test "; : INPUT Q : IF S1$="32k" AND Q > 2 THEN 1880 : IF S1$="48k" AND Q > 3 THEN 1880 : IF Q > 5 THEN 1880 : GOTO 1890 1880 IF Q = 5 THEN 1890 : PRINT AT(20,15);"ILLEGAL BANK TRY AGAIN" : GOSUB '40 : PRINT AT(20,0,) : GOTO 1870 1890 ON Q GOTO 1900,1910,1910,1910,2030 1900 STR(S$,1,2)=HEX(453A) : GOTO 1940 1910 IF Q=2 THEN STR(W$,2,2)=HEX(407F) : IF Q=3 THEN STR(W$,2,2)=HEX(80BF) : IF Q=4THEN STR(W$,2,2)=HEX(C0FF) 1920 PRINT HEX(06); AT(10,0,) : C=0 : J=754 : Y=5 : X=2 : STR(S$,1,2)=HEX(403F) 1930 GOSUB '21 : GOSUB '22 : GOSUB '26 : STR(S$,1,2)= HEX(4639) 1940 GOSUB '20 : GOSUB '21 : GOSUB '22 1950 PRINT HEX(06);AT(7,0);"Currently testing bank #";Q : J=30000 : C=0 : GOSUB '100 1960 IF STR(R$,2,1)=HEX(30) THEN 1980 1970 IF STR(R$,2,1)<> HEX(31) THEN 4800 : GOTO 2000 1980 GOSUB '23 : C=0 : J=754 : Y=4 : X=2 1990 GOTO 1940 2000 IF C<>0 THEN 2020 : GOSUB '70 : GOSUB '200 : IF S>1 THEN 4810 : ON S GOTO 2010 2010 PRINT HEX(06);AT(15,0,);AT(15,23);M$(6) : GOSUB '80 2020 GOSUB '95 : GOSUB '100 : GOTO 1960 2030 Q=1 : STR(S$,1,2)=HEX(4B34) : L=0 2040 GOSUB '20 : GOSUB '21 : GOSUB '22 2050 PRINT HEX(06);AT(8+L,0);M$(Q);" " : L = L+1 : Q = Q+1 2060 IF S1$ ="32k" AND Q = 3 THEN 2070 : IF S1$="48k" AND Q = 4 THEN 2070 : IF Q <> 5 THEN 2050 2070 J=30000 : C=0 : GOSUB '100 2080 IF STR(R$,2,1)=HEX(30) THEN 2120 2090 IF STR(R$,2,1)= HEX(31) THEN 2130 2100 $GIO #1(4155 4100,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=0 THEN 4800 2110 PRINT HEX(060E);AT(7+L,25);"OK";HEX(0F) : GOTO 2070 2120 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 2040 2130 IF C<>0 THEN 2150 : GOSUB '70 : GOSUB '200 : IF S>1 THEN 4810 : ON S GOTO 2140 2140 PRINT HEX(06);AT(15,0,);AT(15,23);M$(6) : GOSUB '80 2150 GOSUB '95 : GOSUB '100 2160 IF STR(R$,2,1)=HEX(30) THEN 2120 2170 IF STR(R$,2,1)= HEX(31) THEN 2130 2180 $GIO #1(4155 4100, 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=0 THEN 4800 2190 PRINT HEX(060E);AT(7+L,25);"OK";HEX(0F) : GOSUB '100 : GOTO 2160 2200 INIT(20)M$() : M$(1)="I Space = (2000 to FFFF)" : M$(2)="D Space = (2000 to FFFF)" 2210 M$(6)="PUSH/POP Memory Test failed" : M$(9)="Failing Address = " : M$(7)="Expected Data = " : M$(8)="Actual Data = " 2220 O$(5)="PUSH/POP Memory test passed" : P$(1)=HEX(00) 2230 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,28); "PUSH/POP MEMORY TEST";AT(2,25);BOX (0,23);HE X(0F) : IF A1$=HEX(08) THEN PRINT AT(0,70);"CHAIN MODE" 2240 IF A1$<>HEX(08) THEN P1=0 : IF D$="N" THEN 2270 2250 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." 2260 GOSUB '30 2270 IF P=0 THEN RETURN 2280 IF A1$<>HEX(08) THEN 2290 : Q=3 : GOTO 2320 2290 PRINT AT(9,0,);AT(9,20);"Available memory = ";HEX(20);S1$;AT(10,20);"Ente r 1 for I Space address 2000 TO FFFF";AT(11,20);"Enter 2 for D Space addr ess 2000 TO FFFF" : PRINT AT(12,20);"Enter 3 for both of the above" 2300 PRINT AT(16,15);"Enter the number of the bank you wish to test "; : INPUT Q : IF Q < 1 OR Q > 3 THEN 2310 : GOTO 2320 2310 PRINT AT(20,15);"ILLEGAL BANK TRY AGAIN" : GOSUB '40 : PRINT AT(20,0,) : GOTO 2300 2320 IF Q=1 THEN STR(W$,2,2)=HEX(01FF) : IF Q=2 THEN STR(W$,2,2)=HEX(02FF) : IF Q=3 THEN STR(W$,2,2)=HEX(03FF) 2330 PRINT HEX(06); AT(10,0,) : C=0 : J=754 : Y=5 : X=2 : STR(S$,1,2)=HEX(403F) 2340 GOSUB '21 : GOSUB '22 : GOSUB '26 : STR(S$,1,2)= HEX(4D32) : IF Q = 3 THEN 2440 2350 GOSUB '20 : GOSUB '21 : GOSUB '22 2360 PRINT HEX(06);AT(7,0);"Currently testing ";M$(Q) : J=30000 : C=0 : GOSUB '100 2370 IF STR(R$,2,1)=HEX(30) THEN 2390 2380 IF STR(R$,2,1)<> HEX(31) THEN 4800 : GOTO 2410 2390 GOSUB '23 : C=0 : J=754 : Y=4 : X=2 2400 GOTO 2350 2410 IF C<>0 THEN 2430 : GOSUB '70 : GOSUB '200 : IF S>1 THEN 4810 2420 PRINT HEX(06);AT(15,0,);AT(15,23);M$(6) : GOSUB '80 2430 GOSUB '95 : GOSUB '100 : GOTO 2370 2440 Q=1 : STR(S$,1,2)=HEX(4D32) : L=0 2450 GOSUB '20 : GOSUB '21 : GOSUB '22 2460 PRINT HEX(06);AT(8+L,0);M$(Q);" " : L = L+1 : Q = Q+1 : PRINT HEX(06);AT(8+L,0);M$(Q);" " 2480 J=30000 : C=0 : GOSUB '100 2490 IF STR(R$,2,1)=HEX(30) THEN 2530 2500 IF STR(R$,2,1)= HEX(31) THEN 2540 2510 $GIO #1(4155 4100,R$) : L=0 : IF STR(R$,2,1)=HEX(00) THEN L=1 : IF L=0 THEN 4800 2520 PRINT HEX(060E);AT(7+L,25);"OK";HEX(0F) : GOTO 2480 2530 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(4D32) : Q=1 : GOTO 2450 2540 IF C<>0 THEN 2560 : GOSUB '70 : GOSUB '200 : IF S>1 THEN 4810 2550 PRINT HEX(06);AT(15,0,);AT(15,23);M$(6) : GOSUB '80 2560 GOSUB '95 : GOSUB '100 : GOTO 2490 2610 REM % '2 SUBROUTINE (SIO EXTERNAL LOOP BACK TEST) 2620 DEFFN '2 2630 O$(5)="SIO external loop passed" : P$(1)=HEX(00) 2640 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,30); "SIO EXTERNAL LOOP";AT(2,29);BOX (0,18);HEX(0 F) : IF A1$=HEX(08) THEN PRINT AT(0,70);"CHAIN MODE" 2650 IF A1$<>HEX(08) THEN P1=0 : IF D$="N" THEN 2680 2660 PRINT HEX(0F) : PRINT AT(10,0,); "This program tests the controller's SIO external loop b ack circuitry. The tests are conducted in all 3 modes ie Async, Bisync an d SDLC. In addition 3 vectored interrupt tests are performed, Transmit, Receive, Overrun, CTS, & DCD." 2670 GOSUB '30 2680 IF P=0 THEN RETURN 2690 C=0 : Y=4 : STR(S$,1,2)=HEX(413E) 2700 INIT(20)M$() : 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" 2710 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" 2720 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" 2730 E$(3)="DCD Interrupt occurred during CTS Interrupt check. DTR is turned O FF" 2740 GOSUB '20 : GOSUB '21 : GOSUB '22 2750 J=15000 : C=0 : GOSUB '100 2760 IF STR(R$,2,1)=HEX(30) THEN 2950 2770 IF STR(R$,2,1) <> HEX(31) THEN 4800 2780 IF C<>0 THEN 2820 : GOSUB '70 : IF G$(2) > HEX(02) THEN 2800 : IF G$(2) = HEX(00) THEN A = 1 : IF G$(2)= HEX(01) THEN A=2 : IF G$(2) = HEX(02) THEN A=3 2790 PRINT HEX(06);AT(8,0,);AT(8,28);M$(A) 2800 GOSUB '200 : IF S>12 THEN 4810 : ON S GOTO 2810,2830,2840,2850,2860,2870,2880,2890,2900,2910,2920,2940 2810 PRINT HEX(06);AT(15,21); M$(6) 2820 GOSUB '95 : GOSUB '100 : GOTO 2760 2830 PRINT HEX(06);AT(15,12); M$(7) : GOTO 2820 2840 PRINT HEX(06);AT(15,22); M$(8) : GOTO 2820 2850 PRINT HEX(06);AT(15,23); M$(9) : GOTO 2820 2860 PRINT HEX(06);AT(15,26); T$(1) : GOTO 2820 2870 PRINT HEX(06);AT(15,13); T$(2) : GOTO 2930 2880 PRINT HEX(06);AT(15,26); T$(3) : GOTO 2820 2890 PRINT HEX(06);AT(15,27); T$(4) : GOTO 2820 2900 PRINT HEX(06);AT(15,27); T$(5) : GOTO 2820 2910 PRINT HEX(06);AT(15,20); E$(1) : GOTO 2820 2920 PRINT HEX(06);AT(15,20); E$(2) : GOTO 2820 2930 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 2820 2940 PRINT HEX(06);AT(15,10); E$(3) : GOTO 2820 2950 GOSUB '23 : GOTO 2740 2960 REM %^ 2970 REM % '3 SUBROUTINE (SIO / DMA TEST) 2980 DEFFN'3 2990 X$=ALL(00) 3000 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" 3010 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" 3020 T$(5)="EOP failed to decrement CTC Channel 2 Downcounter" : E$(1)="Failed to get EOP on both channels 0 & 1 of DMA" : E$(2)="Parity error during transfer" : E$(3)="DRQ0 & DRQ1 are both active high. Expected inactive low." 3030 E$(4)="DRQ0 is active high. Expected inactive low." : E$(5)="DRQ1 is active high. Expected inactive low." : E1$(1)="DRQ1 failed to go active high with SIORDYB enabled." 3040 E1$(3)="Failed to receive a transmitted character" : E1$(4)="DRQ0 failed to go active high with SIORDYA enabled" 3050 O$(5)="SIO/DMA test passed" : P$(1)=HEX(00) 3060 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" 3070 IF A1$<>HEX(08) THEN P1=0 : IF D$="N" THEN 3110 3080 PRINT HEX(0F) : PRINT AT(10,0); "This test requires the EXTERNAL LOOP BACK Plug. The test checks the ability to transfer data from one section of memory to anoth er. The test is run in the Bisync mode." 3090 PRINT ;"This test checks transfers of 256 bytes, 512 bytes, 1k, 2k, 4k, 8 k,and with 48k and 64k controllers 16k." 3100 GOSUB '30 3110 IF P=0 THEN RETURN 3120 Q=1 : L=0 : Y=4 : X=2 : STR(S$,1,2)=HEX(423D) 3130 GOSUB '20 : GOSUB '21 : GOSUB '22 3140 PRINT HEX(06);AT(8+L,0);M$(Q);" " : L = L+1 : Q = Q+1 3150 IF S1$="32k" AND Q = 7 THEN 3160 : IF Q <> 8 THEN 3140 3160 J=30000 : C=0 : GOSUB '100 3170 IF STR(R$,2,1)=HEX(30) THEN 3190 3180 IF STR(R$,2,1)=HEX(31) THEN 3200 : GOTO 3340 3190 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 3120 3200 IF C <>0 THEN 3220 : GOSUB '70 : GOSUB '200 : IF S>14 THEN 4810 : ON S GOTO 3210,3210,3210,3230,3250,3260,3270,3280,3290,3300,3290,3310,332 0,3330 3210 PRINT HEX(06);AT(15,29);;T$(S) 3220 GOSUB '95 : GOSUB '100 : GOTO 3170 3230 PRINT HEX(06);AT(16,0,);AT(16,29);T$(4) 3240 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 3220 3250 PRINT HEX(06);AT(16,0,);AT(16,20);T$(5) : GOTO 3220 3260 PRINT HEX(06);AT(16,0,);AT(16,29);E$(1) : GOTO 3220 3270 PRINT HEX(06);AT(16,0,);AT(16,29);E$(2) : GOTO 3220 3280 PRINT HEX(06);AT(16,0,);AT(16,29);E$(3) : GOTO 3220 3290 PRINT HEX(06);AT(16,0,);AT(16,29);E$(4) : GOTO 3220 3300 PRINT HEX(06);AT(16,0,);AT(16,29);E$(5) : GOTO 3220 3310 PRINT HEX(06);AT(16,0,);AT(16,29);E1$(1) : GOTO 3220 3320 PRINT HEX(06);AT(16,0,);AT(16,29);E1$(3) : GOTO 3220 3330 PRINT HEX(06);AT(16,0,);AT(16,29);E1$(4) : GOTO 3220 3340 $GIO #1 (4155 4100, 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=0 THEN 4810 3350 PRINT HEX(060E);AT(7+L,19);"OK";HEX(0F) : GOTO 3160 3360 REM %^ 3370 REM % '4 SUBROUTINE (CONTROL CHARACTER RECOGNITION RAM TEST) 3380 DEFFN'4 3390 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 = " 3400 D1$="CCRRTST" 3410 O$(5)="Character RAM test passed" : P$(1)=HEX(00) 3420 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" 3430 IF A1$<>HEX(08) THEN P1=0 : IF D$="N" THEN 3460 3440 PRINT HEX(0F) : PRINT AT(10,0); "This program checks the static ram using the SIO in Asyn c mode. The failing character is interpreted as the RAM address. \C9\ CE\D3\D4\C1\CC\CC \C5\D8\D4\C5\D2\CE\C1\CC \CC\CF\CF\D0 \C2\C1\C3\CB" 3450 GOSUB '30 3460 IF P=0 THEN RETURN 3470 Y=4 : X=2 : STR(S$,1,2)=HEX(433C) 3480 GOSUB '20 : GOSUB '21 : GOSUB '22 3490 J=20000 : C=0 : GOSUB '100 3500 IF STR(R$,2,1)=HEX(30) THEN 3520 3510 IF STR(R$,2,1)<> HEX(31) THEN 4800 : GOTO 3530 3520 GOSUB '23 : GOTO 3480 3530 IF C<>0 THEN 3550 : GOSUB '70 : GOSUB '200 : IF S>2 THEN 4810 : ON S GOTO 3540,3560 3540 PRINT HEX(06);AT(15,0,);AT(15,26);M$(1);AT(18,15);M$(2); AT(20,22);M$(4); HEX(20);HEXOF(G$(2)) 3550 GOSUB '95 : GOSUB '100 : GOTO 3500 3560 PRINT HEX(06);AT(15,0,);AT(15,26);M$(1);AT(18,15);M$(3); AT(20,22);M$(4); HEX(20);HEXOF(G$(2)) : GOTO 3550 3570 GOSUB '26 : J=745 : C=0 : GOSUB '100 3580 REM % '23 SUBROUTINE TEST PASS CONTROLLER BACK IN HOST 3590 DEFFN'23 3600 PRINT AT(7,0,40); : PRINT HEX(060E);AT(7,0);O$(5);AT(7,35);"....Controller is back in host";H EX(0F) : GOSUB '40 : IF P1<9999 THEN 3610 : PRINT AT(0,5,6); : P1=0 3610 IF A1$=HEX(08) THEN 3620 : IF P1<P THEN RETURN : RETURN CLEAR : RETURN 3620 RETURN CLEAR : RETURN 3630 REM % '21 SUBROUTINE DEVICE READY/BUSY CHECK 3640 DEFFN '21 3650 $IF ON #1,3690 3660 IF C <> 0 THEN 3670 : PRINT AT(4,0,);AT(4,14);"Device is not ready.........Expected -RBI to be Low" 3670 IF L$="N" THEN GOSUB '30 3680 IF L$="N" THEN 3690 : GOSUB '60 : GOTO 3650 3690 RETURN 3700 REM % '20 SUBROUTINE PASS COUNT CHECK AND DISPLAY 3710 DEFFN '20 3720 PRINT AT(2,0) 3730 IF A1$=HEX(08) THEN 3740 : P1=P1+1 3740 GOSUB '66 : RETURN 3750 REM % '22 SUBROUTINE FORCE CONTROLLER OUT OF HOST TO SELECTED TEST ROUTIN E 3760 DEFFN '22 3770 PRINT AT(4,0,);AT(4,0);"Forcing controller out of host...." 3780 STR(R$,1,1)=STR(S$,1,1) : $GIO#1 (4310 752F 1232 8602 1200,R$) 3790 REM % LOOK FOR TIME OUT 3800 V$= STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 3830 3810 PRINT AT(4,36);"Failed to come out of host"; AT(20,0);"2200 CPU timed out " : GOTO 4810 3820 REM % CHECK FOR CORRECT RESPONSE CODE FROM CONTROLLER 3830 IF STR(R$,2,1)=STR(S$,2,1) THEN 3860 3840 PRINT HEX(06); AT(5,0,);,"Controller returned incorrect response code" 3850 GOSUB '95 : GOTO 3770 3860 PRINT HEX(06); AT(5,0);"Controller entered selected test(s)";AT(6,0);"Wai ting for controller to complete selected test(s)" : RETURN 3870 REM % '200 SUBROUTINE ERROR CODE INTERPRETER FOR G$(1) 3880 DEFFN '200 3890 S=0 3900 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 3910 IF S=0 THEN 4810 : RETURN 3920 REM % '24 SUBROUTINE DELAY FOR DOWNLINE SETUP COMPLETION 3930 DEFFN'24 3940 $GIO DELAY #1 (1950 1C56 75FF E000,R$) : RETURN 3950 REM % '25 SUBROUTINE SEND PARAMETERS FOR MEMORY WRITE 3960 DEFFN '25 3970 STR(R$,3,2)=HEX(0004) : $GIO #1(1232 A000 1200,R$)H$ 3980 V$ = STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN RETURN 3990 PRINT HEX(06);AT(10,0,);," CPU timed out while sending write command stri ng" : GOTO 4810 4000 REM % '26 SUBROUTINE FORCES CONTROLLER INTO DOWNLINE LOADED TEST 4010 DEFFN'26 4020 STR(R$,3,2)=HEX(0002) : $GIO #1(75FF 1232 A000 1200,R$)W$ 4030 V$ = STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 4050 4040 PRINT HEX(06);AT(10,0,);," CPU timed out sending goto command string to c ontroller" : GOTO 4810 4050 $GIO #1(75FF 1232 8702 1200,R$) 4060 V$ = STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 4080 4070 PRINT HEX(06);AT(10,0,);" Timed out waiting for controller to respond to goto command string" : GOTO 4810 4080 IF STR(R$,2,1)=HEX(3F) THEN RETURN 4090 PRINT AT(10,0,);,"Controller returned improper response to goto command s tring" : GOTO 4810 4100 REM % '95 SUBROUTINE 4110 DEFFN'95 4120 GOSUB '90 : IF L$="N" THEN GOSUB '30 : IF L$="N" THEN 4130 : GOSUB '60 : RETURN 4130 PRINT AT(18,0);"The controller is now back in the host routine." : IF A1$=HEX(08)THEN 4140 : IF P1<P THEN 4150 : RETURN CLEAR : RETURN 4140 RETURN CLEAR : RETURN 4150 PRINT AT(2,0) : IF A1$=HEX(08) THEN 4160 : P1=P1+1 4160 GOSUB '66 : PRINT AT(15,42);BOX(-1,-7);AT(18,33);BOX(-1,-5);AT(18,54);BOX(-1,-5) : GOSUB '22 : RETURN 4170 REM %^ 4180 REM % '5 SUBROUTINE (PRIORITY INTERRUPT TEST) 4190 DEFFN '5 4200 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" 4210 M$(5)="Interrupt received but vector address = FF" : O$(5)="Priority Interrupt test passed" : P$(1)=HEX(00) 4220 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,25); "PRIORITY INTERRUPT TEST";AT(2,24);BOX (0,24) ;HEX(0F) : IF A1$=HEX(08) THEN PRINT AT(0,70);"CHAIN MODE" 4230 IF A1$<>HEX(08)THEN P1=0 : IF D$="N" THEN 4260 4240 PRINT HEX(0F) : PRINT AT(10,0); "This test checks the IEI and IEO line between the SIO,CT C, and PIO chips. The test insures also that higher priorty is observed . \C9\CE\D3\D4\C1\CC\CC \C5\D8\D4\C5\D2\CE\C1\CC \CC\CF\CF\D0 \C2\C1\C3\C B" 4250 GOSUB '30 4260 IF P=0 THEN RETURN 4270 Y=4 : X=2 : STR(S$,1,2)=HEX(443B) 4280 GOSUB '20 : GOSUB '21 : GOSUB '22 4290 STR(R$,2,3)=HEX(000001) : $GIO #1(4055 7503 8602 ,R$) : STR(R$,8,1)=AND HEX(10) : IF STR(R$,8,1)<>HEX(10) THEN 4310 4300 PRINT HEX(06);AT(10,0,);AT(10,20);"CPU timed out waiting for test complet ion" : GOTO 4810 4310 IF STR(R$,2,1)=HEX(56) THEN 4340 4320 IF STR(R$,2,1)=HEX(30) THEN 4350 4330 IF STR(R$,2,1)<> HEX(31) THEN 4800 : GOTO 4360 4340 $GIO #1(4055,R$) : J=300 : GOSUB '100 : GOTO 4310 4350 GOSUB '23 : GOTO 4270 4360 IF C<>0 THEN 4380 : GOSUB '70 : GOSUB '200 : IF S>5 THEN 4810 : ON S GOTO 4370,4390,4400,4410,4420 4370 PRINT HEX(06);AT(15,0,);AT(15,28);M$(1) 4380 GOSUB '95 : GOTO 4290 4390 PRINT HEX(06);AT(15,0,);AT(15,15);M$(2) : GOTO 4380 4400 PRINT HEX(06);AT(15,0,);AT(15,18);M$(3) : GOTO 4380 4410 PRINT HEX(06);AT(15,0,);AT(15,28);M$(4) : GOTO 4380 4420 PRINT HEX(06);AT(15,0,);AT(15,28);M$(5) : GOTO 4380 4430 REM %^ 4440 REM % '6 SUBROUTINE (ACU LOOP BACK TEST) 4450 DEFFN '6 4460 M$(1)="All zero's Test failure" : M$(2)="Expected = 00 Actual = " : M$(3) = "Sliding Bit Test failure" : O$(5)="ACU loop back passed" : P$(1)=HEX(00) 4470 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,32); "ACU LOOP BACK";AT(2,31);BOX (0,14);HEX(0F) : IF A1$=HEX(08) THEN PRINT AT(0,70);"CHAIN MODE" 4480 IF A1$<>HEX(08) THEN P1=0 : IF D$="N" THEN 4510 4490 PRINT HEX(0F) : PRINT AT(10,0); "This program tests the controller's ACU circuitry for RS 232 & RS449. The ACU LOOP BACK must be INSTALLED. Testing is done by c hecking for all 00's and sliding a bit through the output driver an d reading the input receiver." 4500 GOSUB '30 4510 IF P=0 THEN RETURN 4520 C = 0 : J=754 : STR(S$,1,2)=HEX(4C33) : GOSUB '20 : GOSUB '21 : GOSUB '22 : GOSUB '100 4530 IF STR(R$,2,1)=HEX(30) THEN 4550 4540 IF STR(R$,2,1)<> HEX(31) THEN 4800 : GOTO 4560 4550 GOSUB '23 : GOTO 4520 4560 IF C<>0 THEN 4580 : GOSUB '70 : GOSUB '200 : IF S>2 THEN 4810 : ON S GOTO 4570,4590 4570 PRINT HEX(06);AT(15,0,);AT(15,26);M$(1);AT(18,15);M$(2);HEX(20);HEXOF(G$( 2)) 4580 GOSUB '95 : GOSUB '100 : GOTO 4530 4590 PRINT HEX(06);AT(15,0,);AT(15,26);M$(3);AT(18,15);"Expected = ";HEX(20);H EXOF(G$(2));HEX(2020);"Actual = ";HEX(20);HEXOF(G$(3)) : GOTO 4580 4600 REM %^ 4610 DEFFN '100 4620 FOR I = 1 TO J : $GIO #1(7501,R$) : $IF ON #2,4630 : NEXT I 4630 STR(R$,2,3)=HEX(000001) : $GIO #1(1232 8602 1200,R$) : STR(R$,8,1)=AND HEX(10) : IF STR(R$,8,1)<>HEX(10) THEN RETURN 4640 PRINT HEX(06);AT(15,0,);AT(15,20);"CPU timed out waiting for test complet ion" : GOTO 4810 4650 REM % '70 REQUEST BYTE SUBROUTINE 4660 DEFFN '70 4670 STR(R$,1,1)=HEX(47) 4680 FOR I = 1 TO Y : $GIO #1(4210 7510 1232 8702 1200,R$) : V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 4700 4690 PRINT HEX(06);AT(15,0,);,"CPU timed out waiting for response to byte requ est" : GOTO 4810 4700 IF STR(R$,2,1)<>HEX(38) THEN 4690 4710 $GIO #1(1232 8702 1200,R$) : V$ =STR(R$,8,1) AND HEX(10) : IF V$ <>HEX(10) THEN 4720 : GOTO 4690 4720 G$(I)=STR(R$,2,1) : NEXT I : RETURN 4730 DEFFN '80 4740 PRINT AT(18,24);M$(9);HEX(20);BOX(1,7);HEX(20200E);HEXOF(G$(4));HEXOF(G$( 5));HEX(0F) 4750 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 4760 DEFFN'90 4770 REM % TELL THE CONTROLLER TO LOOP OR CONTINUE 4780 STR(R$,1,1)=HEX(49) : IF L$="Y" THEN STR(R$,1,1)=HEX(48) : $GIO #1(1232 5212 1200,R$) : V$= STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 4790 : GOTO 4810 4790 V$=STR(R$,1,1) XOR STR(R$,2,1) AND HEX(7F) : IF V$ = HEX(7F) THEN RETURN 4800 PRINT HEX(06);AT(7,0);"Controller failed to return correct pass/fail resp onse " 4810 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 1500 4820 DEFFN'50 : REM % '50 SUBROUTINE : REM PRINT FAIL MESSAGE AND EXPECTED RESULTS : PRINT AT(R,50,30);E$(A);AT(19,0,26);E1$(B) : RETURN 4830 REM % '66 SUBROUTINE : REM PRINT PASS # AND CLEAR LOW HALF OF SCREEN 4840 DEFFN'66 : PRINT HEX(06);AT(0,0);"PASS#";P1;AT(20,0,) : RETURN 4850 REM % '60 SUBROUTINE 4860 DEFFN'60 : C=C+1 : PRINT AT(22,35);"LOOP#";C;HEX(0C); : IF C<>9999 THEN RETURN : PRINT HEX(07);AT(22,40,5) : C=1 : RETURN 4870 REM %^ 4880 REM % '8 SUBROUTINE (CHAIN MODE) 4890 DEFFN '8 4900 PRINT HEX(0E);AT(3,08);"*";AT(4,08);"*";AT(5,08);"*";AT(6,08);"*";AT(7,08 );"*"; : GOSUB '40 : GOSUB '40 : IF P >0 THEN 4910 : P=1 4910 P1=1 : PRINT HEX(0306); AT(0,28);"CHAIN MODE TEST ROUTINE"; : IF D$="Y" THEN GOSUB 4940 : PRINT HEX(0503) 4920 GOSUB '1 : GOSUB '2 : GOSUB '3 : GOSUB '4 : GOSUB '5 4930 IF P1=P THEN RETURN : P1=P1+1 : GOTO 4920 4940 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 4950 REM % '7 SUBROUTINE (USER OPTION SWITCH TEST) 4960 DEFFN '7 4970 STR(R$,1,2)=HEX(0000) : PRINT HEX(03060E);AT(1,30); "OPTION SWITCH TEST";AT(2,29);BOX (0,19);HEX( 0F) 4980 IF D$="N" THEN 5010 4990 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 w ill automatically be updated on the screen. To exit the routine the user must key RETURN." 5000 GOSUB '30 : IF P = 0 THEN RETURN 5010 C=0 : Y=1 : STR(S$,1,2)=HEX(4A35) : STR(C$,1,1)=HEX(00) 5020 GOSUB '21 : GOSUB '22 5030 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 5040 PRINT HEX(0E);AT(22,30);"KEY RETURN TO EXIT TEST";HEX(0F) 5050 FOR K=1 TO 8 5060 PRINT AT(I,J); : PRINT BOX (5,4) 5070 J=J+4 : NEXT K : J=0 : IF I>8 THEN 5090 5080 I=I+4 : GOTO 5050 5090 $GIO #1 (1232 8602 1200,R$) : V$ = STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 5100 : PRINT AT(18,20);"Timed out waiting for current switch setting from contro ller" : GOTO 5340 5100 STR(C$,1,1)=STR(R$,2,1) 5110 I=11 : J=27 : C8$=STR(C$,1,1) AND HEX(01) : IF C8$ = HEX(00) THEN 5120 : GOSUB 5280 : GOTO 5130 5120 GOSUB 5270 5130 J=31 : C8$=STR(C$,1,1) AND HEX(02) : IF C8$ = HEX(00) THEN 5140 : GOSUB 5280 : GOTO 5150 5140 GOSUB 5270 5150 J=35 : C8$=STR(C$,1,1) AND HEX(04) : IF C8$ = HEX(00) THEN 5160 : GOSUB 5280 : GOTO 5170 5160 GOSUB 5270 5170 J=39 : C8$=STR(C$,1,1) AND HEX(08) : IF C8$ = HEX(00) THEN 5180 : GOSUB 5280 : GOTO 5190 5180 GOSUB 5270 5190 J=43 : C8$=STR(C$,1,1) AND HEX(10) : IF C8$ = HEX(00) THEN 5200 : GOSUB 5280 : GOTO 5210 5200 GOSUB 5270 5210 J=47 : C8$=STR(C$,1,1) AND HEX(20) : IF C8$ = HEX(00) THEN 5220 : GOSUB 5280 : GOTO 5230 5220 GOSUB 5270 5230 J=51 : C8$=STR(C$,1,1) AND HEX(40) : IF C8$ = HEX(00) THEN 5240 : GOSUB 5280 : GOTO 5250 5240 GOSUB 5270 5250 J=55 : C8$=STR(C$,1,1) AND HEX(80) : IF C8$ = HEX(00) THEN 5260 : GOSUB 5280 : GOTO 5290 5260 GOSUB 5270 : GOTO 5290 5270 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 5280 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 5290 E$=HEX(20) : KEYIN E$ ,5300,5290 : GOSUB '40 : GOTO 5090 5300 IF E$ = HEX(0D) THEN 5310 : GOTO 5290 5310 $GIO #1 (4050 7510 1232 8602 1200,R$) : V$ = STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 5320 : PRINT AT(18,20);"Timed out forcing controller back to host" : GOTO 4810 5320 IF STR(R$,2,1)=HEX(30) THEN 5330 : GOTO 5340 5330 PRINT HEX(0306);AT(10,15);"Controller returned to host" : GOSUB '40 : RETURN 5340 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 1500 5350 REM % $GIO DELAY 10 MS FOR EACH PASS 5360 DEFFN '45 5370 FOR I = 1 TO J : $GIO #1(750A,R$) : NEXT I : RETURN 5380 DEFFN '16 : LOAD T"START"