image of READY prompt

Wang2200.org

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"