Listing of file='FTU' on disk='vmedia/cs386_host_1.2.wvd.zip'
# Sector 605, program filename = 'FTU' 0010 REM % THIS IS THE 2200 FTU 0011 REM % NOTE : REM Rev. Number is in subroutine '35 0012 REM \D5\F0\E4\E1\F4\E5\F3; 08/18/81, 06/01/84 by Paul J. Hossfeld - impro ved screening, Added head step 0015 REM \D5\F0\E4\E1\F4\E5\F3; 10/23/84 by Paul J. Hossfeld - Added 2275 as o ption. Slowed $GIO (3 places) search for drives so 2280DPU can read driv es. 0016 REM \D5\F0\E4\E1\F4\E5\F3; 12/04/84 by Paul J. Hossfeld - Fixed print opt ion on fast verify. Fixed end sector print on sector compare and box func tion when complete. 0017 REM \D5\F0\E4\E1\F4\E5\F3; 08/09/85 by Paul J. Hossfeld - Fixed Instructi on Test for PC emulation. 0018 REM \D5\F0\E4\E1\F4\E5\F3; 11/04/85 by Paul J. Hossfeld - Fixed Instructi on Test large disk testing. i.e. winchesters with >30000 sectors. Lines 5050,4740, 4750, 4630, 4640 change C to C3. Line 4380 change INT(E4/16) +37 to 477. 0019 REM Line 4600 change323+(INT(E$/16)+37)) to 800. 0030 DIM A$3,A2$32,B$,C$1,C1$2,C3$1,D$(100)3,R$(100),D3$(3)3,E(100),E$,E$(100) 7,F$(2)8,G,H1,I1,I2,I4,I5,M$1,M$(100)12,P3$3,P3,R,X,Y,Z,Z1,Z2 0040 DIM A3$(2),A4$(2,2),C$(16),L2$(1)2,N$8,N1$8,Q0$82,R2,T2,T3,T4,X(2),X1(2,2 ),Y2$5,Y3$5 0050 DIM C9$8,D2,E3,E3$7,H$57,H1$57,I6,L1$1,L$1,K$(30)29,M3$12,P9$3,R1$(16),R3 $1,S3,T(14),W$(16),W1$(256)1,W2$(256)1,W9$(512)1 0060 F$(2),F$(1)="\A0\A0\A0\A0\A0\A0\A0\A0" : R2=1000 : Z=9 : Z3=25 : X1=90 0070 REM NO. OF LINES ON THE SCREEN FOR THE DEVICE LIST : D2=17 : REM MAXIUM NUMBER OF LINES TO PRINT ON PRINTER : P1=500 0080 P9$="OFF" : W9$()="B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8B8" : M$="I" : L$="N" : W9$()=W9$()&STR(W9$()) : HEXPACKW1$()FROMW9$() 0090 INIT(00)C$,C1$,E$,R$,D$(),E$(),M$() 0100 SELECT PRINT 005(80) : I=1 : Z=5 : S,S3,P,E9=0 0110 REM % First page : GOSUB '35("2200 FTU (Field Test Unit)") 0120 B$=$PSTAT(1) : IF STR(B$,9,1)="M"AND STR(B$,10,1)>=HEX(18)THEN 125 : IF STR(B$,9,1)="V"AND STR(B$,10,1)>=HEX(21)THEN 125 : IF STR(B$,9,1)="W"THEN 125 : PRINT HEX(0E);AT(12,15);"CPU SOFTWARE MUST BE UPGRADED TO 'MVP 1.8' OR HI GHER, OR 'VP 2.0' OR HIGHER" : GOTO 120 0125 IF STR(B$,10,1)>=HEX(30)THEN D3$(1)="340" : ELSE D3$(1)="D10" 0130 PRINT AT(12,25,62);"Load all devices to be tested";AT(22,58);" SF'0 define err" : GOSUB 6250 : GOSUB '52 : GOSUB 6300 0140 IF G=1THEN 6330 : IF C$=HEX(0D)OR C$=HEX(82)THEN 170 : IF C$<>HEX(00)THEN 130 : GOSUB 5800 : E9=0 : GOTO 110 0170 REM % Second page : PRINT HEX(06);AT(1,0,1680);AT(23,38,41); : REM % Start search for drives : REM Skip first time : GOTO 204 0199 REM ROLL THROUGH ALL POSSIBLE DRIVE ADDRESS 0200 IF D3$(1)<>"340"THEN 202 : D3$(1)="D10" : GOTO 204 0202 IF STR(D3$(1),3,1)="9"THEN STR(D3$(1),3,1)="A" : ELSE STR(D3$(1),3,1)=ADDHEX(01) : IF STR(D3$(1),3,1)<="F"THEN 204 : STR(D3$(1),3,1)="0" : IF STR(D3$(1),2,1)>="7"THEN 490 : IF STR(D3$(1),2,1)>"3"THEN STR(D3$(1),2,1)=SUBHEX(03) : ELSE STR(D3$(1),2,1)=ADDHEX(04) 0204 REM GO CHECK THIS DRIVE : GOSUB 210 0206 REM Get any input : GOSUB 6310 : IF G=1THEN 90 : IF C$<>HEX(00)THEN 208 : GOSUB 5800 : E9=0 : PRINT HEX(03) : GOSUB '35("2200 FTU(Field Test Unit)") : P=0 0208 IF I>2AND M$(I-2)="Q2020"AND M$(I-1)="Q2020"AND STR(D$(I-2),1,2)=STR(D$(I -1),1,2)THEN M$(I-2),M$(I-1)="Q2040" 0209 REM IF 2270 THEN NO MORE THAN 1 SLAVE : IF STR(D3$,1,4)="2270"AND STR(D3$(1),2,2)="60"THEN STR(D3$(1),3,1)="F" : GOTO 200 0210 REM ENABLE THE DRIVE TO #2 : SELECT #2<D3$(1)> : ERRORX=ERR : GOTO 470 0211 REM READY : $OPEN 470,#2 : ERRORX=ERR : GOTO 470 0212 IF P=0AND S<>3THEN PRINT AT(11,Z3-4);"please wait"; : IF P=0OR S=3THEN PRINT AT(11,Z3+8);" CHECKING ";HEX(06); : ELSE PRINT AT(11,Z3+8);"checking "; 0214 REM If test select screen then S=3 and this : IF S<>3THEN PRINT D3$(1) : ELSE PRINT AT(11,Z3+16,4) : IF P=0THEN P=2 : P=P-1 : IF D3$(1)<>"340"THEN 216 : STR(R$,11,1)=HEX(C0) : GOTO 224 0216 $GIOSEARCHFORVALIDDEVICES#2(0104020002E8120012121020120012120B0070A041008 60B,R$) : ERRORX=ERR : GOTO 470 0220 REM If timeout skip usless addresses : IF STR(R$,8,1)<>HEX(10)THEN 222 : IF S=2OR S=3THEN 221 : STR(D3$(1),3,1)="F" : GOTO 470 0221 REM REPORT TIME OUT : X=91 : GOTO 460 0222 REM NO MORE DRIVES ON CO TYPE DEVICES : IF STR(R$,11,1)>=HEX(D0)THEN 224 : IF S=2OR S=3THEN 224 : IF STR(D3$(1),3,1)<"2"THEN 224 : STR(D3$(1),3,1)="F" : GOTO 470 0224 GOSUB 7020 : VERIFY T#2,(0,0)E : ERRORE=1 0225 X=ERR : GOSUB 7040 : IF E=0OR X=93OR X=95OR X=96THEN 230 : IF S=2OR S=3THEN 460 : GOTO 470 0230 R3$=STR(R$,11,1) : R$(I)=R3$ : REM % Now lets look for the drive types 0240 E3=65407 : M3$="Q2020" : T2=128 : GOSUB 450 0250 E3=65023 : M3$="2275 WIN " : T2=128 : GOSUB 450 0260 E3=52607 : M3$="2280" : T2=64 : GOSUB 450 0270 E3=38911 : M3$="2275 WIN " : T2=128 : GOSUB 450 0280 E3=32639 : M3$="1004" : T2=128 : GOSUB 450 0290 E3=19583 : M3$="2260" : T2=48 : GOSUB 450 0300 E3=16319 : M3$="1002" : T2=64 : GOSUB 450 0310 E3=9791 : M3$="2230-1" : T2=24 : GOSUB 450 0320 E2=9599 : M3$="2260-1/2" : T2=48 : GOSUB 450 0330 E3=8127 : M3$="1000" : T2=32 : GOSUB 450 0335 E3=4159 : M3$="2275 FLPm" : T2=32 : GOSUB 450 0340 E3=3873 : M3$="850 DSDD" : T2=52 : GOSUB 450 0350 E3=4799 : M3$="2260-1/4" : T2=48 : GOSUB 450 0360 E3=1279 : M3$="2275 FLPk" : T2=32 : IF R3$=HEX(D0)THEN GOSUB 450 0370 E3=1231 : M3$="2270a" : T2=16 : GOSUB 450 0380 E3=1023 : M3$="2270" : T2=16 : GOSUB 450 0390 IF D3$(1)<>"340"THEN 410 : E3=65535 : M3$="SYSTEM RAMD" : T2=1 : VERIFY T#2,(0,E3)E3 : ERRORX=ERR 0400 E3=E3-2 : IF E3<1THEN E3=1 : GOSUB 450 : GOTO 470 0410 E3=0 : M3$="UNKNOWN" : T2=1 : GOSUB 450 : GOTO 470 0449 REM HERE TO AUTO SIZE 0450 X=0 : VERIFY T#2,(E3,E3)E : ERRORE=1 0451 IF E=0THEN 455 : X=ERR : IF X<>93AND X<>95AND X<>96THEN RETURN 0455 GOSUB 7020 : VERIFY T#2,(0,0)E : ERRORGOTO 456 : REM RESTORE HEADS 0456 GOSUB 7040 : RETURN CLEAR 0460 STR(E3$,,7)="I- on" : CONVERT XTO STR(E3$,3,2),(##) : IF X=0THEN E3$=" " 0461 IF STR(M3$,,4)<>"2275"AND M3$<>"UNKNOWN"THEN 469 : GOSUB 1245 : IF STR(R$,6,3)<>HEX(000000)THEN 469 0462 IF STR(H$,1,1)<>"3"THEN 469 : IF STR(D3$(1),2,1)>"4"THEN 463 : IF STR(D3$(1),3,1)="0"THEN STR(M3$,1,6)="2200DS" : ELSE M3$="2200DS WIN " : IF STR(D3$(1),3,1)="F"THEN M3$="2200DS WINr" : GOTO 467 0463 M3$="2200DS WIN " : IF STR(D3$(1),3,1)<>"0"THEN 465 : M3$="2200DS RAMD" : VERIFY T#2,(0,65534)E3 : ERRORX=ERR 0464 E3=E3-2 : IF E3<1THEN E3=1 : GOTO 467 0465 IF STR(D3$(1),3,1)="F"THEN 470 0467 REM MAXSTORE : IF STR(H$,2,1)="7"OR STR(H$,2,1)="9"THEN T=64 : REM OTHER WIN : IF STR(H$,2,1)="1"OR STR(H$,2,1)="3"OR STR(H$,2,1)="4"OR STR(H$,2,1)="5"O R STR(H$,2,1)="6"OR STR(H$,2,1)="8"THEN T=64 0469 IF S=2OR S=3THEN 470 : E(I)=E3 : M$(I)=M3$ : D$(I)=D3$(1) : E$(I)=E3$ : I=I+1 : IF STR(M3$,1,4)="2270"AND STR(D3$(1),2,2)="60"THEN STR(D3$(1),3,1)="F" : IF M3$="850 DSDD"THEN $GIORESET#2(4501) 0470 RETURN 0490 I4=I-1 : FOR I=1TO I4 : IF R$(I)<HEX(D0)THEN 492 : SELECT #2<D$(I)> : ERRORX=ERR : GOTO 492 0491 $GIORESET#2(4501) 0492 NEXT I 0495 IF I4<=34THEN 510 : PRINT AT(15,22);"More than 100 devices mounted";AT(16,12);" FTU can D ISPLAY only 100 devices" : GOSUB '50 0500 LINPUT C$ : PRINT C$ : STOP 0510 I,I2=I4 : I6=1 : E9=0 : IF I>D2THEN I2=D2 : GOTO 540 0520 REM CHANGE PAGE : IF I4<D2THEN RETURN : IF C$=HEX(1F)THEN 522 : I6=I6+D2 : IF I6>I4THEN I6=1 : GOTO 526 0522 I6=I6-D2 : IF I6<=0THEN 524 : GOTO 526 0524 I6=MOD(I4,D2) : IF I6=0THEN I6=D2 : I6=I4-I6+1 : GOTO 526 0526 I2=I6+D2-1 : IF I2>I4THEN I2=I4 : G=2 : RETURN 0530 GOSUB 520 0540 REM This indicates page 0 : K1=0 : REM % Print table : G=I : GOSUB '35("2200 FTU (Field Test Unit)") : PRINT AT(1,0,1680);" Available Addresses Disk Model Ending Sector" 0550 FOR I=I6TO I2 : IF I2<>0THEN 560 : D$(I),M$(I)="N/A" : E(I)=0 : E$(I)=" " 0560 PRINT AT((I-I6)+2,1);HEX(06);" "; 0570 PRINTUSING 580,E$(I),D$(I),M$(I),E(I) 0580 %>- ####### ### -< >- ############ -< >- ##### -< 0590 REM PRINT AT(I-I6+1,1);">-";AT(I-I6+1,27);"-< >-";AT(I-I6+1,53);"-< >-" ;AT(I-I6+1,77);"-<" 0600 NEXT I 0610 PRINT AT(1,0);BOX(1,79);AT(2,0);BOX((I-I6)+1,79);AT(2,29);BOX((I-I6)+1,26 ) 0620 GOSUB 6250 : IF I4>0THEN 630 : PRINT HEX(07);AT(20,0,79);AT(20,20);" PROGRAM ABORTED. NO DISKS RE SPONDING " : GOSUB 6300 : IF G=1THEN 30 : GOTO 620 0630 $CLOSE : I=I6 : C1$=" " : I=G 0640 IF I4>D2AND E9<>1THEN PRINT " ";AT(22,36);" SF'15 - more dev";AT(0 ,67);"( More)"; 0650 GOSUB 6250 : PRINT AT(20,0,79);AT(20,15);"Select the address of the device to be teste d. \A0\A0\A0";AT(22,58);" SF'0 define err" 0655 GOSUB '52 : P,S3=0 : D=2 : R=20 : Y=62 : GOSUB 5460 : IF C$=HEX(00)THEN GOTO 656 : ON GGOTO 30,530,650 : ON G1GOTO 660,650,650,650,650 : GOTO 650 0656 GOSUB 5800 : GOTO 540 0660 PRINT HEX(03) : D3$(1),D3$(2)=D$ : IF D3$(3)=" "THEN D3$(3)=D3$(1) : S=2 : GOSUB '35("2200 FTU (Field Test Unit)") : GOSUB 210 : E4=E3 0670 IF X=0THEN 700 : E3$="I-" : CONVERT XTO STR(E3$,3,2),(##) : GOTO 700 0680 REM % wait to return screen : GOSUB 6310 : IF E9<>3THEN 680 : E9=0 : GOTO 510 0690 REM % START 0700 K$(1)="Error Definitions 90-99" : K$(2)="Compare Sector(s)" : K$(3)="Compare File " : K$(4)="Display a Sector" : K$(5)="Verify" : K$(6)="Read" : K$(7)="Position Head(s)" : K$(8)="Code Revs" 0710 K$(9)="Write Enable" : K$(10)="Write Lock" : K$(11)="Scratch Disk" : K$(12)="Format Disk" : K$(13)="Write" : K$(14)="Read After Write" : K$(15)="Instruction Test" : K$(16)=" " 0720 SELECT PRINT 005(80) : H1,L,C1,C2,M,M1=0 : GOSUB '35("TEST SELECTION MENU") 0730 K1=16 : IF K1/2<>ROUND((K1/2,0)THEN K1=ROUND((K1/2,0)*2 : FOR K=2TO K1 : GOSUB 740 : NEXT K : $CLOSE : GOTO 760 0732 REM % SF key select : IF K1=0THEN RETURN : GOSUB 6320 : IF G=1THEN 540 : PRINT " "; : K=VAL(C$)+1 : IF K<=15THEN 734 : PRINT HEX(070F) : Z=9 : R=R-(Z+1) : GOTO 760 0734 REM % Hilite SF selection : IF K=1THEN 738 : GOSUB 740 : PRINT AT(22,8,28) 0736 GOSUB '52 : GOSUB 6300 : PRINT AT(23,58,20); : IF G=3OR G=1THEN GOSUB 740 : IF G=1THEN 850 : IF G=3THEN 732 : IF C$<>HEX(0D)AND C$<>HEX(82)THEN 736 0738 ON KGOSUB 5800,1260,1400,1650,1810,1950,2320,1190,2420,2430,2500,2660,272 0,2850,3040 : GOTO 700 0740 IF K$(K)=" "THEN RETURN : CONVERT K-1TO C1$,(##) : Z=K : Z1=2 : IF K<=K1/2THEN 750 : Z=K-K1/2+1 : Z1=50 0750 PRINT AT(Z,Z1); : IF Z1<10AND Z<>5THEN PRINTUSING "SF ## - ##############################", C1$,K$(K); : ELSE PRINTUSING "SF ## - ###################",C1$,K$(K); : RETURN 0760 Z=9 : Z3=25 : T3=INT(S3/T2) : T4=INT((E3)/T2) : PRINT " ";AT(22,36);"SF' key listed above";AT(22,58);"SF'0 define err ";HEX(060F) : IF M3$<>"850 DSDD"THEN 770 : IF E3<26THEN T4=0 : ELSE T4=INT(((E3-26)/T2)+1) 0770 PRINT AT(Z+2,Z3-8);"Device ";D3$(1);""; : IF STR(E3$,1,2)="I-"THEN PRINT " Error = ";E3$;"" 0780 PRINT AT(Z+3,Z3-14);"Start Sector "; : IF S3>E3THEN PRINT " "; : PRINT S3;"";AT(Z+3,Z3+8);"Track ";T3;""; 0790 PRINT AT(Z+4,Z3-12);"End Sector ";E3;AT(Z+4,Z3+8);"Track ";T4;AT(Z +4,Z3+22);"Maximum =" : IF E4<E3OR E4=0THEN PRINT " " : PRINT AT(Z+4,Z3+32);E4;"" 0800 PRINT AT(Z+5,Z3-18);"Hex data pattern ";STR(W9$(),1,32);"" 0810 PRINT AT(Z+6,Z3-9);"Printer ";P9$;"";AT(Z+6,Z3+4);"(204, 215, OFF)" 0820 PRINT AT(Z+7,Z3-6);"Loop ";L$;"";AT(Z+7,Z3+2);"(N=No, T=on Test, E=on Error or test)"; 0830 PRINT AT(Z+8,Z3-6);"Mode ";M$;"";AT(Z+8,Z3+2);"(I = sequential step In , A = Alternate step)";AT(Z+9,Z3+2);"(O = sequential step Out, R = Rando m step)"; 0840 IF M$="R"THEN PRINT AT(Z+10,Z3-21);"# Random Operations ";R2;""; : ELSE PRINT AT(Z+10,Z3-21,71) : IF STR(E3$,1,2)<>"I-"THEN GOSUB 5150 0850 Z=9 : Z3=25 : REM % Device : R=Z+2 : Y=Z3 : D$=D3$(1) : P=0 : D=2 : GOSUB 5460 : X=0 : IF G=1THEN 540 : IF D3$(1)=D$THEN 870 : D3$(1),D3$(2)=D$ : E4=E3 : S=3 : GOSUB 210 : E=E3 : E3=E4 : E4=E : E3$=ALL(20) : VERIFY T#2,(1,1)E : ERRORE=1 0855 X=ERR : IF E=0OR X=0THEN 860 : E3$="I-" : CONVERT XTO STR(E3$,3,2),(##) 0860 PRINT AT(5,32,13); : REM SAVE THESE : S=G : C3$=C$ : IF X=0THEN GOSUB 5150 : G=S : C$=C3$ 0870 PRINT AT(Z+2,Z3,20);" ";D3$(1);""; : IF STR(E3$,1,2)="I-"THEN PRINT " Error = ";E3$;"" : IF E3>E4OR E4=0THEN PRINT " " : PRINT AT(Z+4,Z3+32,8);E4;" " : IF G=3OR G=2THEN 732 : ON G1GOTO 890,890,880,880,890 : GOTO 850 0880 IF M$="R"THEN 1130 : GOTO 1110 0890 REM % Start sector : R=Z+3 : Y=Z3 : GOSUB 5570 : T3=INT(S3/T2) : IF M3$="850 DSDD"AND S3>25THEN T3=INT((S3-26)/T2)+1 : IF T3>9999THEN T3=0 : PRINT AT(Z+3,Z3+14,4);" ";T3 : IF S3>E3THEN PRINT " " : PRINT AT(Z+3,Z3-1,8);S3;""; : IF G=1THEN 540 : IF G=3OR G=2THEN 732 : ON G1GOTO 900,900,850,850,900 : GOTO 890 0900 REM % Start track : R=Z+3 : Y=Z3+15 : I=T3 : I5=4 : CONVERT T3TO A2$,(####) : ERRORX=ERR : T3=0 : GOTO 930 0910 GOSUB 6360 : CONVERT A2$TO T3 : ERRORX=ERR : T3=0 : GOTO 900 0920 IF T3=ITHEN 930 : S3=T3*T2 : IF M3$="850 DSDD"AND S3<>0THEN S3=S3-26 : IF S3>E3THEN PRINT " " : ELSE PRINT " " : PRINT AT(Z+3,Z3-1,8);S3 0930 PRINT AT(Z+3,Z3+14,5);" ";T3;"" : IF G=1THEN 540 : IF G=3OR G=2THEN 732 : ON G1GOTO 940,940,890,890,940 : GOTO 900 0940 REM % End sector : R=Z+4 : Y=Z3 : GOSUB 5590 : T4=INT((E3)/T2) : IF M3$="850 DSDD"AND E3>25THEN T4=INT((E3-26)/T2)+1 : IF T4>9999THEN T4=0 : PRINT AT(Z+4,Z3+14,5);" ";T4;" " : IF E3>E4THEN PRINT " " : PRINT AT(Z+4,Z3+32,8);E4;AT(Z+4,Z3-1,8);" ";E3;""; 0950 IF S3>E3THEN PRINT " "; : ELSE PRINT " "; : PRINT AT(Z+3,Z3-1,8);S3;" "; : IF G=1THEN 540 : IF G=2OR G=3THEN 732 : ON G1GOTO 960,960,900,900,960 : GOTO 940 0960 REM % End track : R=Z+4 : Y=Z3+15 : I=T4 : I5=4 : CONVERT T4TO A2$,(####) : ERRORX=ERR : T4=0 : GOTO 990 0970 GOSUB 6360 : CONVERT A2$TO T4 : ERRORX=ERR : T4=0 : GOTO 960 0980 IF T4=ITHEN 990 : E3=(T4*T2)+T2-1 : IF M3$="850 DSDD"THEN E3=E3-26 : IF S3>E3THEN PRINT " " : ELSE PRINT " " : PRINT AT(Z+3,Z3-1,8);S3;" " : IF E3>E4THEN PRINT " " : PRINT AT(Z+4,Z3+32,8);E4 : PRINT AT(Z+4,Z3-1,8);" ";E3 0990 PRINT AT(Z+4,Z3+14,5);" ";T4;"" : IF G=1THEN 540 : IF G=3OR G=2THEN 732 : ON G1GOTO 1000,1000,940,940,1000 : GOTO 900 1000 REM % Data pattern : R=Z+5 : Y=Z3 : I5=32 : A2$=STR(W9$(),1,32) : GOSUB 6360 1010 FOR Y=1TO 32 : IF STR(A2$,Y,1)>="0"AND STR(A2$,Y,1)<="9"OR STR(A2$,Y,1)>="A"AND STR(A2$, Y,1)<="F"THEN 1040 : FOR I5=YTO 32 : IF STR(A2$,I5,1)=" "THEN 1030 : Y=32 1020 R=0 1030 NEXT I5 1040 NEXT Y : IF R=0THEN 1000 : IF G=1THEN 540 : IF STR(A2$,1,1)=" "THEN 1000 : INIT(20)W9$() : A2$=A2$&STR(A2$) : STR(W9$(),1,32)=A2$ : W9$()=W9$()&STR(W9$()) : HEXPACKW1$()FROMW9$() : PRINT HEX(06);AT(Z+5,Z3);" ";STR(W9$(),1,32);""; : IF G=2OR G=3THEN 732 : ON G1GOTO 1050,1050,960,960,1050 : GOTO 1000 1050 REM % Printer : R=Z+6 : Y=Z3 : I5=3 : A2$=P9$ : GOSUB 6360 : P9$=A2$ : IF P9$="204"OR P9$="215"OR P9$="OFF"THEN 1060 : P9$="OFF" : PRINT AT(Z+6,Z3);" ";P9$;""; 1060 PRINT AT(Z+6,Z3);" ";P9$;""; : IF G=1THEN 540 : IF G=2OR G=3THEN 732 : ON G1GOTO 1070,1070,1000,1000,1070 : GOTO 1050 1070 REM % Loop : R=Z+7 : Y=Z3 : I5=1 : A2$=L$ : GOSUB 6360 : L$=A2$ : IF L$="T"OR L$="N"OR L$="E"THEN 1080 : L$="N" 1080 PRINT AT(Z+7,Z3);" ";L$;""; : IF G=1THEN 540 : IF G=2OR G=3THEN 732 : ON G1GOTO 1110,1110,1050,1050,1110 : GOTO 1070 1110 REM % Mode : R=Z+8 : Y=Z3 : I5=1 : A2$=M$ : GOSUB 6360 : M$=A2$ : IF M$="R"OR M$="O"OR M$="I"OR M$="A"THEN 1120 : M$="I" 1120 PRINT AT(Z+8,Z3);" ";M$;""; : IF M$<>"R"THEN PRINT AT(Z+10,Z3-21,71) : ELSE PRINT AT(Z+10,Z3-21);"# Random Operations ";R2;"" : IF G=1THEN 540 : IF G=2OR G=3THEN 732 : ON G1GOTO 1130,1130,1070,1070,1130 : GOTO 1110 1130 REM % # Random Operations : IF M$<>"R"THEN 850 : R=Z+10 : Y=Z3 : I5=4 : CONVERT R2TO A2$,(####) : GOSUB 6360 : CONVERT A2$TO R2 : ERRORX=ERR : R2=1000 : GOTO 1130 1140 PRINT AT(Z+10,Z3-1,5);" ";R2;""; : IF G=1THEN 540 : IF G=2OR G=3THEN 732 : ON G1GOTO 850,850,1110,1110,850 : GOTO 1130 1180 REM % Status 1190 PRINT AT(Z+3,Z3+25,30); : B$=$PSTAT(1) : HEXUNPACKSTR(B$,10,1)TO C1$ : PRINT "OS Rev. "; : IF STR(B$,9,1)="M"THEN PRINT "MVP"; : ELSE IF STR(B$,9,1)="L"THEN PRINT "LVP"; : ELSE PRINT STR(B$,9,1); : PRINT " ";STR(C1$,1,1);".";STR(C1$,2,1) 1191 PRINT AT(Z+2,Z3+25,30);HEX(0E); : IF D3$(1)="340"THEN 1195 : GOSUB 1245 : IF STR(R$,6,3)=HEX(000000)AND X=0THEN 1200 : PRINT " ";D3$(D);"'s Status can't be determined" : GOTO 1240 1195 PRINT "Ram disk "; : GOTO 1240 1200 IF STR(H$,1,1)<>"2"THEN 1223 : IF STR(H$,2,1)="0"THEN 1228 1220 PRINT "2275"; : GOTO 1230 1223 IF STR(H$,,1)<>"3"THEN 1228 : PRINT "2200DS"; : GOTO 1230 1228 IF STR(H$,,2)="20"THEN PRINT TAB(2);"SVP DPU" : IF STR(H$,,2)="19"THEN PRINT "Quantum"; : IF STR(H$,,2)="18"THEN PRINT TAB(2);"LVP DPU"; : IF STR(H$,,2)="10"THEN PRINT "Phoenix"; 1230 PRINT HEX(0F);" has Rev. ";HEX(0E);STR(H$,4,2);HEX(0F);" proms." 1240 GOSUB 740 : RETURN CLEAR : GOTO 850 1245 REM Get the stats : GOSUB 7060 : X=0 : $GIOREADSTATUS#2(0600070070A0400288D070406A106816400087051A00C340,R$)R$;S TR(H$,1,VAL(STR(R$,5,1))) : ERRORX=ERR 1246 RETURN 1250 REM % Sector(s) compare 1260 H$="DISK COMPARE ROUTINE" : GOSUB '35(H$) : GOSUB '52 : D=3 : Y1=S3 1270 PRINT AT(11,20);" 2nd device you wish to work with?" : R=11 : Y=55 : D$=D3$(D) 1280 GOSUB 5460 : IF G=1THEN RETURN : D3$(D)=D$ : S=S3 : E=E3 1290 PRINT AT(12,22);"Starting sector on this device?"; 1300 REM Select sector : R=12 : Y=55 : CONVERT Y1TO A2$,(#####) : I5=5 : GOSUB 6360 : IF G=1THEN RETURN : CONVERT A2$TO Y1 : ERRORX=ERR : GOTO 5590 1310 IF G1=2THEN 1270 1320 PRINT AT(11,1,240);AT(22,8,50);AT(13,25);"Comparing ";D3$(1);" to " ;D3$(3);AT(11,28);"Sector "; 1330 PRINT AT(11,36); : G=4 : GOSUB '39(S) : GOSUB '40(2,S) : IF G=1THEN RETURN : IF X<>0THEN 1360 : W$()=R1$() 1340 G=4 : GOSUB '39(Y1) : GOSUB '40(3,Y1) : IF G=1THEN RETURN : IF X<>0THEN 1360 1350 IF R1$()=W$()THEN 1360 : L=1 : PRINT AT(16,27);" The sectors are not equal." : GOSUB '60 : IF L$="T"THEN 1360 : IF L$="E"THEN 1330 : GOSUB '50 : IF G=1THEN RETURN : PRINT AT(16,27,26) 1360 IF S=ETHEN 1370 : GOSUB 6310 : IF G=1THEN RETURN : S=S+1 : Y1=Y1+1 : GOTO 1330 1370 PRINT AT(12,46) : S=S3 : IF L$="N"THEN 5340 : GOSUB '61 : GOTO 1330 1380 REM % File compare 1390 F$(1)="? ?? ?" 1400 Y,Y1,Y2,Y3=0 : H$="DISK FILE COMPARE ROUTINE" : GOSUB '35(H$) : IF STR(F$(2),1,1)=" "OR STR(F$(2),1,1)="\A0"THEN F$(2)=F$(1) 1410 PRINT AT(10,12);" Enter the file name for device ";D3$(1);" ";F$(1);AT(11,12);"2nd platter or surface you wish to work with ";D3 $(3);AT(12,12);" Enter the file name for the second device ";F$(2);A T(22,36);"SF'2 to continue" 1420 Y=58 : R=10 : I5=8 : A2$=F$(1) : GOSUB 6360 : IF G=1THEN RETURN : F$(1)=A2$ : PRINT AT(R,Y,8);" ";F$(1);""; : IF G=3AND C$=HEX(02)THEN 1470 : ON G1GOTO 1430,1430,1450,1450,1430 : GOTO 1420 1430 D=3 : R=11 : Y=58 : D$=D3$(D) 1440 GOSUB 5460 : IF G=1THEN RETURN : D3$(D)=D$ : PRINT AT(R,Y);" ";D3$(D);""; : IF G=3AND C$=HEX(02)THEN 1470 : ON G1GOTO 1450,1450,1420,1420,1450 : GOTO 1430 1450 IF STR(F$(2),1,1)=" "OR STR(F$(2),1,1)="\A0"THEN F$(2)=F$(1) : Y=58 : R=12 : I5=8 : A2$=F$(2) : GOSUB 6360 : IF G=1THEN RETURN : F$(2)=A2$ : PRINT AT(R,Y,8);" ";F$(2);"" : IF G=3AND C$=HEX(02)THEN 1470 : ON G1GOTO 1420,1420,1430,1430,1420 : GOTO 1450 1460 F$(2)=A2$ 1470 ON POS("\A0 "=STR(F$(1),1,1))GOTO 1390,1390 : ON POS("\A0 "=STR(F$(2),1,1))GOTO 1390,1390 : D1=0 : PRINT AT(4,0,);"Searching for file name ";HEX(0E);F$(1);HEX(0F);" on ";HE X(0E);D3$(1) 1480 LIMITS T#2,STR(F$(1)),Y,Y1,U,D1 : ERRORX=ERR : GOSUB '70(X,2) : IF G=1THEN RETURN 1490 IF D1<>0THEN 1500 : PRINT HEX(07);" ";AT(4,0);F$(1);HEX(0F);" is not on disk ";HEX(0E);D3 $(1);" " : PRINT "Do you wish to re-input the file name? ( 'Y' or 'N' )"; : C$="Y" : LINPUT HEX(0E)C$ : IF C$="Y"THEN 1400 : RETURN 1500 PRINT AT(4,0);"File name ";HEX(0E);F$(1);HEX(0F);" located on ";HEX(0E);D 3$(1);" " : PRINT "First valid data sector = ";HEX(0E);Y : PRINT "Last valid data sector = ";HEX(0E);Y+U-1 : PRINT "Total number of sectors = ";HEX(0E);U 1510 Y1=Y+U-1 : D1=0 : PRINT AT(9,0,);"Searching for file name ";HEX(0E);F$(2);HEX(0F);" on ";HE X(0E);D3$(3) 1520 LIMITS T#3,STR(F$(2)),Y2,Y3,U1,D1 : ERRORX=ERR : GOSUB '70(X,3) 1530 IF D1<>0THEN 1540 : PRINT HEX(07);" ";AT(9,0);F$(2);HEX(0F);" is not on disk ";HEX(0E);D3 $(3);" " : PRINT "Do you wish to re-input the file name? ( 'Y' or 'N' )"; : C$="Y" : LINPUT HEX(0E)C$ : IF C$="Y"THEN 1400 : RETURN 1540 PRINT AT(9,0);"File name ";HEX(0E);F$(2);HEX(0F);" located on ";HEX(0E);D 3$(3);" " : PRINT "First valid data sector = ";HEX(0E);Y2 : PRINT "Last valid data sector = ";HEX(0E);Y2+U1-1 : PRINT "Total number of sectors = ";HEX(0E);U1 : GOSUB 6250 1550 Y3=Y2+U1-1 : R=Y : I=Y2 : IF U1=UTHEN 1560 : PRINT AT(7,30);" <- ERROR";AT(12,30);"<- ERROR"; : L=1 : IF L$="N"THEN GOSUB '50 : IF G=1THEN RETURN : IF L$="Y"THEN GOSUB '60 1560 PRINT AT(14,0);"Comparing sector on ";HEX(0E);D3$(1);HEX(0F);" to sector on ";HEX(0E);D3$(3) : Y=R : Y2=I 1570 PRINT AT(14,17); : G=4 : GOSUB '39(Y) : GOSUB '40(2,Y) : W$()=R1$() : IF G=1THEN RETURN 1580 PRINT AT(14,42); : G=4 : GOSUB '39(Y2) : GOSUB '40(3,Y2) : IF G=1THEN RETURN 1590 IF R1$()=W$()THEN 1610 : L=1 : GOSUB '60 : IF L$="N"OR L$="T"THEN 1600 : GOTO 1570 1600 PRINT AT(16,27);HEX(07);" The sectors are not equal." : IF L$="T"THEN 1610 : GOSUB '50 : PRINT AT(16,27,26) : IF G=1THEN RETURN 1610 IF Y=Y1THEN 1620 : Y=Y+1 : Y2=Y2+1 : GOTO 1570 1620 IF L$="N"THEN 1630 : GOSUB '61 : GOTO 1560 1630 PRINT AT(1,1,1680);AT(14,17);BOX(-1,-6);AT(14,42);BOX(-1,-6) : GOTO 5340 1640 REM % Display sector 1650 H$="DISPLAY A SECTOR ROUTINE" : GOSUB '35(H$) : S=S3 : E=1 : IF L$="N"THEN E=0 : IF M$="O"THEN S=E3 1660 PRINT AT(3,4);"0000";AT(4,4);"0032";AT(5,4);"0064";AT(6,4);"0096";AT(7,4) ;"0128";AT(8,4);"0160";AT(9,4);"0192";AT(10,4);"0224";AT(12,4);"0000";AT( 13,4);"0064";AT(14,4);"0128";AT(15,4);"0192" 1670 PRINT AT(20,4);"Disk: ";D3$(1);AT(20,21);"Sector: "; : GOSUB '39(S) : PRINT " ";AT(18,70,10);"NOT READY" 1680 L1$=L$ : L$="T" : GOSUB '40(2,S) : L$=L1$ : IF G=1THEN RETURN : IF X=0THEN 1690 : PRINT AT(21,52,27);" ERROR I-";X;"on sector";S; : IF E=0THEN 1740 : IF M$="O"AND S=S3THEN 1740 : IF S=E3AND M$<>"O"THEN 1740 : GOSUB '50 : IF G=1THEN RETURN : PRINT AT(22,8,71); : GOTO 1760 1690 PRINT AT(3,12,68);HEX(06); : FOR R=1TO 8 : FOR C=1TO 32 : C$=STR(R1$(),C+32*(R-1),1) : PRINT HEXOF(C$); : NEXT C : PRINT AT(3+R,12,68); : NEXT R 1700 PRINT AT(12,12,68);HEX(06); : FOR R=1TO 4 : FOR C=1TO 64 : C$=STR(R1$(),C+64*(R-1),1) : IF C$>HEX(0F)THEN 1710 : C$=HEX(80) : PRINT HEX(0202020F); 1710 PRINT C$;HEX(0202000F); : NEXT C : PRINT AT(12+R,12,68); : NEXT R 1720 PRINT AT(18,70,10);HEX(060E);"READY" : GOSUB 6250 1730 IF L$<>"N"AND E<>0THEN 1760 1740 E=0 : PRINT AT(22,8);HEX(06);" RETURN/SF'7 for next sector";AT(22,40);" BACK SPACE/SF'4 for previous sector"; : C$=" " : KEYIN C$,,1750 : PRINT AT(22,8,71) : IF C$=HEX(0D)THEN 1790 : IF C$=HEX(08)THEN 1770 : GOSUB 6290 : IF G=1THEN RETURN : GOTO 1730 1750 PRINT AT(22,8,79) : IF C$=HEX(07)THEN 1790 : IF C$=HEX(04)THEN 1770 : GOSUB 6320 : IF G=1THEN RETURN : GOTO 1730 1760 IF M$<>"O"THEN 1780 : IF S=S3THEN 1740 1770 IF S=0THEN 1740 : S=S-1 : GOTO 1670 1780 IF S=E3THEN 1740 1790 S=S+1 : GOTO 1670 1800 REM % Verify sequential 1810 D=2 : C1$="Y" : IF M$="A"THEN 2010 : L=0 : IF M$="R"THEN H$="RANDOM VERIFY ROUTINE" : ELSE H$="SEQUENTIAL VERIFY ROUTINE" : GOSUB '35(H$) : T(3)=90000 1820 S=S3 : E=E3 : GOSUB 6250 : IF M$="O"THEN 1850 : IF M$="R"THEN 1860 1830 IF C1$="N"THEN 1840 : PRINT AT(11,15);"Do you want to verify fast? 'Y' or 'N'"; : GOSUB 6300 : IF G=1THEN RETURN : C1$="N" : PRINT AT(11,0,79) : IF C$="Y"THEN 1910 1840 FOR Q=STO E : GOSUB 1870 : IF G=1THEN Q=E : NEXT Q : GOTO 1900 1850 FOR Q=ETO SSTEP -1 : GOSUB 1870 : IF G=1THEN Q=S : NEXT Q : GOTO 1900 1860 FOR S=1TO R2 : Q=INT(RND(1)*(E3-S3))+S3 : GOSUB 1870 : IF G=1THEN S=R2 : NEXT S : GOTO 1900 1870 PRINT AT(13,28);"Device: ";D3$(1);AT(11,18);"Verifying Sector: "; : GOSUB '39(Q) 1880 L=0 : VERIFY T#2,(Q,Q)L : GOSUB 6310 : IF G=1OR L=0THEN 1890 : IF C2=0THEN PRINT HEX(07) : PRINT HEX(06);AT(21,54);" ERROR in sector ";Q$ : E$="VERIFY " : IF P9$<>"OFF"THEN 5700 : IF L$="N"AND G<>1THEN GOSUB 6240 : GOSUB 5260 1890 IF L=0OR L$="T"OR L$="N"OR G=1THEN RETURN : GOSUB '60 : GOTO 1880 1900 IF G=1THEN RETURN : IF L$="N"THEN 5340 : GOSUB '61 : GOTO 1820 1910 PRINT AT(11,37,41);AT(13,28);"Device: ";D3$(1);AT(11,18);"Verifyi ng Sectors: ";S;"to";E;AT(22,8,) 1920 L=0 : VERIFY T#2,(S,E)L : GOSUB 6310 : IF G=1OR L=0THEN 1930 : IF C2=0THEN PRINT HEX(07) : GOSUB '60 : Q=L-1 : PRINT HEX(06);AT(21,54);" ERROR in sector ";L-1 : E$="VERIFY " : IF P9$<>"OFF"THEN GOSUB 5700 : IF L$<>"N"OR G=1THEN 1930 : GOSUB 6250 : GOSUB '50 1930 IF G=1THEN RETURN : IF L=0AND L$="N"THEN 5340 : IF L$="E"THEN GOTO 1910 : S=L : IF S<=EAND L<>0THEN GOTO 1910 : GOSUB '61 : S=S3 : GOTO 1910 1940 REM % Read sequential 1950 D=2 : IF M$="A"THEN GOTO 2070 : IF M$="R"THEN H$="RANDOM READ ROUTINE" : ELSE H$="SEQUENTIAL READ ROUTINE" : GOSUB '35(H$) : T(3)=90000 1960 IF M$="O"THEN 1970 : IF M$="R"THEN 1980 : FOR Q=S3TO E3 : GOSUB 2160 : IF G=1THEN Q=E3 : NEXT Q : GOTO 1990 1970 FOR Q=E3TO S3STEP -1 : GOSUB 2160 : IF G=1THEN Q=S3 : NEXT Q : GOTO 1990 1980 FOR I=1TO R2 : Q=INT(RND(1)*(E3-S3))+S3 : GOSUB 2160 : IF G=1THEN I=R2 : NEXT I : GOTO 1990 1990 IF G=1THEN RETURN : IF L$="N"THEN 5340 : GOSUB '61 : GOTO 1960 2000 REM % Verify Alternate 2010 L=0 : H$="ALTERNATING VERIFY ROUTINE" : GOSUB '35(H$) : T(3)=90000 2020 M=E3-S3 : FOR I=0TO M : Q=S3+I : GOSUB 1860 : IF S3+I=E3-ITHEN 2040 2030 Q=E3-I : GOSUB 1860 : IF G=1THEN I=M 2040 NEXT I : IF G=1THEN RETURN : IF L$="N"THEN 2050 : GOSUB '61 : GOTO 2020 2050 GOTO 5340 2060 REM % Read alternate 2070 D=2 : H$="ALTERNATING READ ROUTINE" : GOSUB '35(H$) : T(3)=90000 2080 M=E3-S3 : FOR I=0TO M 2090 Q=S3+I : GOSUB 2160 : IF G=1THEN 2110 2100 Q=E3-I : GOSUB 2160 2110 IF G=1THEN RETURN : IF S3+I>E3-ITHEN I=M 2120 NEXT I 2130 IF G=1THEN RETURN : IF L$="N"THEN 2140 : GOSUB '61 : GOTO 2080 2140 IF G=1THEN RETURN : PRINT AT(4,0,30);HEX(0E); 2150 GOTO 5340 2160 PRINT AT(13,28);"Device: ";D3$(1);AT(11,20);"Reading Sector: "; : GOSUB '39(Q) 2170 GOSUB '40(2,Q) : IF G=1OR X=0OR L$="N"OR L$="T"THEN 2180 : GOSUB '60 : GOTO 2170 2180 IF G=1THEN RETURN : IF X<>0THEN 2300 : IF R1<>0THEN 2190 : IF STR(W1$(),1,6)=STR(R1$(),1,6)AND STR(W1$(),8,249)=STR(R1$(),8,249)THEN RETURN 2190 IF R1$()=W1$()THEN RETURN 2200 GOSUB '60 : PRINT AT(15,10);" ERROR Data read from sec. ";Q$;" does not equ al hex pattern"; : E$="COMPARE" : IF P9$<>"OFF"THEN GOSUB 5700 : IF L$="N"THEN 2220 2210 L=3 : GOTO 2300 2220 L=3 2230 FOR B=1TO 256 : IF STR(R1$(),B,1)=STR(W1$(),B,1)THEN 2290 : IF R1=0AND B=7AND STR(R1$(),7,1)=HEX(FF)THEN 2290 : PRINT AT(17,18);HEX(06);"Read byte is hex(";HEX(0E);HEXOF(STR(R1$(),B,1)) ;HEX(0F);")";AT(18,14);"Expected byte is hex(";HEX(0E);HEXOF(STR(W1$(),B, 1));HEX(0F);")" 2240 W$()=R1$() : GOSUB 2270 : N1$=C9$ : PRINT AT(17,38);", in binary is ";N1$ : W$()=W1$() : GOSUB 2270 : PRINT AT(18,38);", in binary is ";C9$ : PRINT AT(19,17);HEX(07);"Byte";HEX(0E);B;HEX(0F);"bits not equal (<>) " : FOR I1=1TO 8 : IF STR(N1$,I1,1)=STR(C9$,I1,1)THEN 2250 : PRINT AT(19,52+I1,8);HEX(0E);"^"; 2250 NEXT I1 2260 C$=" " : PRINT AT(22,8,50);HEX(06);" CTNUE for next sector"; : GOSUB '52 : GOSUB 6300 : IF G=1THEN 2300 : IF C$=HEX(0D)OR C$=HEX(82)THEN 2290 : IF C$<>HEX(84)THEN 2260 : PRINT AT(15,0,400);AT(22,8,60) 2270 C9$=ALL(30) : C$=HEX(01) : FOR I1=1TO 8 : ROTATEC(C$,-1) : L1$=STR(W$(),B,1)AND C$ 2280 IF L1$<>HEX(00)THEN STR(C9$,I1,1)=HEX(31) : NEXT I1 : GOTO 2300 2290 IF B<>256THEN GOSUB '60 : NEXT B 2300 IF L$="N"OR L$="T"THEN RETURN : GOSUB '60 : GOTO 2170 2310 REM % Position heads 2320 L=0 : D=2 : Q=S3 : H$="HEAD POSITIONING ROUTINE" : GOSUB '35(H$) : T(3)=90000 2330 CONVERT (INT(Q/T2))TO A2$,(####) : PRINT AT(13,29);"Track ";HEX(08);BOX(1,5);" ";A2$;AT(11,12);"Head s loaded on sector "; : GOSUB '39(Q) 2340 PRINT AT(22,8);HEX(06);" RETURN/SF'7 for next sector ";AT(22,40);" BACK SPACE/SF'4 for previous sector"; 2350 VERIFY T#D,(Q,Q)L : ERRORL=ERR 2360 C$=" " : KEYIN C$,2370,2380 2370 IF C$=HEX(0D)THEN 2390 : IF C$=HEX(08)THEN 2400 : GOSUB 6290 : IF G=1THEN RETURN : GOTO 2350 2380 IF C$=HEX(07)THEN 2390 : IF C$=HEX(04)THEN 2400 : GOSUB 6320 : IF G=1THEN RETURN : GOTO 2350 2390 Q=Q+T2 : GOTO 2330 2400 IF Q<T2THEN 2350 : Q=Q-T2 : GOTO 2330 2410 REM % Enable/Disable 2420 E$="ENABLING" : GOTO 2440 2430 E$="LOCKING" 2440 D=2 : T(3)=90000 : PRINT AT(5,32,13);E$; 2450 GOSUB '40(2,0) : IF G=1THEN RETURN : IF X<>0THEN 2470 : IF STR(H$,12,1)="L"AND STR(R1$(),7,1)<>HEX(FF)THEN 5340 : IF STR(H$,12,1)="E"THEN STR(R1$(),7,1)=HEX(FF) : ELSE STR(R1$(),7,1)=HEX(00) : GOSUB '41(2,0,R1$()) : IF G=1OR X=0THEN 2460 : GOTO 2470 2460 REM GO BYE BYE : GOSUB 740 : IF STR(E3$,1,2)<>"I-"THEN GOSUB 5150 : GOTO 850 2470 H$="DISK WRITE ENABLE/LOCK ROUTINE" : GOSUB '35(H$) : PRINT AT(12,28,50);"Error ";E$;" disk ";D3$(1);HEX(0F) : PRINT AT(13,18);"Do you want to Format this disk? ('Y' OR 'N')"; : GOSUB 6300 : IF C$="Y"THEN 2660 : IF C$<>"N"THEN 2470 : RETURN 2490 REM % Scratch 2500 D=2 : H$="DISK SCRATCH ROUTINE" : GOSUB '35(H$) : T(3)=90000 : GOSUB '34(0) : IF G=1THEN RETURN 2510 A2$="00024" : IF E3>52606THEN A2$="00050" : CONVERT E3TO B$,(#####) : PRINT AT(4,0,) 2520 PRINT AT(12,7);"How many sectors do you wish to dedicate to catalog index area?";AT(22,36);" RETURN/RUN to continue"; : R=12 : Y=72 : I5=5 : GOSUB 6360 : IF G=1THEN RETURN : ON G1GOTO 2530,2520,2520,2520,2520 2530 CONVERT A2$TO U : ERRORGOTO 2520 2540 IF U<1THEN 2520 : PRINT AT(13,7);"How many sectors do you wish to dedicate to catalog area? "; : R=13 : Y=72 : I5=5 : A2$=B$ : GOSUB 6360 : IF G=1THEN RETURN : ON G1GOTO 2550,2540,2540,2540,2540 2550 CONVERT A2$TO U1 : ERRORGOTO 2540 2560 IF U>U1THEN 2520 2570 PRINT HEX(06);AT(4,0,);" Device address = \A0";HEX(0E);D3$(1);"\A0";HEX (0F);AT(5,0);"Last index sector = ";HEX(0E);U-1;HEX(0F);AT(6,0);" Ca talog end = ";HEX(0E);U1;""; 2580 PRINT AT(12,25,220);" SCRATCHING"; : SCRATCH DISK T#2,LS=U,END =U1 : ERRORX=ERR : H$="SCRAT" : GOSUB 6250 : GOSUB '70(X,2) : GOTO 2620 2590 PRINT AT(12,25);"Verifying disk scratch on ";HEX(0E);D3$(1) : INIT(00)W2$() : STR(W2$(),1,2),STR(W2$(),3,2)=BIN(U,2) : STR(W2$(),5,2)=BIN(U1+1,2) 2600 GOSUB '40(2,0) : IF G=1THEN RETURN : IF X<>0THEN 2620 2610 GOSUB 6250 : IF R1$()=W2$()THEN 2630 2620 IF L$<>"N"THEN 2640 : PRINT HEX(0706);AT(12,25,220);"Disk did not scratch properly.";AT(13,25); "Key return to re-scratch"; : GOSUB '50 : IF G=1THEN RETURN : GOTO 2580 2630 GOSUB 2700 : IF X=0THEN 5340 2640 GOSUB '60 : GOSUB 6310 : IF G=1THEN RETURN 2650 IF L$="N"THEN 5340 : GOSUB '61 : GOTO 2580 2660 REM % Format disk : H$="DISK FORMAT ROUTINE" : G1=9 : GOSUB '35(H$) 2670 GOSUB '34(0) : IF G=1THEN RETURN 2680 GOSUB 5620 : IF G=1OR C$=HEX(84)THEN RETURN 2690 PRINT AT(22,1,79) : GOSUB 6250 : GOSUB 2700 : IF X<>0THEN GOSUB '60 : GOTO 5340 2700 REM Rewrite write enable : GOSUB '40(2,0) : STR(R1$(),7,1)=HEX(FF) : GOSUB '41(2,0,R1$()) : RETURN 2710 REM % Write sequential 2720 IF M$="A"THEN 2920 : I1=1 : IF M$="R"THEN H$="RANDOM WRITE ROUTINE" : ELSE H$="SEQUENTIAL WRITE ROUTINE" : GOSUB '35(H$) : T(3)=90000 : GOSUB '34(0) : IF G=1THEN RETURN 2730 PRINT AT(8,0,80) 2740 IF M$="R"THEN 2760 : IF M$="O"THEN 2750 : FOR Q=S3TO E3 : GOSUB 2770 : IF G=1THEN Q=E3 : NEXT Q : GOTO 2830 2750 FOR Q=E3TO S3STEP -1 : GOSUB 2770 : IF G=1THEN Q=S3 : NEXT Q : GOTO 2830 2760 FOR S=1TO R2 : Q=INT(RND(1)*(E3-S3))+S3 : GOSUB 2770 : IF G=1OR C$=HEX(0D)THEN S=R2 : NEXT S : GOTO 2830 2770 PRINT AT(13,28);"Device: ";D3$(1);AT(11,20);"Writing Sector: "; : GOSUB '39(Q) : IF R3$<>HEX(D0)OR I1<>1OR M$<>"I"THEN 2790 2780 GOSUB '200(D) : IF X=0THEN GOTO 2790 : GOSUB '70 : RETURN 2790 GOSUB 6310 : IF G=1THEN RETURN 2800 GOSUB '41(2,Q,W1$()) : IF I1<>-1THEN I1=I1+1 : IF X=0OR L$="T"OR L$="N"THEN 2810 : IF R3$=HEX(D0)AND C2=0AND M$="I"THEN GOSUB '201 : GOSUB '60 : GOTO 2790 2810 IF M$<>"I"OR R3$=HEX(C0)OR I1<8OR I1=-1THEN 2820 : I1=1 : GOSUB '201(D) 2820 RETURN 2830 IF I1<>0AND R3$=HEX(D0)THEN GOSUB '201(D) : IF G=1THEN RETURN : IF L$="N"THEN 5340 : GOSUB '61 : GOTO 2730 2840 REM % Read after write sequential 2850 I1=-1 : IF M$="A"THEN 2980 : R1=0 : H$="SEQUENTIAL READ AFTER WRITE ROUTINE" : IF M$="R"THEN H$="RANDOM READ AFTER WRITE ROUTINE" 2860 GOSUB '35(H$) : T(3)=90000 : D=2 : GOSUB '34(0) : IF G=1THEN RETURN 2870 IF M$="O"THEN 2880 : IF M$="R"THEN 2890 : FOR Q=S3TO E3 : GOSUB 2770 : IF G=1THEN RETURN : GOSUB 2160 : IF G=1THEN RETURN : NEXT Q : GOTO 2900 2880 FOR Q=E3TO S3STEP -1 : GOSUB 2770 : IF G=1THEN RETURN : GOSUB 2160 : IF G=1THEN RETURN : NEXT Q : GOTO 2900 2890 FOR I=1TO R2 : Q=INT(RND(1)*(E3-S3))+S3 : GOSUB 2770 : IF G=1THEN RETURN : GOSUB 2160 : IF G=1THEN RETURN : NEXT I : GOTO 2900 2900 IF L$="N"THEN 5340 : GOSUB '61 : GOTO 2870 2910 REM % Write alternate 2920 I1=-1 : H$="ALTERNATING WRITE ROUTINE" : GOSUB '35(H$) : T(3)=90000 : GOSUB '34(0) : IF G=1THEN RETURN 2930 PRINT AT(8,0,80) : M=E3-S3 : FOR I=0TO M 2940 Q=S3+I : GOSUB 2770 : IF G=1THEN RETURN 2950 Q=E3-I : GOSUB 2770 : IF G=1THEN RETURN : IF S3+I>E3-ITHEN I=M 2960 NEXT I : IF L$="N"THEN 5340 : GOSUB '61 : GOTO 2930 2970 REM % Read after write alternate 2980 H$="ALTERNATING READ AFTER WRITE ROUTINE" : GOSUB '35(H$) : T(3)=90000 : D=2 : GOSUB '34(0) : IF G=1THEN RETURN 2990 M=E3-S3 : FOR I=0TO M 3000 Q=S3+I : GOSUB 2770 : IF G=1THEN RETURN : GOSUB 2160 : IF G=1THEN RETURN 3010 Q=E3-I : GOSUB 2770 : IF G=1THEN RETURN : GOSUB 2160 : IF G=1THEN RETURN : IF S3+I>E3-ITHEN I=M 3020 NEXT I : IF L$="N"THEN 5340 : GOSUB '61 : GOTO 2990 3030 REM % INSTRUCTION EXERCISER 3040 G1=0 : D=2 : Y2$="DATA2" : Y3$="DATA3" : A3$()=ALL("1") : A4$()=ALL("2") : X(1)=10/3 : X(2)=X(1) : Q0$=ALL("4") 3050 H$="DISK INSTRUCTION EXERCISER" : GOSUB '35(H$) : I1=-1 : GOSUB '34(0) : IF G=1THEN RETURN 3060 GOSUB 6250 : PRINT " ";AT(10,7);"WARNING: \C1\CC\CC resident data will be DESTRO YED by this exercise " 3065 IF E3-S3<=15THEN PRINT AT(12,10);"Start sector must be at least 17 less t han the end sector" : GOSUB '50 : IF G=1OR E3-S3<=15THEN RETURN : PRINT AT(10,0,240);AT(22,8,42) 3070 K$(1)="DATA SAVE DA" 3080 K$(2)="DATA LOAD DA" 3090 K$(3)="DATA SAVE BA" 3100 K$(4)="DATA LOAD BA" 3110 K$(5)="SCRATCH DISK" 3120 K$(6)="MOVE END" 3130 K$(7)="LIMITS" 3140 K$(8)="VERIFY" 3150 K$(9)="SCRATCH FILES" 3160 K$(10)="DATASAVE DC OPEN" 3170 K$(11)="DATASAVE DC CLOSE" 3180 K$(12)="DATA LOAD DC OPEN" 3190 K$(13)="DSKIP" 3200 K$(14)="DBACKSPACE" 3210 K$(15)="DATALOAD DC" 3220 FOR I=1TO 15 : PRINT AT(I+2,30);K$(I) : NEXT I 3230 C=0 : GOSUB '32(C) : GOTO 3240 3240 REM DATA SAVE DA : E=0 3250 GOSUB 6310 : IF G=1THEN 4830 : DATA SAVE DA T#1,(S3,S)S3,A3$(),X(),A4$(),X1(),"ABC",Q0$ : ERRORX=ERR : GOSUB '64 3260 IF S<>S3+1THEN 3340 : DATA SAVE DA T#1,(S,S)END : ERRORX=ERR : GOSUB '64 3270 DATA SAVE DA T$#2,(S,C1$)S,A3$(),X(),A4$(),X1(),"ABC",Q0$ : ERRORX=ERR : GOSUB '64 3280 S=S3+3 : IF VAL(C1$,2)<>STHEN 3340 : IF G=1THEN 3250 : DATA SAVE DA T$#2,(S,C1$)END : ERRORX=ERR : GOSUB '64 3290 GOSUB 6310 : IF G=1THEN 4830 : S=S3+4 : DATA SAVE DA T$#5,(C1$,C1$)S,A3$(),X(),A4$(),X1(),"ABC",Q0$ : ERRORX=ERR : GOSUB '64 3300 IF VAL(C1$,2)<>S+1THEN 3340 : IF G=1THEN 3250 : DATA SAVE DA T$#5,(C1$,C1$)END : ERRORX=ERR : GOSUB '64 3310 S=S3+6 : DATA SAVE DA T$#2,(C1$,S)S,A3$(),X(),A4$(),X1(),"ABC",Q0$ : ERRORX=ERR : GOSUB '64 3320 IF VAL(C1$,2)+1<>STHEN 3340 : C1$=BIN(S,2) : DATA SAVE DA T#2,(C1$,S)END : ERRORX=ERR : GOSUB '64 3330 GOTO 3350 3340 IF C2=0THEN GOSUB 5070 3350 IF C2=0OR L$<>"E"THEN 3360 : GOSUB '61 : GOTO 3230 3360 C=1 : GOSUB '32(C) : % 3370 REM DATA LOAD DA : E=0 3380 GOSUB 6310 : IF G=1THEN 4830 : DATA LOAD DA T#2,(S3,S)I,A3$(),X(),A4$(),X1(),H$,Q0$ : ERRORX=ERR : GOSUB '64 3390 IF I<>S3THEN 3470 3400 S=S3+2 : DATA LOAD DA T#1,(S,C1$)I,A3$(),X(),A4$(),X1(),H$,Q0$ : ERRORX=ERR : GOSUB '64 3410 IF I<>STHEN 3470 3420 GOSUB 6310 : IF G=1THEN 4830 : C1$=BIN(S3+4,2) : DATA LOAD DA T#5,(C1$,C1$)I,A3$(),X(),A4$(),X1(),H$,Q0$ : ERRORX=ERR : GOSUB '64 3430 IF I<>VAL(C1$,2)-1THEN 3470 3440 C1$=BIN(S3+6,2) : DATA LOAD DA T#4,(C1$,S)I,A3$(),X(),A4$(),X1(),H$,Q0$ : ERRORX=ERR : GOSUB '64 3450 IF I<>S-1THEN 3470 3460 GOTO 3490 3470 IF C2=0THEN GOSUB 5070 3480 IF C2=0OR L$<>"E"THEN 3490 : GOSUB '61 : GOTO 3360 3490 C=2 : GOSUB '32(C) : % 3500 REM DATA SAVE BA : E=0 3510 CONVERT S3TO STR(C$(1),1,2),(##) : ERRORX=ERR 3520 GOSUB 6310 : IF G=1THEN 4830 3530 DATA SAVE BA T#2,(S3,S)C$() : ERRORX=ERR : GOSUB '64 3540 IF S<>S3+1THEN 3640 : CONVERT STO STR(C$(1),1,2),(##) : ERRORX=ERR 3550 DATA SAVE BA T$#2,(S,C1$)C$() : ERRORX=ERR : GOSUB '64 3560 IF VAL(C1$,2)<>S+1THEN 3640 : IF G=1THEN 3510 3570 GOSUB 6310 : IF G=1THEN 4830 : CONVERT S3+2TO STR(C$(1),1,2),(##) : ERRORX=ERR 3580 DATA SAVE BA T$#2,(C1$,C1$)C$() : ERRORX=ERR : GOSUB '64 3590 IF VAL(C1$,2)<>S3+3THEN 3640 : IF G=1THEN 3510 3600 CONVERT S3+3TO STR(C$(1),1,2),(##) : ERRORX=ERR 3610 DATA SAVE BA T#2,(C1$,V0)C$() : ERRORX=ERR : GOSUB '64 3620 IF V0<>S3+4THEN 3640 3630 GOTO 3660 3640 IF C2=0THEN GOSUB 5070 3650 IF C2=0OR L$<>"E"THEN 3660 : GOSUB '61 : GOTO 3490 3660 C=3 : GOSUB '32(C) : % 3670 REM DATA LOAD BA : E=0 : GOSUB '47(1,2,S3) : GOSUB '47(4,1,S3+1) : GOSUB '47(5,3,S3+2) : GOSUB '47(4,4,S3+3) 3680 IF C2=0OR L$<>"E"THEN 3690 : GOSUB '61 : GOTO 3660 3690 C=4 : GOSUB '32(C) : GOTO 3820 : % 3700 DEFFN'47(F,T,S) 3710 GOSUB 6310 : IF G=1THEN 3720 : C1$=BIN(S,2) : ON TGOTO 3730,3760,3780,3800 : GOTO 5090 3720 RETURN CLEAR : GOTO 4830 3730 DATA LOAD BA T#F,(S,V2)C$() : ERRORX=ERR : GOSUB '64 3740 CONVERT STR(C$(1),1,2)TO V0 : ERRORX=ERR 3750 IF V2<>V0+1THEN 5070 : RETURN 3760 DATA LOAD BA T#1,(S,C1$)C$() : ERRORX=ERR : GOSUB '64 3770 V2=VAL(C1$,2) : GOTO 3740 3780 DATA LOAD BA T#F,(C1$,C1$)C$() : ERRORX=ERR : GOSUB '64 3790 GOTO 3770 3800 DATA LOAD BA T#F,(C1$,V2)C$() : ERRORX=ERR : GOSUB '64 3810 GOTO 3740 : % 3820 REM SCRATCH DISK : E=0 3830 GOSUB 6310 : IF G=1THEN 4830 : SCRATCH DISK T#D,LS=2,END =E3-1 : ERRORX=ERR : GOSUB '64 3840 GOSUB '44(2,2,E3-1) : IF G=1THEN 4830 : GOSUB '53(1) 3850 GOSUB 6310 : IF G=1THEN 4830 : SCRATCH DISK T#D,LS=3,END =E3 : ERRORX=ERR : GOSUB '64 3860 GOSUB '44(3,3,E3) : IF G=1THEN 4830 : GOSUB '53(1) : IF L$<>"E"OR C2=0THEN 3870 : GOSUB '60 : GOTO 3690 3870 C=5 : GOSUB '32(C) : % 3880 REM MOVE END : E=0 3890 MOVE END T#D=E3-1 : ERRORX=ERR : GOSUB '64 3900 GOSUB '44(3,3,E3-1) : IF G=1THEN 3890 3910 GOSUB 6310 : IF G=1THEN 4830 : MOVE END T#D=E3 : ERRORX=ERR : GOSUB '64 3920 GOSUB '44(3,3,E3) : IF G=1THEN 4830 : IF E>0THEN 3980 : IF L$<>"E"OR C2=0THEN 3930 : GOSUB '61 : GOTO 3870 3930 C=6 : GOSUB '32(C) : GOTO 3980 3940 DEFFN'53(V1) : V0=0 : T=17 3950 DATA LOAD BA T#1,(V0,V0)C$() : ERRORX=ERR : GOSUB '64 3960 MAT SEARCHC$()<T,256-T+1>,<>HEX(00)TO L2$() : T=1 : IF L2$(1)>HEX(0000)THEN 5070 : IF V0<=V1THEN 3950 : RETURN 3970 REM LIMITS 3980 DATA SAVE DC OPEN T$#5,5,STR(Y3$,1,5) : ERRORX=ERR : GOSUB '64 3990 GOSUB 6310 : IF G=1THEN 4830 : DATA SAVE DC OPEN T#D,D*3,Y2$ : ERRORX=ERR : GOSUB '64 4020 DATA SAVE DC OPEN T$#1,4,"DATA1" : ERRORX=ERR : GOSUB '64 4030 GOSUB '45(1,2) : GOSUB '45(D,4) : GOSUB '45(5,2) : E=0 4040 LIMITS T#D,Y2$,V1,V2,X(1) : ERRORX=ERR : GOSUB '64 4050 GOSUB '42(V1,V2,X(1),8,13,6) : IF G=1THEN 4040 4060 GOSUB 6310 : IF G=1THEN 4830 : LIMITS T#5,STR(Y3$,1,5),X1(1,1),V2,V3 : ERRORX=ERR : GOSUB '64 4070 GOSUB '42(X1(1,1),V2,V3,3,7,4) : IF G=1THEN 4060 : IF L$<>"E"OR C2=0THEN 4080 : GOSUB '61 : GOTO 3930 4080 C=7 : GOSUB '32(C) : GOTO 4150 : % 4090 DEFFN'44(V1,V2,V3) : DATA LOAD BA T#1,(0,C1$)C$() : ERRORX=ERR : GOSUB '64 4095 GOSUB 6310 : IF G=1THEN RETURN : IF V1<>VAL(STR(C$(1),2,1))THEN 5070 4120 V0=VAL(STR(C$(1),3,2),2) : IF V2<>V0THEN 5070 4130 V0=VAL(STR(C$(1),5,2),2) : IF V3<>V0-1THEN 5070 : FOR I=1TO 10 : IF STR(C$(1),6+I,1)<>HEX(00)THEN 5070 : NEXT I : RETURN 4150 REM VERIFY : E=0 : VERIFY T#2,(S3,S3+8)L : GOSUB 6310 : IF G=1THEN 4830 : IF L<>0THEN 4160 : VERIFY T#4,(S3,S3+15)L : IF L=0THEN 4170 4160 GOSUB 5070 : GOSUB '60 : IF L$<>"E"OR C2=0THEN 4170 : GOSUB '61 : GOTO 4080 4170 C=8 : GOSUB '32(C) 4180 REM SCRATCH FILES : E=0 4190 SCRATCH T#D,Y2$ : ERRORX=ERR : GOSUB '64 4200 GOSUB '43(Y2$) 4210 GOSUB 6310 : IF G=1THEN 4830 : SCRATCH T#1,"DATA1",STR(Y3$,1,5) : ERRORX=ERR : GOSUB '64 4220 GOSUB '43("DATA1") : GOSUB '43(STR(Y3$,1,5)) : IF C2=0OR L$<>"E"THEN 4230 : GOSUB 5070 : GOSUB '63 : GOTO 4170 4230 C=9 : GOSUB '32(C) : GOTO 4280 4240 DEFFN'43(N$) : N1$=N$ : XOR (STR(N1$,2),N1$) : C$=STR(N1$,8,1) : ADDC(C1$,C$) : ADDC(C1$,C$) : ADDC(C1$,C$) : ADD(STR(C1$,1,1),STR(C1$,2,1)) : S=VAL(C1$)-INT(VAL(C1$)/3)*3 4250 DATA LOAD BA T#1,(S,C1$)C$() : ERRORX=ERR : GOSUB '64 4260 MAT SEARCHC$(),=STR(N$,1,8)TO L2$()STEP 8 : IF L2$(1)<>HEX(0000)THEN 4270 : S=S-1 : IF S>=0THEN 4250 : S=2 : GOTO 4250 4270 GOSUB '62(L2$(1)) : V1=INT(V0/16) : V2=V0-V1*16 : IF STR(C$(V1+1),1,1)<>HEX(11)THEN 5070 : RETURN 4280 REM DATASAVE DC OPEN : E=0 4290 SCRATCH DISK T#2,LS=3,END =E3-3 : ERRORX=ERR : GOSUB '64 4300 DATA SAVE DC OPEN T#1,3,"DATA1" : ERRORX=ERR : GOSUB '64 4310 GOSUB 6310 : IF G=1THEN 4830 : SCRATCH T#1,"DATA1" : ERRORX=ERR : GOSUB '64 4320 DATA SAVE DC OPEN T#1,"DATA1","DATA1" : ERRORX=ERR : GOSUB '64 4330 GOSUB '45(1,1) 4340 DATA SAVE DC OPEN T$#D,3,Y2$ : ERRORX=ERR : GOSUB '64 4350 GOSUB '45(D,1) 4360 DATA SAVE DC OPEN T#4,3,STR(Y3$,1,5) : ERRORX=ERR : GOSUB '64 4370 GOSUB '45(4,1) 4380 DATA SAVE DC OPEN T$#5,3,"DATA5" : ERRORX=ERR : GOSUB '64 4390 GOSUB '45(5,1) 4400 DATA SAVE DC OPEN T#4,TEMP,E3-2,E3 : ERRORX=ERR : GOSUB '64 4410 GOSUB '45(4,1) : GOSUB '48("DATA1",3,5,3) : GOSUB '48(Y2$,6,8,3) : GOSUB '48(STR(Y3$,1,5),9,11,3) 4415 IF C2=0OR L$<>"E"THEN 4420 : GOSUB '61 : GOTO 4230 4420 C=10 : GOSUB '32(C) : GOTO 4460 : % 4430 DEFFN'48(N$,V1,V2,V3) 4440 GOSUB 6310 : IF G=1THEN 4830 : LIMITS T#D,N$,A,B,C : ERRORX=ERR : GOSUB '64 : IF G=1THEN 4440 4450 GOSUB '42(V1,V2,V3,A,B,C) : IF G<>1THEN RETURN : RETURN CLEAR : GOTO 4290 : % 4460 REM DATASAVE DC CLOSE : E=0 4470 DATA SAVE DC CLOSE#4 : ERRORX=ERR : GOSUB '64 : IF G=1THEN 4470 4480 GOSUB '49(4,0,0,0) : IF G=1THEN 4470 4490 DATA SAVE DC CLOSE#D : ERRORX=ERR : GOSUB '64 4500 GOSUB '49(D,0,0,0) : IF G=1THEN 4490 4510 DATA SAVE DC CLOSEALL : ERRORX=ERR : GOSUB '64 4520 GOSUB '49(1,0,0,0) : GOSUB '49(5,0,0,0) : FOR I=1TO 200 : NEXT I : IF C2=0OR L$<>"E"THEN 4530 : GOSUB '61 : GOTO 4420 4530 C=11 : GOSUB '32(C) : % 4540 REM DATALOAD DC OPEN : E=0 4550 DATA LOAD DC OPEN T#1,"DATA1" : ERRORX=ERR : GOSUB '64 4560 GOSUB 6310 : IF G=1THEN 4830 : DATA LOAD DC OPEN T#D,Y2$ : ERRORX=ERR : GOSUB '64 4570 DATA LOAD DC OPEN T#5,"DATA5" : ERRORX=ERR : GOSUB '64 4580 DATA LOAD DC OPEN T#4,TEMP,E3-2,E3 : ERRORX=ERR : GOSUB '64 4590 GOSUB '49(1,3,5,3) : GOSUB '49(2,6,8,6) 4600 GOSUB '49(4,E3-2,E3,E3-2) : GOSUB '49(5,12,14,12) : IF C2=0OR L$<>"E"THEN 4610 : GOSUB '61 : GOTO 4530 4605 REM DATALOAD DC : E=0 : GOSUB '54(4,1) : GOSUB '54(1,5) : GOSUB '54(2,5) : GOSUB '54(5,5) : IF C2=0OR L$<>"E"THEN 4610 : GOSUB '61 : GOTO 4530 4610 C=12 : GOSUB '32(C) : GOTO 4650 : % 4620 DEFFN'49(F,V1,V2,V3) : GOSUB 6310 : IF G=1THEN 4830 4630 LIMITS T#F,A,B,C3 : ERRORX=ERR : GOSUB '64 4640 GOSUB '42(V1,V2,V3,A,B,C3) : RETURN : % 4650 REM DSKIP : E=0 : GOSUB '55(1,1,2,5) : GOSUB '55(2,2,1,7) : GOSUB '55(4,1,3,E3) : GOSUB '55(5,3,0,13) : IF C2=0OR L$<>"E"THEN 4660 : GOSUB '61 : GOTO 4610 4660 C=13 : GOSUB '32(C) : GOTO 4760 4665 ELSE M3$="2200DS WIN " : IF STR(D3$(1),3,1)="F"THEN 470 4670 DEFFN'55(F,T,V1,M) : GOSUB 6310 : IF G=1THEN 3720 4680 ON TGOTO 4690,4720,4730 : GOTO 5090 4690 DSKIP #F,V1S : ERRORX=ERR : GOSUB '64 4700 LIMITS T#F,A,B,I : ERRORX=ERR : GOSUB '64 4710 IF I<>MTHEN 5070 : RETURN 4720 DSKIP #F,V1 : ERRORX=ERR : GOSUB '64 4725 GOTO 4700 4730 DSKIP #F,END : ERRORX=ERR : GOSUB '64 4740 LIMITS T#F,A,B,C3 : ERRORX=ERR : GOSUB '64 4750 IF M<>C3THEN 5070 : RETURN : % 4760 REM DBACKSPACE : E=0 : GOSUB '51(1,1,1,4) : GOSUB '51(2,1,1,6) : GOSUB '51(4,3,0,E3-2) : GOSUB '51(5,2,2,12) : IF C2=0OR L$<>"E"THEN 4770 : GOSUB '61 : GOTO 4660 4770 C=14 : GOSUB '32(C) : GOTO 4820 4780 DEFFN'51(F,T,V1,M) : GOSUB 6310 : IF G=1THEN 3720 : ON TGOTO 4790,4800,4810 : GOTO 5090 4790 DBACKSPACE #F,V1S : ERRORX=ERR : GOSUB '64 4795 GOTO 4700 4800 DBACKSPACE #F,V1 : ERRORX=ERR : GOSUB '64 4805 GOTO 4700 4810 DBACKSPACE #F,BEG : ERRORX=ERR : GOSUB 4700 4815 GOTO 4700 4820 REM DATALOAD DC : E=0 : GOSUB '54(4,1) : GOSUB '54(1,1) : GOSUB '54(2,1) : GOSUB '54(5,1) : IF C2=0OR L$<>"E"THEN 4840 : GOSUB '61 : GOTO 4770 4830 G1=99 4840 GOSUB '40(2,0) : STR(R1$(),7,1)=HEX(FF) : GOSUB '41(2,0,R1$()) : IF G1=99THEN RETURN : C=15 : GOSUB '32(C) : IF L$<>"N"THEN 4870 4850 PRINT AT(20,29);BOX(1,20);" Device ";D3$(D);" COMPLETE" 4860 GOSUB '50 : G=1 : RETURN 4870 GOSUB '61 : GOTO 3230 4880 DEFFN'54(F,V1) : GOSUB 6310 : IF G=1THEN 3720 4890 DATA LOAD DC #F,I,A3$(),X(),A4$() : ERRORX=ERR : GOSUB '64 4900 IF I<>V1THEN 5070 : IF G=1THEN 4890 : RETURN 4920 DEFFN'45(F,V1) : GOSUB 6310 : IF G=1THEN 3720 : FOR I=1TO V1 : IF F<>0THEN 4930 : T=3 : GOTO 4940 4930 T=T+1 : IF T<3THEN 4940 : T=1 4940 ON TGOTO 4990,4970,4990 : GOTO 5090 4970 IF V1=ITHEN 4975 : DATA SAVE DC $#F,I,A3$(),X(),A4$(),X1(),Q0$,"ABC",I+1,A3$(),X(),A4$(),X1( ),Q0$,"ABC" : ERRORX=ERR : GOSUB '64 4971 I=I+1 : GOTO 4980 4975 DATA SAVE DC $#F,I,A3$(),X(),A4$(),X1(),Q0$,"ABC" : ERRORX=ERR : GOSUB '64 4980 NEXT I : DATA SAVE DC $#F,END : ERRORX=ERR : GOSUB '64 4985 RETURN 4990 IF V1=ITHEN 4995 : DATA SAVE DC #F,I,A3$(),X(),A4$(),X1(),Q0$,"ABC",I+1,A3$(),X(),A4$(),X1() ,Q0$,"ABC" : ERRORX=ERR : GOSUB '64 4991 I=I+1 : GOTO 5000 4995 DATA SAVE DC #F,I,A3$(),X(),A4$(),X1(),Q0$,"ABC" : ERRORX=ERR : GOSUB '64 5000 NEXT I : DATA SAVE DC #F,END : ERRORX=ERR : GOSUB '64 5010 RETURN 5050 DEFFN'42(V1,V2,V3,A,B,C3) : IF V1<>ATHEN 5070 : IF V2<>BTHEN 5070 : IF V3<>C3THEN 5070 : RETURN 5060 DEFFN'62(C1$) : V0=VAL(C1$,2) : RETURN 5070 GOSUB 5080 : GOTO 5300 5080 IF E=0THEN PRINT AT(C+3,24);"ERROR"; : GOSUB '60 : RETURN 5090 STOP "SYS ERROR" 5100 % 5110 DEFFN'32(I) : IF I<>0THEN 5120 : I=1 : GOTO 5130 5120 PRINT AT(I+2,29);BOX(-1,-((LEN(K$(I)))+1));" ";K$(I); : I=I+1 : IF I>15AND L$="N"THEN RETURN : IF I>15THEN I=1 5130 PRINT AT(I+2,29);BOX(1,LEN(K$(I))+1);" ";K$(I);""; : RETURN 5140 DEFFN'34(Z1) : H$="CHECK" : GOSUB '40(2,0) : IF X=0THEN 5160 : PRINT HEX(070E);AT(15,10);D3$(D);" write enable can't be determined! Pr oceed with caution!" : GOSUB '50 : INIT(20)H$ : PRINT AT(15,10,69); : IF G=1THEN 5170 : RETURN 5150 H$="CHECK" : GOSUB '40(2,0) : IF X<>0THEN RETURN : IF STR(R1$(),7,1)=HEX(FF)THEN PRINT AT(5,32);" WRITE ENABLED" : ELSE PRINT AT(5,32);" WRITE LOCKED" : RETURN 5160 IF STR(R1$(),7,1)=HEX(FF)THEN RETURN : PRINT HEX(070E);AT(11,26);D$;HEX(0F);" is not write enabled." : IF Z1=1THEN RETURN : PRINT AT(12,15);"Either enable ";HEX(0E);D3$(1);HEX(0F);" or mount a pre- enabled disk" : GOSUB '50 : G=1 5170 RETURN 5180 DEFFN'35(H1$) : H1$=H1$&" Rev. 8734" : PRINT HEX(0306);" ";AT(0,(80-LEN(H1$))/2);H1$;AT(1,(80-LEN(H1$))/2-1) ;BOX(0,LEN(H1$)+1);"" : GOSUB 6250 : RETURN 5190 DEFFN'39(Q) : CONVERT QTO Q$,(#####) : PRINT BOX(1,6);HEX(20060E);Q$;HEX(0F); : IF H1=1AND Q<>S3AND Q<>E3THEN PRINT " "; HEX(08080808080808080808080808080808080808080808080808080808080808080808) ; : H1=0 5200 IF G=4THEN RETURN : IF Q<>S3AND Q<>E3THEN RETURN : H1=1 : IF Q=S3THEN PRINT " (starting sector)"; : IF Q=E3THEN PRINT " (ending sector) " : RETURN 5210 DEFFN'40(D,R1) : X=0 : DATA LOAD BA T#D,(R1)R1$() : ERRORX=ERR : IF H$="CHECK"THEN 5220 : GOSUB '70(X,D) : IF G=1THEN RETURN 5220 INIT(20)H$ : GOTO 6310 5230 DEFFN'41(D,W1,R1$()) : X=0 : IF W1<>0THEN 5240 : IF E$="LOCKING"THEN 5240 : C$=STR(R1$(),7,1) : STR(R1$(),7,1)=HEX(FF) 5240 DATA SAVE BA T#D,(W1)R1$() : ERRORX=ERR : GOSUB '70(X,D) 5250 IF W1=0THEN STR(R1$(),7,1)=C$ : RETURN 5260 DEFFN'60 5270 C2=C2+1 : PRINT AT(20,54);"# of errors= ";C2;""; : IF C2<9999THEN RETURN : PRINT AT(20,52,27);HEX(07) : C2=0 : GOTO 5270 5280 DEFFN'61 : C1=C1+1 : PRINT AT(20,10);"Pass # ";C1; : IF C1<>9999THEN RETURN : PRINT AT(20,10,12); : C1=1 : RETURN 5290 DEFFN'64 : GOSUB 5080 : GOSUB '70(X,D) : IF G=1THEN 5320 5300 GOSUB 6310 : IF G=1THEN 5320 5310 IF L$<>"N"THEN RETURN : GOSUB '50 : PRINT AT(22,8,50) 5320 IF G<>1THEN RETURN : RETURN CLEAR ALL : GOSUB 4830 : GOTO 700 5330 DEFFN'70(X,D) : X1=X : IF L$<>"N"AND H$<>"CHECK"THEN GOSUB '60 : IF M1=XAND C2<>0AND L$<>"N"THEN RETURN : M1=X : PRINT AT(21,54,25);" ERROR "; 5335 IF X<10THEN PRINT "A"; : ELSE IF X<30THEN PRINT "S"; : ELSE IF X<60THEN PRINT "P"; : ELSE IF X<80THEN PRINT "X"; : ELSE IF X<90THEN PRINT "D"; : ELSE PRINT "I"; : PRINT X;" on disk ";D3$(D);"" : E$="DEVICE " : IF P9$<>"OFF"THEN GOSUB 5700 : IF L$<>"N"OR G=1OR H$="CHECK"OR H$="SCRAT"THEN RETURN : GOSUB '50 : RETURN 5340 DEFFN'90 : PRINT AT(20,25);BOX(1,26);" Device ";D3$(D);" task COMPLETE";AT(11 ,36);BOX(-1,-6);BOX(-1,-12) 5350 GOSUB '50 : G=1 : RETURN 5360 GOSUB '203 : RETURN 5370 IF R3$=HEX(D0)THEN PRINT AT(0,68);HEX(0E);"multi-sector" : RETURN 5380 DEFFN'201(D) : IF D3$(D)="340"THEN RETURN : GOSUB '202(D) : $GIOENDMSGWRITE#D,(0600070070A0400288D070406A10681140008B67,R$) : ERRORX=ERR : GOSUB '70 : RETURN 5390 GOSUB '203 : RETURN 5400 DEFFN'200(D) : X=0 : IF D3$(1)="340"THEN RETURN : GOSUB '202(D) : $GIOBEGINMSGWRITE#D,(0600070070A068D070406A1068104000,R$) : ERRORX=ERR 5410 RETURN 5420 DEFFN'203 : IF STR(R$,6,1)=HEX(00)THEN 5430 : IF STR(R$,6,1)=HEX(01)THEN X=98 : IF STR(R$,6,1)=HEX(02)THEN X=91 : IF STR(R$,6,1)=HEX(04)THEN X=94 : GOSUB '70 : RETURN 5430 IF STR(R$,7,1)=HEX(00)THEN RETURN : IF STR(R$,7,1)=HEX(01)THEN X=95 : IF STR(R$,7,1)=HEX(02)THEN X=93 : IF STR(R$,7,1)=HEX(04)THEN X=96 : GOSUB '70 : RETURN 5440 REM % ***SET PARAMETERS*** 5450 IF G=3OR G=2THEN RETURN 5460 REM %Select device : E=0 : I5=3 : A2$=D$ : GOSUB 6360 : IF G=1THEN RETURN : FOR I=1TO 3 : H$=STR(A2$,I,1) : GOSUB 5490 : STR(A2$,I,1)=H$ : NEXT I : IF E<>1THEN 5510 5480 PRINT AT(R,Y);"\A0\A0\A0" : GOTO 5450 5490 CONVERT H$TO S : ERRORX=ERR : H$=AND HEX(DF) : IF H$<"A"OR H$>"F"THEN E=1 5500 IF I=1AND H$<>"D"AND H$<>"B"AND H$<>"3"THEN E=1 : RETURN 5510 SELECT #D<A2$> : IF D<>2THEN 5530 : IF D3$(1)="340"THEN 5520 : $GIOCHECKFORVALIDADDRESS#3(010402E81212102012120B0070A04100860B4501,R$) : ERRORX=ERR 5520 SELECT #1<A2$> : SELECT #4<A2$> : SELECT #5<A2$> : GOTO 5540 5530 IF A2$="340"THEN 5540 : $GIOCHECKFORVALIDADDRESS#3(010402E81212102012120B0070A04100860B4501,R$) : ERRORX=ERR : GOTO 5450 5540 IF A2$="340"THEN 5555 : IF STR(R$,8,1)=HEX(10)THEN 5450 : D$=A2$ 5550 R3$=STR(R$,11,1) : RETURN 5555 REM RAM DISK : D$=A2$ : R3$="D0" : RETURN 5560 REM %Select starting sector 5570 CONVERT S3TO A2$,(#####) : I5=5 : GOSUB 6360 : CONVERT A2$TO S3 : ERRORX=ERR : GOTO 5570 5580 RETURN 5590 REM %Select ending sector : CONVERT E3TO A2$,(#####) : I5=5 : GOSUB 6360 : CONVERT A2$TO E3 : ERRORX=ERR : GOTO 5590 5600 RETURN 5610 REM % ***FORMAT DISK*** : PRINT AT(23,45,34); 5620 GOSUB 6250 : PRINT AT(6,32);"Format device ";D3$(1);AT(8,34);"ARE YOU SURE? ";AT(22,8);" Y to continue" : GOSUB 6300 : IF G=1THEN RETURN : IF C$<>"Y"THEN 5620 5630 PRINT AT(6,29,);"Formatting device ";D3$(1);AT(22,1);"CHECK: to ens ure that the device is formatting and the system isn't hung" : E3$=ALL(" ") 5640 GOSUB 6310 : IF G=1THEN RETURN : X=0 : $FORMATDISK T#2 : ERRORX=ERR : IF X<>92THEN 5670 : PRINT AT(11,20,59);"Press the format button for ";D3$(1);"";AT(22,1,78) ;"Press: CONT when the format is completted" : GOSUB 6250 : GOTO 5660 5650 GOTO 5670 5660 GOSUB 6300 : PRINT AT(20,20,) : IF G=1THEN RETURN : IF C$<>HEX(84)THEN 5660 5670 DATA LOAD BA T#2,(S3)R1$() : ERRORX=ERR : E3$="I-" : CONVERT XTO STR(E3$,3,2),(##) : PRINT AT(8,34,59);" "; : IF X=93THEN PRINT "Device #";D3$(1);" still has a format error"; : ELSE PRINT "ERROR ";E3$;" on DEVICE #";D3$(1);"" : GOSUB 6250 : IF L$<>"N"THEN GOSUB '60 : IF L$="N"THEN GOSUB '50 : G=1 5680 IF X<>0THEN GOSUB '60 5690 IF L$="N"THEN RETURN : GOSUB '61 : GOTO 5640 5700 REM % PRINT ERROR : REM IF MAX NUMBER OF LINES PRINTED OR PRINTER NOT SELECED THEN RETURN : IF P3=QAND P3$=D$(D)THEN RETURN : IF P9$="215"THEN 5720 5710 REM % 204 Printer : $OPEN 5750,/204 : PRINT AT(21,25,16);" Printer 204 - buffer full"; : SELECT PRINT 204 : $IF OFF /204,5750 : GOTO 5730 5720 REM % 215 Printer : $OPEN 5750,/215 : $GIO/215(410D) : $IF OFF /215,5750 : PRINT AT(21,25,16);" Printer 215 - buffer full"; : SELECT PRINT 215 : REM % 5730 P=P+1 : PRINT TAB(3);E$; : PRINT " ERROR "; : IF X<>0THEN PRINT "I-";X; : ELSE PRINT "----- "; 5740 PRINT " disk ";D3$(D);" sec";Q; : PRINT 5750 SELECT PRINT 005 : $CLOSE/215 : $CLOSE/204 5760 PRINT AT(21,25,25); : IF P=P1THEN P9$="OFF" : P3=Q : P3$=D$(D) : RETURN 5770 $CLOSE#2 : RETURN CLEAR ALL : $IF OFF /005,5770 5780 GOSUB 5800 5790 REM % Help messages for errors 5800 IF X1<90OR X1>99THEN X1=90 : PRINT HEX(03) : GOSUB '52 : GOSUB 6250 : PRINT AT(11,25,54);"Define error I- (90-99)"; : CONVERT X1TO A2$,(##) : ERRORX=ERR 5810 R=11 : Y=40 : I5=2 : GOSUB 6360 : IF G=1THEN G=2 : IF G=2THEN RETURN : ON G1GOTO 5820 : GOTO 5810 5820 CONVERT A2$TO X1 : ERRORX=ERR : GOTO 5810 5830 E9=1 : PRINT HEX(03) : GOSUB 6250 : PRINT AT(4,0); : ON X1-89GOSUB 5840,5870,5920,5950,5990,6020,6060,6120,6160,6200 : IF G=1THEN G=2 : IF G<>2THEN 5800 : ELSE RETURN 5840 PRINT " ERR I-90";HEX(0A0A0D);"Error: DISK HARDWARE ERROR";HEX( 0A0D);"Cause: The disk did not respond properly to the system at the beginning of a read or write operation; the operation has no t been performed." 5850 PRINT HEX(0D);"Recovery: Run the program again. If the error persists, ensure that disk unit is powered on and that all cables are p roperly connected." 5860 GOTO 6240 5870 PRINT " ERR I-91";HEX(0A0A0D);"Error: DISK HARDWARE ERROR";HEX( 0A0D);"Cause: A disk hardware error occurred because the disk is not in file-ready position. If the disk is in LOAD mode or if the power is not turned" 5880 PRINT HEX(0C);" on, for example, the disk is not in file-ready position and a disk hardware error is generated." 5890 PRINT HEX(0D);"Recovery: Run the program again. If the error recurs, be sure the disk is turned on, properly set up for operatio n, and that all cables are properly connected. Set the disk into LOAD mode and then back into"; 5900 PRINT " RUN mode by using the RUN/LOAD selection switch." 5910 GOTO 6240 5920 PRINT " ERR I-92";HEX(0A0A0D);"Error: TIMEOUT ERROR";HEX(0A0D); "Cause: The device did not respond to the system in the proper amoun t of time (time-out). The read or write operation has not been performed." 5930 PRINT HEX(0D);"Recovery: Run the program again. If the error persists, be sure that the disk platter has been formatted." 5940 GOTO 6240 5950 PRINT " ERR I-93";HEX(0A0A0D);"Error: FORMAT ERROR";HEX(0A0D);" Cause: A format error was detected during a disk operation. This err or in- dicates that certain sector-control information is inv alid. If this" 5960 PRINT HEX(0C);" error occurs during a read or write operation, the platter may need to be reformatted. If this error occurs during formatting, there may be a flaw on the platter's surfa ce." 5970 PRINT HEX(0D);"Recovery: Format the disk platter again. If the error pe rsists, replace the media." 5980 GOTO 6240 5990 PRINT " ERR I-94";HEX(0A0A0D);"Error: FORMAT KEY ENGAGED";HEX(0 A0D);"Cause: The disk format key is engaged. The key should be engag ed only when formatting a disk." 6000 PRINT HEX(0A);"Recovery: Turn off the format key." 6010 GOTO 6240 6020 PRINT " ERR I-95";HEX(0A0A0D);"Error: DEVICE ERROR";HEX(0A0D);" Cause: A device fault occurred indicating that the disk could not pe rform the requested operation. This error may result from an attempt to" 6030 PRINT " write to a write-protected platter." 6040 PRINT HEX(0A);"Recovery: If writing, make sure the platter is not write -protected. Repeat the operation. If the error persists, power the disk off and then on, and then repeat the operation." 6050 GOTO 6240 6060 PRINT " ERR I-96";HEX(0A0A0D);"Error: DATA ERROR (CRC)";HEX(0A0 D);"Cause: For read operations, the checksum calculations (CRC or EC C) indicate that the data read is incorrect. The sector read m ay have been writ-" 6070 PRINT HEX(0C);" ten incorrectly. For disk drives that perform error correction (ECC), the error correction attempt was unsuccessful. For write op- erations, the LRC calculation in dicates that the data sent to the" 6080 PRINT " disk was incorrect. The data has not been written." 6090 PRINT HEX(0A);"Recovery: For read errors, rewrite the data. If read err ors persist, the disk platter should be reformatted. For writ e errors, the write operation should be repeated. If write err ors persist, ensure that all cable" 6100 PRINT " connections are properly made and are tight." 6110 GOTO 6240 6120 PRINT " ERR I-97";HEX(0A0A0D);"Error: LONGITUDINAL REDUNDANCY C HECK ERROR";HEX(0A0A0D);"Cause: A longitudinal redundancy check erro r occurred when reading or writ-" 6130 PRINT HEX(0C);" ing a sector. Usually, this error indicates a transmission error between the disk and the CPU. However, the sector being accessed may have been previously written incorrectly." 6140 PRINT "Recovery: Run the program again. If the error persists, rewrite the flawed sector." 6150 GOTO 6240 6160 PRINT " ERR I-98";HEX(0A0A0D);"Error: PLATTER NOT MOUNTED";HEX( 0A0A0D);"Cause: The disk sector being addressed is not on the disk, or the disk" 6170 PRINT HEX(0C);" platter is not mounted. (The maximum legal sec tor address depends upon the disk model used.)" 6180 PRINT HEX(0A);"Recovery: Mount a platter in the specified drive." 6190 GOTO 6240 6200 PRINT " ERR I-99";HEX(0A0A0D);"Error: READ-AFTER-WRITE ERROR";H EX(0A0A0D);"Cause: The comparison of read-after-write to a disk sect or failed, indicat-" 6210 PRINT HEX(0C);" ing that the information was not written prope rly. This error usual- ly indicates that the disk platter is d efective." 6220 PRINT "Recovery: Write the information again. If the error persists, tr y a new plat- ter." 6230 GOTO 6240 6240 DEFFN'50 : REM %'50 : C$=" " : GOSUB '52 : GOSUB 6300 : IF C$<>HEX(0D)AND C$<>HEX(82)AND G<>1AND G<>2THEN 6240 : RETURN 6245 DEFFN'52 : REM %'52 : PRINT HEX(06);" ";AT(23,58);"RETURN/RUN to cont.";AT(1,1) : RETURN 6250 REM % PREV SCRN message : PRINT AT(22,0);BOX(2,79);" Press:";" ";AT(23,8);"CLEAR/PREV SCRN - to exit"; : RETURN 6260 REM % Change page : G=2 : RETURN 6270 REM % Print error information : GOTO 5800 6280 REM % Check for PREV SCRN or change of page : G=1 : RETURN 6290 REM % Check for CLEAR : IF C$=HEX(81)THEN G=1 : RETURN 6300 REM % Wait for input : G=0 : KEYIN C$,,6320 : GOTO 6290 6310 REM % Input no wait : C$=" " : G=0 : KEYIN C$,6290,6320 : RETURN 6320 G=3 : IF C$=HEX(0F)THEN GOTO 6260 : IF C$=HEX(42)OR C$=HEX(52)THEN 6280 : RETURN 6325 REM % Get drive status : R$=" " : $GIOREADSTATUS#2(0600070070A0400288D070406A106816400087051A00C340,R$)R$;S TR(H$,1,VAL(STR(R$,5,1))) : ERRORX=ERR 6326 RETURN 6330 REM DEFFN'31 : REM % Reload menu : LOAD T"@MENU" : ERRORX=ERR : PRINT HEX(03);AT(12,18);""; : IF X=(82)THEN PRINT " NO PREVIOUS MENU IS AVAILABLE "; : ELSE PRINT " DISK ERROR ";X;" " 6340 GOSUB 6250 : PRINT AT(23,38,41); : GOSUB 6300 : IF G=1THEN 30 : GOTO 6340 6350 REM % Text input meaasge : GOSUB 6250 : PRINT AT(22,8);" ANY KEY to input parameters "; : RETURN 6360 REM % Input and edit data : REM R,Y are screen cords. and A$ is data to edit : Z2,Z1=1 : G,G1=0 : GOSUB 6350 : PRINT "";AT(R,Y);A2$;"";AT(R,Y);HEX(05); 6370 KEYIN C$,,6440 : PRINT HEX(06) : IF C$=HEX(08)THEN 6510 : IF C$=HEX(0D)OR C$=HEX(82)THEN 6540 : IF C$=HEX(81)THEN 6480 : A2$=ALL(" ") : PRINT AT(R,Y,I5);"";STR(A2$,1,I5);""; : Z1=2 : GOTO 6390 6380 PRINT HEX(05); : IF Z2=I5+1THEN PRINT AT(R,Y+Z2-2); : G1=0 : PRINT HEX(05); : KEYIN C$,,6440 : PRINT HEX(060F); : IF C$=HEX(0D)OR C$=HEX(82)THEN 6540 : IF C$=HEX(08)THEN 6400 6390 IF Z2=I5+1THEN Z2=Z2-1 : STR(A2$,Z2,1)=C$ : PRINT AT(R,Y+Z2-1);"";C$;""; : Z2=Z2+1 : GOTO 6380 6400 IF Z2=1THEN 6510 : Z2=Z2-1 : C$=" " : STR(A2$,Z2,1)=C$ : PRINT AT(R,Y+Z2-1);C$;HEX(08); : GOTO 6380 6410 IF Z2=I5+1THEN Z2=Z2-1 : IF Z2<>1THEN Z2=Z2-1 : ELSE GOTO 6520 : PRINT HEX(08); : GOTO 6380 6420 IF Z2<I5THEN Z2=Z2+1 : ELSE GOTO 6530 : PRINT HEX(09); : GOTO 6380 6430 IF C$=HEX(00)AND I4<=DTHEN 6470 : GOTO 6260 : REM goto '0 6440 PRINT HEX(060F); : IF C$=HEX(48)THEN 6450 : ON POS(HEX(4D5D4C5C7F7E4555465642521F0F)=C$)GOTO 6410,6410,6420,6420,6520 ,6530,6500,6500,6510,6510,6280,6280,6260,6260 : G=3 : RETURN 6450 A2$=ALL(" ") : PRINT AT(R,Y,I5);"";STR(A2$,1,I5);""; : GOTO 6360 6460 PRINT HEX(07) 6470 ON Z1GOTO 6360,6380 6480 G=1 : RETURN 6490 GOSUB 6310 : IF E9<>3THEN 6490 : E9=0 : GOSUB 540 : GOSUB 6350 : PRINT AT(R,Y+Z2-1); : IF Z2=1THEN 6360 : GOTO 6380 6500 G1=G1+1 6510 G1=G1+1 6520 G1=G1+1 6530 G1=G1+1 6540 G1=G1+1 : RETURN 7020 REM DISABLE RETRIES : IF D3$(1)="340"THEN RETURN : GOSUB 7060 : $GIODISABLERETRIES#2(0600070070A0400288D070406A1068174000,R$) : ERRORX=ERR 7030 RETURN 7040 REM ENABLE RETRIES : IF D3$(1)="340"THEN RETURN : GOSUB 7060 : $GIOALLOWRETRIES#2(02000330122112220600070070A0400288D070406A1068244000,R $) : ERRORX=ERR : REM PASS OVER ERROR 7050 RETURN 7060 REM FORMAT THE DRIVE NUMBER FOR GIO STATEMENT : D=1 7061 DEFFN'202(D) : IF STR(D3$(1),1,1)="B"THEN 7080 : IF STR(D3$(1),1,1)="D"AND STR(D3$(1),3,1)="0"THEN 7080 7065 DEFFN'202(D) : R$=" " : IF STR(D3$(1),1,1)="B"THEN 7080 : IF STR(D3$(1),1,1)="D"AND STR(D3$(1),3,1)="0"THEN 7080 7070 HEXPACKSTR(R$,1,1)FROMSTR(D3$(1),2,2) : STR(R$,1,1)=AND HEX(0F) : STR(R$,1,1)=SUBHEX(01) : GOTO 7090 7080 STR(R$,1,1)=HEX(10) 7090 STR(R$,1,1)=OR HEX(20) : RETURN 8000 REM CHECK FOR VALID ADDRESS : X=0 : IF D3$(1)="340"THEN RETURN : $GIOCHECKFORVALIDADDRESS#3(010402E81212102012120B0070A04100860B4501,R$) : ERRORX=ERR 8010 RETURN 9900 DEFFN'00 : PRINT HEX(03);" DEFFN'XX LISTING" : PRINT : LIST S9900, : STOP 9901 DEFFN'01HEX(020400020E) : REM - - -Reverse- -On 9902 DEFFN'02HEX(020400040E) : REM - - - -Underline-On 9903 DEFFN'03HEX(020402000E) : REM -Bright- - - -On 9904 DEFFN'04HEX(020402020E) : REM -Bright- -Reverse- -On 9905 DEFFN'05HEX(020402040E) : REM -Bright- - -Underline-On 9906 DEFFN'06HEX(020404000E) : REM - -Blinking- - -On 9907 DEFFN'07HEX(020404020E) : REM - -Blinking-Reverse- -On 9908 DEFFN'08HEX(020404040E) : REM - -Blinking- -Underline-On 9909 DEFFN'09HEX(02040B000E) : REM -Bright-Blinking- - -On 9910 DEFFN'10HEX(02040B020E) : REM -Bright-Blinking-Reverse- -On 9911 DEFFN'11HEX(02040B040E) : REM -Bright-Blinking- -Underline-On 9912 DEFFN'12HEX(0202000F) : REM -Select normal character set- 9913 DEFFN'13HEX(0202020F) : REM -Select alternate character set- 9914 DEFFN'14HEX(0E) : REM - - - - -On 9915 DEFFN'15HEX(0F) : REM - - - - -Off 9916 DEFFN'16 : REM - Print a listing : SELECT LIST 215(132) : LIST " PROGRAM "D : LIST " Variables"V : LIST " Prime Numbers"' : LIST " Line numbers"# 9917 SELECT LIST 005(80) : PRINT HEX(03) : STOP " DONE PRINTING" 9931 DEFFN'30 : REM - Update the program : SCRATCH T/D10,"FTU" : SAVE T/D10,()"FTU" : STOP " 'FTU' SAVED"