Listing of file='7BDEFBI' on disk='vmedia/mvp-diag-2.6.2.wvd.zip'
# Sector 4043, program filename = '7BDEFBI' 0010 REM % 2228 D/E/F 7 BOARD BURN-IN MONITOR LAST MODIFIED 07/08/83 0020 DIM A$(1,7)3,A1$(1,7)3,A2$(1,7)1,A3$(1,7)1,B1$2,B2$10,C$1,D1$8,E$(1,7)48, H$5,J$5,K$(4)60,R$15,R1$1,T$1,V$1,W$5,Y$5,F$(24)80,F1$(1,7)1,F2$2,F3$2,F4 $4,F5$4,F6$4,N,M$(24)80,M1$96,S$1,S1$3,S2$1,S3$1 0030 X,S=0 0040 INIT(" ")F$() : INIT(FF)R$ : A$()="01901A01B01C01D01E01F" : A1$()="09909A09B09C09D09E09F" : A2$()=HEX(00000000000000) : F1$()="1234567" : INIT(00)E$() : A3$()=HEX(00000000000000) 0050 REM % VARIABLES : REM R$ = $GIO REGISTER STRING : REM A$ = 3 DIGIT DEVICE ADDRESS ARRAY : REM B$ = ERROR STRING : REM C$ = SINGLE CHAR KEYIN VARIABLE 0060 PRINT HEX(0306);AT(12,10);"CHECKING STATUS AND INITIALIZING CONTROLLER AD DRESS " 0070 STR(F$(1),14,49)= HEX(0E)&"2228 D/E/F TC 7 BOARD BURN-IN MONITOR REV.437 0" : STR(F$(3),,73)=HEX(200E)&"UNIT # D/A SIZE STATUS TOTAL -> ITERA TIONS & FAILURES" 0080 S = 1 : I = 5 0090 SELECT #1 <A$(1,S)> : PRINT HEX(06);AT(12,62);A$(1,S); : GOTO 110 0100 REM % SET UP $GIO TIMEOUT (MAX VALUE FOR INPUT ON MVP SYSTEM) 0110 STR(R$,3,2)=HEX(000D) 0120 REM % SELECT DEVICE AND TIMEOUT READY 0130 $GIO SELECT #1 (1232 1020,R$) : ERROR X = ERR : GOTO 190 0140 $GIO RESET #1(4580,R$) : FOR I8 = 1 TO 2000 : NEXT I8 0150 REM %^ PRINT RESULT OF SELECTION ROUTINE 0160 STR(R$,8,1)=AND HEX(10) : IF STR(R$,8,1)=HEX(10) THEN 170 : SELECT #2<A1$(1,S)> : GOTO 240 0170 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,21)="BUSY (Unable to test)" : A2$(1,S)=HEX(FF) : GOTO 910 0180 REM % ERROR HANDLING ROUITNE FOR NON CONFIGURED ADDRESS 0190 IF X<>48 THEN 200 : STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,15)="Undefined in DT" : A2$(1,S)=HEX(FF) : GOTO 910 0200 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,6)="ERROR " : STR(F$(I),31,2)=BIN(X,2) : A2$(1,S)=HEX(FF) : GOTO 910 0210 REM % '40 SUBROUTINE ( SIMPLE DELAY ROUTINE ) 0220 DEFFN'40 : FOR J = 1 TO 5000 : NEXT J : RETURN 0230 REM %^ DMA / PIO TEST 0240 $GIO DUMMY READ #1(1232 8602 1200,R$) 0250 STR(R$,1,2)=HEX(0000) : 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 270 0260 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),23,47)="CPU timed out during DMA/PIO Data transfer test" : A2$(1,S)=HEX(FF) : GOTO 910 0270 STR(R$,1,1)=HEX(00) : GOTO 290 0280 $GIO #1(1910,R$) 0290 $GIO SEND DATA #1(1232 4210 1200,R$) : IF STR(R$,8,1)<> HEX(00) THEN 260 0300 IF STR(R$,1,1) <> HEX(FF) THEN 280 : STR(H$,1,5)=HEX(0101000900) : STR(R$,3,2)= HEX(0004) : $GIO READ #1(1232 A000 1200,R$)H$ : V$=STR(R$,8,1) AND HEX(10) : IF V$ = HEX(10) THEN 260 0310 STR(R$,1,1)=HEX(00) : GOTO 330 0320 $GIO #1(1910,R$) 0330 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) 0340 T$=STR(R$,8,1) AND HEX(10) : IF T$=HEX(10) THEN 360 : V$=STR(R$,8,1) AND HEX(04) : IF V$=HEX(04) THEN 370 0350 IF STR(R$,1,1) <> HEX(FF) THEN 320 : GOTO 400 0360 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),22,53)="CPU timed out before getting a IBS during Data test" : V$=STR(R$,8,1) AND HEX(04) : IF V$=HEX(04) THEN 370 : A2$(1,S)=HEX(FF) : GOTO 910 0370 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),22,33)="Data error during DMA/PIO test.." 0380 HEXUNPACK STR(R$,1,1)TO F2$ : HEXUNPACK STR(R$,2,1)TO F3$ : STR(F$(I),54,5)="Sent " : STR(F$(I),60,2)=F2$ : STR(F$(I),62,10)=" Received " : STR(F$(I),73,2)=F3$ : A2$(1,S)= HEX(FF) : GOTO 910 0390 REM % GET MEMORY SIZE BYTE FROM CONTROLLER 0400 STR(W$,1,5) = HEX(01000107FE) : STR(R$,3,2)=HEX(0004) : $GIO SEND READ COMMAND STRING #1(1232 A000 1200,R$)W$ 0410 V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 430 0420 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,38)="CPU timed out during SIZE request" : A2$(1,S)=HEX(FF) : GOTO 910 0430 $GIO #1(7510 8702 ,R$) : T = 1 0440 S1$="64k" : S2$=HEX(80) : S3$=HEX(40) : 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" 0450 IF STR(R$,2,1)= HEX(28) THEN T = 1 : IF STR(R$,2,1)= HEX(BF) THEN S3$ = HEX(20) : IF STR(R$,2,1)= HEX(7F) THEN S3$=HEX(20) : IF STR(R$,2,1)= HEX(7F) THEN S2$=HEX(40) : STR(F$(I),18,3)=S1$ 0460 REM % DMA ADDRESS MULTIPLEXER CHECK 0470 STR(H$,1,5)=HEX(0000018000) : STR(J$,1,5)=HEX(0000018001) : STR(W$,1,5)=HEX(0100018000) : STR(Y$,1,5)=HEX(0100018001) : STR(H$,4,1)=S2$ : STR(J$,4,1)=S2$ : STR(W$,4,1)=S2$ : STR(Y$,4,1)=S2$ 0480 GOSUB 580 : $GIO WRITE FF IN FIRST LOCATION #1(40FF,R$) : GOSUB 610 : STR(R$,1,2)=HEX(0000) 0490 GOSUB 710 : $GIO WRITE 00 TO MEMORY #1(4000,R$) : GOSUB 660 : GOSUB 740 0500 IF STR(J$,5,1)=HEX(80) THEN 510 : R1$=STR(J$,5,1) : ROTATE(R1$,1) : STR(J$,5,1)=R1$ : STR(Y$,5,1)=R1$ : GOTO 490 0510 STR(J$,5,1)=HEX(00) : STR(Y$,5,1)=HEX(00) : R1$=HEX(01) 0520 STR(J$,4,1)=OR R1$ : STR(Y$,4,1)=OR R1$ 0530 GOSUB 710 : $GIO WRITE 00 TO MEMORY #1(4000,R$) : GOSUB 660 : GOSUB 740 0540 IF R1$=S3$ THEN 800 : STR(J$,4,1)=S2$ : STR(Y$,4,1)=S2$ : ROTATE(R1$,1) : GOTO 520 0550 HEXUNPACK STR(H$,4,2)TO F4$ : HEXUNPACK STR(R$,1,1) TO F2$ : HEXUNPACK STR(R$,2,1)TO F3$ 0560 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),17,22)="DMA address error..." : STR(F$(I),38,10)="Address = " : STR(F$(I),48,4)=F4$ : STR(F$(I),53,12)="Expected = " : STR(F$(I),64,2)=F2$ : STR(F$(I),68,9)="Actual = " : STR(F$(I),77,2)=F3$ : A2$(1,S)=HEX(FF) : GOTO 910 0570 HEXUNPACK STR(J$,4,2)TO F4$ : HEXUNPACK STR(R$,1,1) TO F2$ : HEXUNPACK STR(R$,2,1)TO F3$ : GOTO 560 0580 STR(R$,3,2)=HEX(0004) : $GIO SEND WRITE COMMAND STRING #1(1232 A000 1200,R$)H$ 0590 V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN RETURN 0600 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,38)="CPU timed out during DMA address test" : A2$(1,S)=HEX(FF) : GOTO 910 0610 STR(R$,3,2)=HEX(0004) : $GIO SEND READ COMMAND STRING #1(1232 A000 1200,R$)W$ 0620 V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 640 0630 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,38)="CPU timed out during DMA address test" : A2$(1,S)=HEX(FF) : GOTO 910 0640 $GIO #1(7510 8702 ,R$) : IF STR(R$,2,1)= HEX(FF) THEN RETURN 0650 STR(R$,1,1)=HEX(FF) : GOTO 550 0660 STR(R$,3,2)=HEX(0004) : $GIO SEND READ COMMAND STRING #1(1232 A000 1200,R$)W$ 0670 V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 690 0680 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,38)="CPU timed out during DMA address test" : A2$(1,S)=HEX(FF) : GOTO 910 0690 $GIO #1(7510 8702 ,R$) : IF STR(R$,2,1)= HEX(FF) THEN RETURN 0700 STR(R$,1,1)=HEX(FF) : GOTO 570 0710 STR(R$,3,2)=HEX(0004) : $GIO SEND WRITE COMMAND STRING #1(1232 A000 1200,R$)J$ 0720 V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN RETURN 0730 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,38)="CPU timed out during DMA address test" : A2$(1,S)=HEX(FF) : GOTO 910 0740 STR(R$,3,2)=HEX(0004) : $GIO SEND READ COMMAND STRING #1(1232 A000 1200,R$)Y$ 0750 V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 770 0760 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,38)="CPU timed out during DMA address test" : A2$(1,S)=HEX(FF) : GOTO 910 0770 $GIO #1(7510 8702 ,R$) : IF STR(R$,2,1) = HEX(00) THEN RETURN 0780 STR(R$,1,1)=HEX(00) : GOTO 570 0790 REM % DOWNLINE LOAD THE MICROCODE BEFORE GOING TO MENU 0800 STR(H$,1,5)= HEX(01000107FD) : STR(R$,3,2)=HEX(0004) : $GIO SEND READ COMMAND STRING #1(1232 A000 1200,R$)H$ : $GIO READ #1(7510 8702,R$) : D1$="FBI" : IF STR(R$,2,1)<>HEX(8E)THEN D1$="28DBURN" 0810 STR(H$,1,5)= HEX(0000F00900) : STR(W$,1,5)=HEX(0200000910) 0820 GOSUB '21 : GOSUB '25 : GOSUB '150 : GOSUB '26 : STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,7)="Running" : STR(F$(I),47,4)="0000" : STR(F$(I),66,4)="0000" : GOTO 910 0830 REM % LOAD MICROCODE FROM DISK AND SEND TO CONTROLLER MEMORY 0840 DEFFN '150 0850 F=0 : DATA LOAD DC OPEN T#0,D1$ : ERRORIF ERR = 82 THEN 890 0860 DATA LOAD DC #0,B1$,B2$,K$() : IF END THEN F=1 : IF STR(B1$,1,1)<>HEX(01)THEN 860 : $GIO #1(A200)K$() : IF F=1 THEN 880 0870 STR(H$,4,2)=ADDC HEX(00F0) : GOSUB '21 : GOSUB '25 : INIT(00)K$ : GOTO 860 0880 DATA SAVE DC CLOSE : RETURN 0890 PRINT AT(5,0);"FILE NOT IN CATALOG. NON RECOVERALBLE ERROR" : STOP 0900 REM %^ MAIN BODY OF DIAGNOSTIC MONITOR AFTER INITIAL CONTROLLER CHECK 0910 I=I+2 : S=S+1 : IF S <> 8 THEN 90 : S=1 : I=5 0920 IF A2$(1,S)=HEX(00) THEN 930 : S = S+1 : IF S <> 8 THEN 920 : STR(F$(20),3,43)="No testable controllers have been detected." : PRINT HEX(0306);AT(0,0);F$() : STOP 0930 STR(F$(22),3,76)=HEX(0E)&"PRESS S.F. KEY CORRESPONDING TO THE UNIT # FOR UNIT TEST FAILURE DISPLAY" : PRINT HEX(0306); AT(0,0);F$() 0940 S=1 : I=5 0950 IF A2$(1,S)=HEX(00) THEN 960 : S=S+1 : I=I+2 : IF S=8 THEN 940 : GOTO 950 0960 SELECT #1<A$(1,S)> : SELECT #2<A1$(1,S)> : $IF ON #2,990 0970 KEYIN C$,980,1020 0980 GOSUB '100 : S = S+1 : I=I+2 : IF S = 8 THEN 940 : GOTO 950 0990 A3$(1,S)=HEX(00) : $GIO #1 (8602 1232 C640 1200,R$)E$(1,S) : PRINT HEX(06);AT(I,44);HEXOF(STR(E$(1,S),1,2));AT(I,63);HEXOF(STR(E$(1,S) ,3,2)); : HEXUNPACK STR(E$(1,S),1,2)TO F5$ : HEXUNPACK STR(E$(1,S),3,2)TO F6$ : STR(F$(I),47,4)=F5$ : STR(F$(I),66,4)=F6$ 1000 KEYIN C$,980,1020 1010 GOTO 980 1020 N =0 : IF C$ = HEX(01) THEN N = 1 : IF C$ = HEX(02) THEN N = 2 : IF C$ = HEX(03) THEN N = 3 : IF C$ = HEX(04) THEN N = 4 : IF C$ = HEX(05) THEN N = 5 : IF C$ = HEX(06) THEN N = 6 : IF C$ = HEX(07) THEN N = 7 : IF C$ = HEX(08) THEN GOTO 1610 : IF N = 0 THEN 980 : GOTO 1040 1030 REM %^ ASSEMBLE AND DISPLAY ERROR SCREEN INFORMATION FOR UNIT REQUESTED 1040 IF A2$(1,N)=HEX(00) THEN 1050 : PRINT HEX(03060E);AT(12,9);"THE CONTROLLER YOU HAVE SELECTED IS NOT RUNNI NG ANY BURN-IN.";HEX(0F); : GOSUB '40 : PRINT HEX(0306);AT(0,0);F$() : GOTO 980 1050 IF STR(E$(1,N),3,2)<> HEX(0000) THEN 1060 : PRINT HEX(03060E);AT(12,9);"NO FAILURES HAVE BEEN RECORDED FOR CONTROLLER ADDRESS ";A$(1,N);HEX(0F); : GOSUB '40 : PRINT HEX(0306);AT(0,0);F$() : GOTO 980 1060 INIT(" ")M$() : STR(M$(1),8,69) =HEX(0E)&"CURRENT AVAILABLE TEST INFORMATION FOR CONTROLL ER ADDRESS "&A$(1,N) : STR(M$(3),2,70) = "TEST # STATUS ITERATION FAILING TE ST INFORMATION" 1070 HEXUNPACK STR(E$(1,N),1,48)TO M1$ : STR(M$(5),4,1)=STR(M1$,10,1) : IF STR(E$(1,N),6,2)<> HEX(0000) THEN 1080 : STR(M$(5),13,6)="PASSED" : GOTO 1120 1080 STR(M$(5),13,6)="FAILED" : STR(M$(5),27,4)=STR(M1$,11,4) : STR(M$(5),37,10)="ADDRESS = " : STR(M$(5),47,4)=STR(M1$,15,4) : STR(M$(5),53,11)="EXPECTED = " : STR(M$(5),64,2)=STR(M1$,19,2) : STR(M$(5),68,8)="ACTUAL = " : STR(M$(5),77,2)=STR(M1$,21,2) 1090 IF STR(E$(1,N),12,2)=HEX(0000) THEN 1120 : STR(M$(7),37,10)="ADDRESS = " : STR(M$(7),47,4)=STR(M1$,23,4) : STR(M$(7),53,11)="EXPECTED = " : STR(M$(7),64,2)=STR(M1$,27,2) : STR(M$(7),68,8)="ACTUAL = " : STR(M$(7),77,2)=STR(M1$,29,2) 1100 IF STR(E$(1,N),16,2)=HEX(0000) THEN 1120 : STR(M$(9),37,10)="ADDRESS = " : STR(M$(9),47,4)=STR(M1$,31,4) : STR(M$(9),53,11)="EXPECTED = " : STR(M$(9),64,2)=STR(M1$,35,2) : STR(M$(9),68,8)="ACTUAL = " : STR(M$(9),77,2)=STR(M1$,37,2) 1110 IF STR(E$(1,N),20,2)=HEX(0000) THEN 1120 : STR(M$(11),37,10)="ADDRESS = " : STR(M$(11),47,4)=STR(M1$,39,4) : STR(M$(11),53,11)="EXPECTED = " : STR(M$(11),64,2)=STR(M1$,43,2) : STR(M$(11),68,8)="ACTUAL = " : STR(M$(11),77,2)=STR(M1$,45,2) 1120 STR(M$(13),4,1)=STR(M1$,48,1) : IF STR(E$(1,N),25,2)<> HEX(0000) THEN 1130 : STR(M$(13),13,6)="PASSED" : GOTO 1150 1130 STR(M$(13),13,6)="FAILED" : STR(M$(13),27,4)=STR(M1$,49,4) : STR(M$(13),37,6)="ERR = " : STR(M$(13),43,2)=STR(M1$,53,2) : STR(M$(13),46,7)="MODE = " : STR(M$(13),53,2)=STR(M1$,55,2) 1140 IF STR(E$(1,N),27,1)<>HEX(F5) THEN 1150 : STR(M$(13),56,11)="EXPECTED = " : STR(M$(13),67,2)=STR(M1$,57,2) : STR(M$(13),70,9)="ACTUAL = " : STR(M$(13),79,2)=STR(M1$,59,2) 1150 STR(M$(15),4,1)=STR(M1$,62,1) : IF STR(E$(1,N),32,2)<> HEX(0000) THEN 1160 : STR(M$(15),13,6)="PASSED" : GOTO 1190 1160 STR(M$(15),13,6)="FAILED" : STR(M$(15),27,4)=STR(M1$,63,4) : STR(M$(15),37,6)="ERR = " : STR(M$(15),43,2)=STR(M1$,67,2) : IF STR(E$(1,N),34,1)< HEX(F3) THEN 1190 : STR(M$(15),46,7)="SIZE = " 1170 IF STR(E$(1,N),35,1)=HEX(00) THEN STR(M$(15),53,1)="1" : IF STR(E$(1,N),35,1)=HEX(01) THEN STR(M$(15),53,1)="2" : IF STR(E$(1,N),35,1)=HEX(03) THEN STR(M$(15),53,1)="3" : IF STR(E$(1,N),35,1)=HEX(07) THEN STR(M$(15),53,1)="4" : IF STR(E$(1,N),35,1)=HEX(0F) THEN STR(M$(15),53,1)="5" : IF STR(E$(1,N),35,1)=HEX(1F) THEN STR(M$(15),53,1)="6" 1180 IF STR(E$(1,N),35,1)=HEX(3F) THEN STR(M$(15),53,1)="7" : IF STR(E$(1,N),34,1)<>HEX(F5) THEN 1190 : STR(M$(15),56,11)="EXPECTED = " : STR(M$(15),67,2)=STR(M1$,71,2) : STR(M$(15),70,9)="ACTUAL = " : STR(M$(15),79,2)=STR(M1$,73,2) 1190 STR(M$(17),4,1)=STR(M1$,76,1) : IF STR(E$(1,N),39,2)<> HEX(0000) THEN 1200 : STR(M$(17),13,6)="PASSED" : GOTO 1210 1200 STR(M$(17),13,6)="FAILED" : STR(M$(17),27,4)=STR(M1$,77,4) : STR(M$(17),37,8)="ERROR = " : STR(M$(17),45,2)=STR(M1$,81,2) : STR(M$(17),50,24)="CHARACTER RAM ADDRESS = " : STR(M$(17),74,2)=STR(M1$,83,2) 1210 IF STR(E$(1,N),43,1)= HEX(00) THEN 1230 : STR(M$(19),4,1)=STR(M1$,86,1) : IF STR(E$(1,N),44,2)<> HEX(0000) THEN 1220 : STR(M$(19),13,6)="PASSED" : GOTO 1230 1220 STR(M$(19),13,6)="FAILED" : STR(M$(19),27,4)=STR(M1$,87,4) : STR(M$(19),37,8)="ERROR = " : STR(M$(19),45,2)=STR(M1$,91,2) : STR(M$(19),56,11)="EXPECTED = " : STR(M$(19),67,2)=STR(M1$,93,2) : STR(M$(19),70,9)="ACTUAL = " : STR(M$(19),79,2)=STR(M1$,95,2) 1230 STR(M$(22),24,31)=HEX(0E)&"FOR MASTER SCREEN PRESS RETURN" : PRINT HEX(0306);AT(0,0);M$() 1240 IF A2$(1,S)=HEX(00) THEN 1250 : S=S+1 : I=I+2 : IF S < 8 THEN 1240 : S=1 : I=5 : GOTO 1240 1250 SELECT #1<A$(1,S)> : SELECT #2<A1$(1,S)> : $IF ON #2,1270 1260 GOSUB '100 : GOTO 1280 1270 A3$(1,S)=HEX(00) : $GIO #1 (8602 1232 C640 1200,R$)E$(1,S) : HEXUNPACK STR(E$(1,S),1,2)TO F5$ : HEXUNPACK STR(E$(1,S),3,2)TO F6$ : STR(F$(I),47,4)=F5$ : STR(F$(I),66,4)=F6$ 1280 C$=" " : KEYIN C$,1290,1300 1290 IF C$ = HEX(0D) THEN 1310 : S = S+1 : I=I+2 : IF S < 8 THEN 1240 : S=1 : I=5 : GOTO 1240 1300 N =0 : IF C$ = HEX(01) THEN N = 1 : IF C$ = HEX(02) THEN N = 2 : IF C$ = HEX(03) THEN N = 3 : IF C$ = HEX(04) THEN N = 4 : IF C$ = HEX(05) THEN N = 5 : IF C$ = HEX(06) THEN N = 6 : IF C$ = HEX(07) THEN N = 7 : IF C$ = HEX(08)THEN 1610 : IF N = 0 THEN 1290 : GOTO 1040 1310 PRINT HEX(0306);AT(0,0);F$() : GOTO 980 1320 REM %^ '21 SUBROUTINE DEVICE READY/BUSY CHECK 1330 DEFFN '21 1340 $IF ON #1,1360 1350 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,45)="Device is not ready...Expected -RBI to be Low" : A2$(1,S)=HEX(FF) : GOTO 910 1360 RETURN 1370 REM % '24 SUBROUTINE DELAY FOR DOWNLINE SETUP COMPLETION 1380 DEFFN'24 1390 $GIO DELAY #1 (1950 1C56 75FF E000,R$) : RETURN 1400 REM % '25 SUBROUTINE SEND PARAMETERS FOR MEMORY WRITE 1410 DEFFN '25 1420 STR(R$,3,2)=HEX(0004) : $GIO #1(1232 A000 1200,R$)H$ 1430 V$ = STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN RETURN 1440 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,47)="CPU timed while sending micro code load command" : A2$(1,S)=HEX(FF) : GOTO 910 1450 REM % '26 SUBROUTINE FORCES CONTROLLER INTO DOWNLINE LOADED TEST 1460 DEFFN'26 1470 STR(R$,3,2)=HEX(0002) : $GIO #1(75FF 1232 A000 1200,R$)W$ 1480 V$ = STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 1500 1490 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,53)="CPU timed out sending controller to micro-code tests" : A2$(1,S)=HEX(FF) : GOTO 910 1500 $GIO #1(75FF 1232 8702 1200,R$) 1510 V$ = STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 1530 1520 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),20,59)="Timed out waiting for controller to respond to goto com mand" : A2$(1,S)=HEX(FF) : GOTO 910 1530 IF STR(R$,2,1)=HEX(3F) THEN RETURN 1540 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,51)="Controller failed to go to micro-code test routines" : A2$(1,S)= HEX(FF) : GOTO 910 1550 RETURN CLEAR : RETURN 1560 REM % 1 SEC TIMER FOR INDIVIDUAL CONTROLLER TIME-OUT CHECK '100 1570 DEFFN '100 1580 $GIO(75FA 75FA 75FA 75FA ) : FOR I1 = 1 TO 7000 : NEXT I1 : A3$(1,S)= A3$(1,S) ADD HEX(01) : IF A3$(1,S)<> HEX(F0) THEN RETURN : PRINT HEX(06);AT(I,52);"6 min. Controller Time-out" 1590 STR(F$(I),52,26)="6 min. Controller Time-out" : A2$(1,S)=HEX(FF) : RETURN 1600 REM % RESTART ROUTINE FOR INDIVIDUAL CONTROLLERS S.F. 08 1610 INIT (" ") S$ : PRINT HEX(03);AT(1,24);"SINGLE CONTROLLER RESTART MODE";AT(4,20);"1 - 019 2 - 01A 3 - 01B 4 - 01C"; AT(6,20);"5 - 01D 6 - 01E 7 - 01F 8 - ABORT" 1620 PRINT AT(8,17); : LINPUT "Please make one selection (1-8) from above ?" S$ 1630 I=5 : CONVERT S$ TO S : IF S = 0 THEN 1620 : IF S>8 THEN 1620 : IF S=1 THEN I=5 : IF S=2 THEN I=7 : IF S=3 THEN I=9 : IF S=4 THEN I=11 : IF S=5 THEN I=13 : IF S = 6 THEN I=15 : IF S=7 THEN I=17 : ON S GOTO 1640,1640,1640,1640,1640,1640,1640,930 1640 IF A2$(1,S)=HEX(FF) THEN 1660 : PRINT AT(10,17);"The controller selected is currently Running";AT(12,17); : S$ =" " : LINPUT "Do you still wish to restart it (Y or N) ?" S$ 1650 IF S$ = "Y" THEN 1660 : IF S$<> "N" THEN 1640 : GOTO 1610 1660 PRINT HEX(0306);AT(12,5);"Restarting controller address ";A$(1,S);". It w ill take approximately 15 seconds." : A2$(1,S)=HEX(00) : STR(F$(I),1,80)=" " 1670 SELECT #1<A$(1,S)> : $GIO RESET #1 (4580,R$) : FOR J = 1 TO 16 : $GIO(75FA 75FA 75FA 75FA ) : NEXT J 1680 REM % SET UP $GIO TIMEOUT (MAX VALUE FOR INPUT ON MVP SYSTEM) 1690 STR(R$,3,2)=HEX(000D) 1700 REM % SELECT DEVICE AND TIMEOUT READY 1710 $GIO SELECT #1 (1232 1020,R$) : ERROR X = ERR : GOTO 1760 1720 REM % PRINT RESULT OF SELECTION ROUTINE 1730 STR(R$,8,1)=AND HEX(10) : IF STR(R$,8,1)=HEX(10) THEN 1740 : SELECT #2<A1$(1,S)> : GOTO 1790 1740 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,21)="BUSY (Unable to test)" : A2$(1,S)=HEX(FF) : GOTO 2390 1750 REM % ERROR HANDLING ROUITNE FOR NON CONFIGURED ADDRESS 1760 IF X<>48 THEN 1770 : STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,15)="Undefined in DT" : A2$(1,S)=HEX(FF) : GOTO 2390 1770 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,6)="ERROR " : STR(F$(I),31,2)=BIN(X,2) : A2$(1,S)=HEX(FF) : GOTO 2390 1780 REM %^ DMA / PIO TEST 1790 $GIO DUMMY READ #1(1232 8602 1200,R$) 1800 STR(R$,1,2)=HEX(0000) : 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 1820 1810 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),23,47)="CPU timed out during DMA/PIO Data transfer test" : A2$(1,S)=HEX(FF) : GOTO 2390 1820 STR(R$,1,1)=HEX(00) : GOTO 1840 1830 $GIO #1(1910,R$) 1840 $GIO SEND DATA #1(1232 4210 1200,R$) : IF STR(R$,8,1)<> HEX(00) THEN 1810 1850 IF STR(R$,1,1) <> HEX(FF) THEN 1830 : STR(H$,1,5)=HEX(0101000900) : STR(R$,3,2)= HEX(0004) : $GIO READ #1(1232 A000 1200,R$)H$ : V$=STR(R$,8,1) AND HEX(10) : IF V$ = HEX(10) THEN 1810 1860 STR(R$,1,1)=HEX(00) : GOTO 1880 1870 $GIO #1(1910,R$) 1880 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) 1890 T$=STR(R$,8,1) AND HEX(10) : IF T$=HEX(10) THEN 1910 : V$=STR(R$,8,1) AND HEX(04) : IF V$=HEX(04) THEN 1920 1900 IF STR(R$,1,1) <> HEX(FF) THEN 1870 : GOTO 1950 1910 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),22,53)="CPU timed out before getting a IBS during Data test" : V$=STR(R$,8,1) AND HEX(04) : IF V$=HEX(04) THEN 1920 : A2$(1,S)=HEX(FF) : GOTO 2390 1920 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),22,33)="Data error during DMA/PIO test.." 1930 HEXUNPACK STR(R$,1,1)TO F2$ : HEXUNPACK STR(R$,2,1)TO F3$ : STR(F$(I),54,5)="Sent " : STR(F$(I),60,2)=F2$ : STR(F$(I),62,10)=" Received " : STR(F$(I),73,2)=F3$ : A2$(1,S)= HEX(FF) : GOTO 2390 1940 REM % GET MEMORY SIZE BYTE FROM CONTROLLER 1950 STR(W$,1,5) = HEX(01000107FE) : STR(R$,3,2)=HEX(0004) : $GIO SEND READ COMMAND STRING #1(1232 A000 1200,R$)W$ 1960 V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 1980 1970 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,38)="CPU timed out during SIZE request" : A2$(1,S)=HEX(FF) : GOTO 910 1980 $GIO #1(7510 8702 ,R$) 1990 S1$="64k" : S2$=HEX(80) : S3$=HEX(40) : 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(BF) OR STR(R$,2,1)=HEX(7F) THEN S3$=HEX(20) : IF STR(R$,2,1)=HEX(7F) THEN S2$=HEX(40) : STR(F$(I),18,3)=S1$ 2000 REM % DMA ADDRESS MULTIPLEXER CHECK 2010 STR(H$,1,5)=HEX(0000018000) : STR(J$,1,5)=HEX(0000018001) : STR(W$,1,5)=HEX(0100018000) : STR(Y$,1,5)=HEX(0100018001) : STR(H$,4,1)=S2$ : STR(J$,4,1)=S2$ : STR(W$,4,1)=S2$ : STR(Y$,4,1)=S2$ 2020 GOSUB 2120 : $GIO WRITE FF IN FIRST LOCATION #1(40FF,R$) : GOSUB 2150 : STR(R$,1,2)=HEX(0000) 2030 GOSUB 2250 : $GIO WRITE 00 TO MEMORY #1(4000,R$) : GOSUB 2200 : GOSUB 2280 2040 IF STR(J$,5,1)=HEX(80) THEN 2050 : R1$=STR(J$,5,1) : ROTATE(R1$,1) : STR(J$,5,1)=R1$ : STR(Y$,5,1)=R1$ : GOTO 2030 2050 STR(J$,5,1)=HEX(00) : STR(Y$,5,1)=HEX(00) : R1$=HEX(01) 2060 STR(J$,4,1)=OR R1$ : STR(Y$,4,1)=OR R1$ 2070 GOSUB 2250 : $GIO WRITE 00 TO MEMORY #1(4000,R$) : GOSUB 2200 : GOSUB 2280 2080 IF R1$=S3$ THEN 2350 : STR(J$,4,1)=S2$ : STR(Y$,4,1)=S2$ : ROTATE(R1$,1) : GOTO 2060 2090 HEXUNPACK STR(H$,4,2)TO F4$ : HEXUNPACK STR(R$,1,1) TO F2$ : HEXUNPACK STR(R$,2,1)TO F3$ 2100 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),17,22)="DMA address error..." : STR(F$(I),38,10)="Address = " : STR(F$(I),48,4)=F4$ : STR(F$(I),53,12)="Expected = " : STR(F$(I),64,2)=F2$ : STR(F$(I),68,9)="Actual = " : STR(F$(I),77,2)=F3$ : A2$(1,S)=HEX(FF) : GOTO 2390 2110 HEXUNPACK STR(J$,4,2)TO F4$ : HEXUNPACK STR(R$,1,1) TO F2$ : HEXUNPACK STR(R$,2,1)TO F3$ : GOTO 2100 2120 STR(R$,3,2)=HEX(0004) : $GIO SEND WRITE COMMAND STRING #1(1232 A000 1200,R$)H$ 2130 V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN RETURN 2140 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,38)="CPU timed out during DMA address test" : A2$(1,S)=HEX(FF) : GOTO 2390 2150 STR(R$,3,2)=HEX(0004) : $GIO SEND READ COMMAND STRING #1(1232 A000 1200,R$)W$ 2160 V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 2180 2170 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,38)="CPU timed out during DMA address test" : A2$(1,S)=HEX(FF) : GOTO 2390 2180 $GIO #1(7510 8702 ,R$) : IF STR(R$,2,1)= HEX(FF) THEN RETURN 2190 STR(R$,1,1)=HEX(FF) : GOTO 2090 2200 STR(R$,3,2)=HEX(0004) : $GIO SEND READ COMMAND STRING #1(1232 A000 1200,R$)W$ 2210 V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 2230 2220 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,38)="CPU timed out during DMA address test" : A2$(1,S)=HEX(FF) : GOTO 2390 2230 $GIO #1(7510 8702 ,R$) : IF STR(R$,2,1)= HEX(FF) THEN RETURN 2240 STR(R$,1,1)=HEX(FF) : GOTO 2110 2250 STR(R$,3,2)=HEX(0004) : $GIO SEND WRITE COMMAND STRING #1(1232 A000 1200,R$)J$ 2260 V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN RETURN 2270 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,38)="CPU timed out during DMA address test" : A2$(1,S)=HEX(FF) : GOTO 2390 2280 STR(R$,3,2)=HEX(0004) : $GIO SEND READ COMMAND STRING #1(1232 A000 1200,R$)Y$ 2290 V$=STR(R$,8,1) AND HEX(10) : IF V$ <> HEX(10) THEN 2310 2300 STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,38)="CPU timed out during DMA address test" : A2$(1,S)=HEX(FF) : GOTO 2390 2310 $GIO #1(7510 8702 ,R$) : IF STR(R$,2,1) = HEX(00) THEN RETURN 2320 STR(R$,1,1)=HEX(00) : GOTO 2110 2330 REM % DOWNLINE LOAD THE MICROCODE BEFORE GOING TO MENU 2340 STR(H$,1,5)= HEX(01000107FD) : STR(R$,3,2)=HEX(0004) : $GIO SEND READ COMMAND STRING #1(1232 A000 1200,R$)H$ : $GIO READ #1(7510 8702,R$) : D1$="FBI" : IF STR(R$,2,1)<>HEX(8E)THEN D1$="28DBURN" 2350 STR(H$,1,5)= HEX(0000F00900) 2360 STR(W$,1,5)=HEX(0200000910) 2370 GOSUB '21 : GOSUB '25 : GOSUB '150 : GOSUB '26 : STR(F$(I),5,1)=F1$(1,S) : STR(F$(I),13,3)=A$(1,S) : STR(F$(I),25,7)="Running" : STR(F$(I),47,4)="0000" : STR(F$(I),66,4)="0000" : GOTO 2390 2380 REM % END OF RESTART ATTEMPT CHECK TO SEE IF SUCCESSFUL 2390 IF A2$(1,S)=HEX(00) THEN 2400 : PRINT AT(14,27);"RESTART WAS UNSUCCESSFUL" : GOSUB '40 : GOTO 920 2400 PRINT AT(14,18);"RESTART WAS SUCCESSFUL" : A3$(1,S)=HEX(00) : GOSUB '40 : GOTO 920