home *** CD-ROM | disk | FTP | other *** search
Wrap
GW-BASIC | 1984-09-15 | 45.9 KB | 909 lines
1 F=0:VR$="4.00":COMP$="I":REF=&H1700 2 DEF SEG=64:POKE 23,(PEEK(23)AND-65)+64:MEM=256*PEEK(&H14)+PEEK(&H13):DEF SEG=&HFE00:IF PEEK(&HE)<>73 THEN COMP$="C" 3 DEF SEG:I=0:J=0:S=0:X=0:I%=0:DIM SP(40):S=VARPTR(SP(0)):X=(S+16)MOD 16:S=S+16-X:FOR I=0 TO 13:READ J:POKE S+I,J:NEXT:CALL S(I%):SE%=I%+4098:IF COMP$="C" AND SE%<REF THEN MEM=MEM-64 4 SX%=1+INT(SE%/64):SY%=MEM-SX%:IF SY%>31 GOTO 52 5 IFF=1THENSE%=&H1800:GOTO10 6 X=65536-1024*(32-SY%):IFX<60000GOTO9 7 CLEAR,X:F=1:GOTO2 8 DATA&H55,&H8C,&HD8,&H89,&HE5,&H8B,&H7E,6,&H89,5,&H5D,&HCA,2,0 9 CLS:LOCATE12,23:PRINT"NOT ENOUGH MEMORY INSTALLED!!!!":BEEP:BEEP:SYSTEM 10 WIDTH 80:SIDE%=0:SCR%=&HDF:LFE%=&H300:LFT%=&H2D00:TRT%=&H2E00:RST%=&H4600:CHR%=&H100:TMS%=&H200:SFF%=0:UR%=&H6FB1:AVM%=SY%-32 30 DEF SEG=SE%:KEY OFF:CLS:LOCATE 12,23:PRINT"LOADING DISK MECHANIC. PLEASE WAIT!!":BLOAD"TRQ7",0:BLOAD"TRQ9",&H2D00:BLOAD"TRQ8",&H5E00:POKE &HFF,24:POKE &H20,&HDF:ASYN$="A":S0%=1:RA$="R":DEF USR=UR%:POKE 49,6:POKE 50,0:UU%=0:UU%=USR(UU%) 40 POKE &HE5,&H46:MDTR%=PEEK(&H3D):IF MDTR%=0 OR MDTR%=1 GOTO 60 50 LOCATE12,18:PRINT"INVALID LOAD OF DISK MECHANIC. EXITING TO DOS":GOTO500 52 SF%=SE%+&H2E0:SA%=&H180:GOSUB58:IFS1%<>S2%GOTO56 53 SF%=SE%+&H460:GOSUB58:IFS1%<>S2%GOTO59 54 SF%=SE%+&H10:SA%=&H10:GOSUB58:IFS1%=S2%GOTO10 56 SE%=4096*S2%:SX%=1+INT(SE%/64):SY%=MEM-SX%:IFSY%>31GOTO10 ELSE5 57 SE%=SF%:SX%=1+INT(SE%/64):SY%=MEM-SX%:IFSY%>31GOTO10 ELSE5 58 S1%=INT(SF%/4096):S2%=INT((SF%+SA%)/4096):RETURN 59 SF%=4096*S2%-&H460:IFSF%>SE%GOTO57 ELSE56 60 FSEG=SE%+&H824:LSEG=64*MEM-1:VAIL=16*(LSEG-FSEG):FSH%=INT(FSEG/256):FSL%=FSEG-256*FSH%:LSH%=INT(LSEG/256):LSL%=LSEG-256*LSH%:POKE &H2D0E,9:POKE 49,16:POKE 50,0:POKE 58,0:POKE 54,0:POKE 53,39:UU%=USR(UU%) 80 DIMDA%(85):DIMTM(50),LT$(15),PC%(20),DR$(112),AT%(112),SC%(112),F1%(112),F2%(112),FA%(355),DT%(85,8,1),TD%(255),LF%(80),FC%(300),C%(9),C$(9),PAG(6):PAG(0)=0.5:PAG(1)=1:PAG(2)=2:PAG(3)=4:PAG(4)=8:PAG(5)=16:PAG(6)=0 100 LT$(0)="0":LT$(1)="1":LT$(2)="2":LT$(3)="3":LT$(4)="4":LT$(5)="5":LT$(6)="6":LT$(7)="7":LT$(8)="8":LT$(9)="9":LT$(10)="A":LT$(11)="B":LT$(12)="C":LT$(13)="D":LT$(14)="E":LT$(15)="F":RA$="R":SQ=65536:N89%=9:N98%=9:CLS 130 BEEP:LOCATE 12,15:PRINT"COLOR/GRAPHICS <C> OR MONOCHROME DISPLAY <M> ADAPTER"; 140 CM$=INKEY$:IFCM$=""GOTO140 150 IFCM$="C"ORCM$="c"THENPOKESCR%,&HB8:GOTO180 160 IFCM$="m"ORCM$="M"THENPOKESCR%,&HB0:GOTO180 170 GOTO130 180 ST%=0:ET%=41:ETI%=41:HD%=0:DRI$="A":GOSUB 10970:KEY 9,"LPTOFF":KEY 10,"MENU ":GOSUB 11650 200 KEYOFF:FORI%=1TO8:KEYI%,"":KEY(I%)OFF:NEXTI%:GOSUB11650:GOSUB220:GOTO270 220 POKE &H41,0:POKE &HF2,0:POKE &H19,1:KEY(11)OFF:SBR%=0:CLS:PRINT SPC(32);"DISK MECHANIC";SPC(33);COMP$:PRINT"":PRINT SPC(32);"Version ";VR$:PRINT" Copyright 1983, 1984 by Software Tailors, Inc. & MLI Microsystems, Inc.":RETURN 270 PRINT"":PRINT"":PRINT"":PRINTSPC(30);"Main Menu Options":PRINT"":PRINTSPC(5);"F1: Track and Sector Tools":PRINTSPC(5);"F2: File Tools":PRINTSPC(5);"F3: Backup, Copy, Analyze and Format Tools 320 PRINTSPC(5);"F4: Exit to DOS":PRINTSPC(5);"F5: Exit to BASIC 350 KEY1,"SECTOR":KEY2,"FILE ":KEY3,"BACKUP":KEY4,"DOS ":KEY5,"BASIC ":KEY6,"":ONKEY(1)GOSUB11580:ONKEY(2)GOSUB11590:ONKEY(3)GOSUB11600:ONKEY(4)GOSUB11610:ONKEY(5)GOSUB11620:ONKEY(10)GOSUB11640 355 IFCM$="C"ORCM$="c"THENKEY7,"COLOR ":ONKEY(7)GOSUB16000:KEY8,"B&W ":ONKEY(8)GOSUB16100:KEY(7)ON:KEY(8)ON 360 KEY(1)ON:KEY(2)ON:KEY(3)ON:KEY(4)ON:KEY(5)ON:KEY(10)ON:ONKEY(9)GOSUB11660:KEY(9)ON:KEYON:GOSUB11650:PRINTSPC(15);" To return to this menu, use the F10 key. 380 KY$=INKEY$:GOTO 380 390 IFJP%=4GOTO460 420 IFJP%=5GOTO470 430 IFJP%=2THENPZ%=1:GOTO3310 440 IFJP%=1THENPZ%=1:GOTO6680 450 IFJP%=3GOTO520 460 PRINT"Insert a disk containing DOS in drive A. 470 PRINT"Press the space bar to exit.":PRINT"Use the F10 key to return to DISK MECHANIC without exiting. 490 IFINKEY$=""GOTO490 500 POKE49,7:UU%=USR(UU%):IFJP%=5THENKEYOFF:END 510 SYSTEM 520 KEYOFF:FORTR%=0TO81:DA%(TR%)=0:NEXTTR% 540 CLS:ONERRORGOTO11560:POKE&HF1,0 550 GOSUB220:KEYOFF:FORI%=1TO8:KEYI%,"":KEY(I%)OFF:NEXTI%:KEY1,"AUTO ":KEY2,"ANALYZ":KEY3,"POKE ":KEY4,"FTABLE":KEY5,"INTTRK":KEY6,"FORMAT":KEY7,"BACKDM":KEY8,"COPYTK":ONKEY(10)GOSUB10670:ONKEY(1)GOSUB11700:ONKEY(2)GOSUB11710 570 ONKEY(8)GOSUB11770:ONKEY(11)GOSUB20000:KEY(11)ON:ONKEY(3)GOSUB11720:ONKEY(4)GOSUB11730:ONKEY(5)GOSUB11740:ONKEY(6)GOSUB11750:ONKEY(7)GOSUB11760:KEY(10)ON:FORI%=1TO8:KEY(I%)ON:NEXTI%:KEY(9)ON:GOSUB11650:KEYON 590 PRINT"":PRINT"":PRINT"":PRINTSPC(19);"3. Backup, Copy, Analyze and Format Tools":PRINT"":PRINTSPC(5);"F1: AUTOMATIC DISK BACKUP: Analyze, Format, Copy and Verify":PRINTSPC(5);"F2: Analyze Disk Format Structure 620 PRINTSPC(5);"F3: Peek/Poke @ Location ";:GOSUB13610:PRINTSPC(5);"F4: Examine or modify diskette Format Table":PRINTSPC(5);"F5: Examine Intertrack Sector Timing":PRINTSPC(5);"F6: Format Diskette using the Format Table 660 PRINTSPC(5);"F7: Backup Disk Mechanic":PRINTSPC(5);"F8: Copy Diskette Data by Tracks (after Analyze and Format)":PRINT"":BO%=0 700 KY$=INKEY$:GOTO 700 710 KEY(11)OFF:ONKEY(10)GOSUB11780:LOCATE9+N3%,1:PRINT"*";:LOCATE19,1:TIM%=0:IFN3%=7GOTO2490 760 IFN3%=8GOTO2220 770 IFN3%=4GOTO1400 780 IFN3%=3THEND%=8:C%=4:GOSUB2860:LOCATE12,1:PRINT" ";:LOCATE18,1,1:GOTO700 790 IFN3%=6GOTO2050 800 IFN3%=5GOTO2540 810 IFN3%=2THENTT$="Y":PRINT"Include sector timing & RPM <Y>es or <N>o? ";TT$;" ";:GOSUB12430:IFKB$="y"ORKB$="Y"ORKB$=""THENTIM%=1 820 GOSUB10680:GOSUB10750:GOSUB10810:GOSUB10870:GOSUB13370:SF%=0:ML%=5:IFTIM%=1THENML%=8:GOTO890 890 LP1%=PEEK(&HED):LP2%=PEEK(&HEE):POKE &HED,4:POKE &HEE,0:FS%=LFE%+256*ST%:ERM%=0:SIDE%=HD%:FOR TR%=ST%TO ET%:EE%=ET%:ES%=ST%:ST%=TR%:ET%=ST%:SS%=1:PRINT"":LOCATE 23,1:PRINT SPC(30);:LOCATE 23,1:PRINT"Analyzing track";TR%;", side";HD% 940 IFLPT%=1THENLPRINT"Analyzing track";TR%;", side";HD% 950 POKE49,1:POKE50,0:GOSUB10930:ST%=ES%:ET%=EE%:LA%=ET%:DA%(TR%)=1:OS%=3:GOSUB12530:IFTIM%=1THENGOSUB1890 1020 NS%=PEEK(FS%):SZ%=PEEK(FS%+1):IFNS%<>N89%ORSZ%<>2THENDA%(TR%)=2 1030 SF%=SF%+NS%:IFNS%=0ANDLPT%=1THENLPRINT"Track #";TR%;" is not formatted. 1040 IFPEEK(&HDD)<>0THENGAP%=PEEK(FS%+181):IFGAP%<>0THENPRINT"Format gap length is ";HEX$(GAP%);" (hex).":IFLPT%=1THENLPRINT"Format gap length is ";HEX$(GAP%);" (hex). 1050 IFNS%=0THENDA%(TR%)=DA%(TR%)+1:GOSUB18000:PRINT"Track # ";TR%;" is not formatted.":GOTO1310 1060 IFNS%>36ANDLPT%=1THENLPRINT"Track #";TR%;" has";NS%;" sectors. Data for the first 36 sectors are shown. 1070 IFNS%>36THENPRINT"Track # ";TR%;" has ";NS%;" sectors. Data for the first 36 sectors are shown.":NS%=48 1080 IFNS%<>N89%THENGOSUB18000:PRINT"Track # ";TR%;" has ";NS%;" sectors, not";N89%:DA%(TR%)=DA%(TR%)+1:IFLPT%=1THENLPRINT"Track #";TR%;" has";NS%;" sectors, not";N89% 1085 IFNS%<>N89%AND(NS%=8ORNS%=9)THENN89%=NS% 1090 IFSZ%<>2THENGOSUB18000:PRINT"Sector size on track ";TR%;" is ";SZ%;" not 2 (2 implies 512 bytes/sector).":DA%(TR%)=DA%(TR%)+1:IFLPT%=1THENLPRINT"Sector size on track";TR%;" is";SZ%;", not 2. 1100 WRG%=0:WRH%=0:ERK%=0:FORSC%=1TONS%:BE%=PEEK(FS%+OS%-1):BD%=INT(BE%/64):IFBD%=1ORBD%=3THENWRG%=1:GOSUB18000:PRINT"CRC Error in track ";TR%;", sector ";SC%:IFLPT%=1THENLPRINT"CRC Error in track ";TR%;", sector ";SC% 1140 IFBD%=2ORBD%=3THENGOSUB18000:PRINT"Deleted data address mark used in track ";TR%;", sector ";SC%:IFLPT%=1THENLPRINT"Deleted data address mark used in track";TR%;", sector";SC% 1150 C%=PEEK(FS%+OS%):IFC%<>TR%THENDA%(TR%)=DA%(TR%)+1:ERK%=ERK%+1 1160 H%=PEEK(FS%+OS%+1):IFH%<>HD%THENDA%(TR%)=DA%(TR%)+1:ERK%=ERK%+1 1170 R%=PEEK(FS%+OS%+2):IFR%<>SC%THENDA%(TR%)=DA%(TR%)+1:ERK%=ERK%+1 1180 N%=PEEK(FS%+OS%+3):IFN%<>2THENDA%(TR%)=DA%(TR%)+1:ERK%=ERK%+1 1190 IFN%<>SZ%THENWRH%=1 1200 OS%=OS%+5:NEXT SC%:IF (ERK%=0 AND NS%=N89%) GOTO 1290 1230 OS%=3:GOSUB18000:FORSC%=1TONS%:C%=PEEK(FS%+OS%):H%=PEEK(FS%+OS%+1):R%=PEEK(FS%+OS%+2):N%=PEEK(FS%+OS%+3):OS%=OS%+5 1260 PRINT"Non-standard format: track,head,sector,size are (IBM standard) [as marked]":PRINT" (";TR%;",";HD%;",";SC%;",2) [";C%;",";H%;",";R%;",";N%;"] 1270 IFLPT%=1THENLPRINT"Non-standard format: (";TR%;",";HD%;",";SC%;",";"2) [";C%;",";H%;",";R%;",";N%;"] 1280 NEXTSC% 1290 IFWRH%=1THENPRINT"WARNING: MORE THAN ONE SECTOR SIZE MEANS THAT FORMAT CODE N IS PROBABLY WRONG!":IFLPT%=1THENLPRINT"WARNING: MORE THAN ONE SECTOR SIZE MEANS THAT FORMAT CODE N IS PROBABLY WRONG! 1310 IFDA%(TR%)>1THENERM%=ERM%+1 1320 FS%=FS%+256:NEXTTR%:POKE&HED,LP1%:POKE&HEE,LP2%:IFERM%=0THENPRINT"All tracks analyzed have IBM standard format.":IFLPT%=1THENLPRINT"All tracks analyzed have IBM standard format. 1350 IFBO%>0THENST%=0:DR%=1:POKE49,2:PRINT"Formatting destination diskette, side";HD%:GOSUB10930:SD%=0:DR%=1:GOTO2330 1360 IFSBR%=1THENRETURN 1370 BEEP:PRINT"Press any key to continue. 1380 IFINKEY$=""GOTO1380 1390 GOTO540 1400 TR%=ST%-1 1410 TR%=TR%+1:PRINT"":PRINT"Modify format table for which track (type Q to quit)";TR%;" ";:GOSUB12430:TR$=KB$:IFTR$="Q"ORTR$="q"GOTO540 1430 IFLEN(TR$)<>0THENTR%=VAL(TR$) 1440 FS%=LFE%+256*TR%:GOSUB12530:NS%=PEEK(FS%):LN%=PEEK(FS%+1):IFNS%<>0THENPRINT"Track ";TR%;" contains ";NS%;" sectors of length code ";LN%:GOTO1470 1460 PRINT"Track ";TR%;" is not formatted. 1470 PRINT"What length code do you want for this track? NOTE: Code=1 means 256 bytes/sec, Code=2 means 512 bytes/sec (IBM standard), etc. ";:PRINTLN%;" ";:GOSUB12430:LN$=KB$:IFLEN(LN$)<>0THENLN%=VAL(LN$) 1490 IFLN%>6GOTO1550 1500 PRINT"How many sectors do you want on this track ";:PRINTNS%;" ";:GOSUB12430:NS$=KB$:IFLEN(NS$)<>0THENNS%=VAL(NS$) 1520 IFNS%<37GOTO1560 1550 BEEP:PRINT"Too many bytes. Please retype.":GOTO1470 1560 POKEFS%,NS%:POKEFS%+1,LN% 1570 YN$="N":PRINT"Do you want to clear out any CRC errors on this track ";YN$;" ";:GOSUB12430:IFKB$=""ORKB$="N"ORKB$="n"GOTO1600 1580 IFKB$<>"y"ANDKB$<>"Y"THENBEEP:GOTO1570 1590 FORINS%=1TONS%:POKEFS%+5*INS%-3,0:NEXTINS% 1600 SN%=0 1610 KEY1,"":KEY2,"":KEY3,"":KEY4,"":KEY5,"":KEY6,"":KEY7,"":KEY8,"":SN%=SN%+1:IFSN%<=NS%THENPRINT"Which (physical) sector is to be modified (Type 0 if done) ";:PRINTSN%;" ";:GOSUB12430:SN$=KB$:GOTO1630 1620 GOTO1410 1630 IFLEN(SN$)<>0THENSN%=VAL(SN$) 1640 IFSN%=0GOTO1410 1650 IFSN%<1ORSN%>NS%GOTO1610 1660 K%=5*(SN%-1):MS%=PEEK(FS%+K%+2):MC%=PEEK(FS%+3+K%):MH%=PEEK(FS%+4+K%):MR%=PEEK(FS%+5+K%):MN%=PEEK(FS%+6+K%):MQ%=MS%AND&HF0:MHI%=(MQ%AND&HC0)/64:MLO%=(MQ%AND&H30)/16:IFMHI%=0ORMHI%=2THENMLO%=0 1665 MS%=4*MLO%+MHI% 1670 PRINT"F1: Display track format table F2: Edit this sector":PRINT"F3: Insert a sector BEFORE this sector F4: Remove this sector":PRINT"":PRINT"Current marks for sector";SN%;" are (D,C,H,R,N) (";MS%;",";MC%;",";MH%;",";MR%;",";MN%;") 1672 KEY1,"Disply":KEY2,"Edit ":KEY3,"Insert":KEY4,"Remove":ONKEY(1)GOSUB1676:ONKEY(2)GOSUB1677:ONKEY(3)GOSUB1678:ONKEY(4)GOSUB1679:KEY(1)ON:KEY(2)ON:KEY(3)ON:KEY(4)ON 1674 KY$=INKEY$:GOTO 1674 1676 FK%=1:RETURN1681 1677 FK%=2:RETURN1681 1678 FK%=3:RETURN1681 1679 FK%=4:RETURN1681 1681 FORI%=1TO4:KEY(I%)OFF:IFI%<>FK%THENKEYI%," 1682 NEXT:ONFK%GOTO1684,1698,1690,1694 1684 PRINT"Format Table for Track ";TR%;" (containing ";NS%;" size N=";LN%;" sectors)":IFLPT%=1THENLPRINT"FORMAT TABLE FOR TRACK ";TR%;" (containing ";NS%;" size N=";LN%;" sectors) 1685 PRINT"":PRINT" # D C H R N":IFLPT%=1THENLPRINT"":LPRINT" D C H R N 1686 FORINS%=1TONS%:PRINTUSING"##";INS%;:PRINT" ";:FORJNS%=1TO5:KNS%=FS%+5*INS%+JNS%-4:LNS%=PEEK(KNS%):IFJNS%=1THENLNS%=LNS%AND&HF0:LHI%=(LNS%AND&HC0)/64:LLO%=(LNS%AND&H30)/16:LNS%=4*LLO%+LHI%:IFLHI%=0ORLHI%=2THENLNS%=LHI% 1687 PRINTUSING"####";LNS%;:IFLPT%=1THENLPRINTUSING"####";LNS%; 1688 NEXT:PRINT"":IFLPT%=1THENLPRINT" 1689 NEXT:PRINT"":SN%=SN%-1:GOTO1610 1690 FORINS%=NS%TOSN%STEP-1:FORJNS%=1TO5:KNS%=FS%+5*INS%+JNS%-4:LNS%=PEEK(KNS%):IFJNS%=1THENLNS%=LNS%AND&HF0:LNS%=LNS%OR(INS%+1) 1692 POKEKNS%+5,LNS%:NEXT:NEXT:NS%=NS%+1:POKEFS%,NS%:KNS%=FS%+5*SN%-4:FORJNS%=1TO5:POKEKNS%+JNS%,0:NEXT:MS%=0:MC%=0:MH%=0:MR%=0:MN%=0:GOTO1698 1694 FORINS%=SN%TONS%:FORJNS%=1TO5:KNS%=FS%+5*INS%+JNS%-4:LNS%=PEEK(KNS%+5):IFJNS%=1THENLNS%=LNS%AND&HF0:LNS%=LNS%ORINS% 1695 POKEKNS%,LNS%:NEXT:NEXT:NS%=NS%-1:POKEFS%,NS%:PRINT"Sector";SN%;" has been deleted":SN%=SN%-1:GOTO1610 1698 PRINT"Type the new marks in the same format (or press ENTER) ";:GOSUB12430:MS$=KB$:IFLEN(MS$)=0GOTO1610 1700 JC%=LEN(MS$):IC%=INSTR(MS$,","):IFIC%<2GOTO1860 1720 MC$=RIGHT$(MS$,JC%-IC%):MS$=LEFT$(MS$,IC%-1):MS%=VAL(MS$):JC%=LEN(MC$):IC%=INSTR(MC$,","):IFIC%<2GOTO1860 1740 MH$=RIGHT$(MC$,JC%-IC%):MC$=LEFT$(MC$,IC%-1):MC%=VAL(MC$):JC%=LEN(MH$):IC%=INSTR(MH$,","):IFIC%<2GOTO1860 1770 MR$=RIGHT$(MH$,JC%-IC%):MH$=LEFT$(MH$,IC%-1):MH%=VAL(MH$):JC%=LEN(MR$):IC%=INSTR(MR$,","):IFIC%<2GOTO1860 1790 MN$=RIGHT$(MR$,JC%-IC%):MR$=LEFT$(MR$,IC%-1):MR%=VAL(MR$):MN%=VAL(MN$):IFMS%>15ORMS%<0GOTO1860 1810 IFMC%<0ORMC%>255GOTO1860 1820 IFMH%<0ORMH%>255GOTO1860 1830 IFMR%<0ORMR%>255GOTO1860 1840 IFMN%<0ORMN%>255GOTO1860 1850 GOTO1865 1860 BEEP:PRINT"Bad entry! Please retry.":GOTO1660 1865 MLO%=16*INT(MS%/4):MHI%=64*(MS%AND3):MS%=(MHI%+MLO%)ORSN%:POKEFS%+K%+2,MS%:POKEFS%+3+K%,MC%:POKEFS%+4+K%,MH%:POKEFS%+K%+5,MR%:POKEFS%+K%+6,MN%:GOTO1610 1890 FG%=TMS%:FH%=CHR%:NS%=PEEK(FS%):IFNS%=0ORNS%>36GOTO1920 1910 GOTO1940 1920 PRINT"Timing data cannot be found. ";:RETURN 1940 ST=0:FORI%=1TONS%:T1%=PEEK(FG%+2*I%-2):T2%=PEEK(FG%+2*I%-1):T=256*T2%+T1%:ST=ST+T:TM(I%)=T:NEXTI%:FORI%=1TONS% 2000 IFLPT%=1THENLPRINT"Sector";:LPRINTUSING"###";I%;:LPRINT" uses ";:LPRINTUSING"###.#";100*TM(I%)/ST;:LPRINT" percent of the track. 2010 PRINT"Sector ";:PRINT USING"###";I%;:PRINT" uses ";:PRINT USING"###.#";100*TM(I%)/ST;:PRINT" percent of the track.":NEXT I%:PRINT"":PRINT"Diskette speed is ";:PRINT USING"###.#";0.02264*ST;:PRINT" RPM.":PRINT"" 2020 IF LPT%=1 THEN LPRINT"":LPRINT"Diskette speed is ";:LPRINT USING"###.#";0.02264*ST;:LPRINT" RPM.":LPRINT"" 2030 RETURN 2050 DRI$="B 2070 PRINT"<R>egular or <A>borted Formatting? ";RA$;" ";:GOSUB12430:IFKB$=""THENKB$=RA$ 2090 IFKB$="A"ORKB$="a"GOTO13620 2100 IFKB$<>"R"ANDKB$<>"r"THENPRINT"Redo!":GOTO2070 2110 GOSUB10680:GOSUB10750:GOSUB10810:GOSUB10870:GOSUB13790:GOSUB12200 2170 IFFS$="S"THENGOSUB10970 2180 POKE49,2:GOSUB10930 2200 IF(PEEK(68)AND2)=2THENPRINT"Write Protected!!!":GOTO2640 2210 PRINT"":PRINT"DONE.":PRINT"":GOTO2640 2220 REM 2230 PRINT"":PRINT"SOURCE ";:GOSUB13420:IFKB$<>"N"ANDKB$<>"n"GOTO2260 2240 IFSPR%=0GOTO2260 2250 POKE49,13:POKE50,0:POKE51,0:POKE52,48:POKE53,0:POKE54,0:POKE55,0:POKE56,0:UU%=USR(UU%) 2260 SD%=DR%:GOSUB12200:PRINT"DESTINATION ";:GOSUB10680:IFSD%=DR%ANDPEEK(&HF2)=0GOTO2230 2270 GOSUB10750:GOSUB10810:GOSUB10870:GOSUB13370:GOSUB12200:BO%=0 2330 Z1%=ST%:Z2%=ET%:TR%=ST%:FS%=LFE%+256*ST%:GOSUB12530:SF%=0:FORI%=Z1%TOZ2%:ST%=I%:ET%=I%:NS%=PEEK(FS%):IFNS%=0GOTO2360 2350 PRINT"Copying track";I%;" side";HD%:POKE49,3:GOSUB10930 2360 ST%=Z1%:ET%=Z2%:IF(PEEK(68)AND2)=2GOTO2200 2380 TR%=I%:SF%=SF%+NS%:IFNS%=0THENPRINT"Track ";TR%;" not formatted!":GOTO2450 2400 FORSC%=1TONS%:Q%=5*(SC%-1)+2:BD%=PEEK(FS%+Q%):BD%=BD%/64:IFBD%=1ORBD%=3THENPRINT"CRC error in track ";TR%;", sector ";SC% 2440 NEXTSC% 2450 FS%=FS%+256:GOSUB12530:NEXTI%:IFBO%>0THENC%=2:V1%=0:V2%=HD%:V3%=0:V4%=1:DR%=1:ST%=0:S0%=1:GOTO8030 2480 GOTO2640 2490 IFMDTR%<>1THENPRINT"You cannot back up a sterile daughter diskette!!":GOTO1370 2492 PRINT"SOURCE ";:GOSUB 10680:SD%=DR%:GOSUB 12200:PRINT"DESTINATION ";:GOSUB 10680:GOSUB 12200:GOTO 2510 2500 PRINT"Insert the Disk Mechanic Master Disk (WRITE PROTECTED!) and press the S key.":PRINT" 2502 A$=INKEY$:IFA$<>"S"ANDA$<>"s"GOTO2502 2503 RETURN 2505 BEEP:PRINT"":PRINT"":PRINT"Insert the destination disk and press the D key when ready. 2506 A$=INKEY$:IFA$<>"d"ANDA$<>"D"GOTO2506 2507 RETURN 2510 BL%=SD%:DL%=DR%:ST%=0:ET%=39:SBR%=1:GH%=0:NS%=1:VF$="N":DMC%=1:SDX%=SD%:DRX%=DR%:GOSUB13045:SBR%=0:DMC%=0:POKE51,1:POKE53,SDX%:POKE57,DRX%:POKE55,0:POKE49,17:IFSDX%<>DRX%GOTO2515 2514 GOSUB2500:UU%=USR(UU%):GOSUB2505:POKE53,SDX% 2515 POKE 55,1:UU%=USR(UU%):PRINT"":PRINT"":GOTO 1370 2540 GOSUB 10680:GOSUB 10750:GOSUB 10810:GOSUB 11190:GOSUB 10870:POKE 49,14:POKE 50,0:POKE 53,S0%:POKE 54,S0%:POKE 55,ET%:POKE 56,ST%:POKE 57,DR%:POKE 58,HD%:POKE &HF2,0:POKE &H3D,0:DEF SEG=SE%:DEF USR=UR%:UU%=USR(UU%) 2550 IFPEEK(&H44)=1ANDPEEK(&H45)=0THENPRINT"Destination Track is Unformatted":GOTO2640 2580 PRINT"First sector seen on end track is marked (C,H,R,N): ";:PRINTPEEK(&H46);",";PEEK(&H47);",";PEEK(&H48);",";PEEK(&H49):FS%=LFE%+256*ST%+5*S0%-3:RE%=0:GOSUB12530 2600 GS%=PEEK(FS%):HS%=GS%/64:IFHS%=1ORHS%=3THENPRINT"CRC error in starting sector. ":RE%=1 2610 IFRE%=1GOTO2640 2620 RE=(256*PEEK(54)+PEEK(53))/131:PRINT"":PRINT"Gap between sectors is ";:PRINTUSING"###.#";RE;:PRINT" percent of the track. 2640 BEEP:PRINT"":PRINT"Press any key to continue. 2650 IFINKEY$=""GOTO2650 2660 POKE&HFB,0:POKE&HFC,0:POKE&HFD,0:GOTO540 2860 K%=31 2870 LOCATE8+C%,K%,1:C$(1)=INKEY$:IFC$(1)=""GOTO2870 2880 I%=1:GOSUB3170:IFER%<>0GOTO2870 2890 PRINTC$(1); 2900 LOCATE8+C%,K%+1,1:C$(2)=INKEY$:IFC$(2)=""GOTO2900 2910 I%=2:GOSUB3170:IFER%=1GOTO2900 2920 IFER%=2GOTO2870 2930 PRINTC$(2); 2940 LOCATE8+C%,K%+3,1:C$(3)=INKEY$:IFC$(3)=""GOTO2940 2950 I%=3:GOSUB3170:IFER%=1GOTO2940 2960 IFER%=2GOTO2900 2970 PRINTC$(3) 2980 LOCATE8+C%,K%+4,1:C$(4)=INKEY$:IFC$(4)=""GOTO2980 2990 I%=4:GOSUB3170:IFER%=1GOTO2980 3000 IFER%=2GOTO2940 3010 PRINTC$(4); 3020 C$(5)=INKEY$:IFC$(5)=""GOTO3020 3030 IFASC(C$(5))=8GOTO2980 3040 ADR=C%(4)+16*(C%(3)+16*(C%(2)+16*C%(1))):C1%=PEEK(ADR):C8%=INT(C1%/16):C9%=C1%-16*C8%:LOCATE8+C%,61:PRINTLT$(C8%);LT$(C9%):GOTO3060 3060 K%=61:LOCATE8+C%,K%,1:C$(1)=INKEY$:IFC$(1)=""GOTO3060 3070 I%=1:GOSUB3170:IFER%<>0GOTO3060 3080 PRINTC$(1);:IFC%<2GOTO3130 3090 LOCATE8+C%,K%+1,1:C$(2)=INKEY$:IFC$(2)=""GOTO3090 3100 I%=2:GOSUB3170:IFER%=1GOTO3090 3110 IFER%=2GOTO3060 3120 PRINTC$(2); 3130 ER%=0:C$(5)=INKEY$:IFC$(5)=""GOTO3130 3140 IFASC(C$(5))=8ANDC%<2GOTO3060 3150 IFASC(C$(5))=8GOTO3090 3160 POKEADR,16*C%(1)+C%(2):RETURN 3170 ER%=0:FORJ%=0TO15:IFLT$(J%)=C$(I%)THENC%(I%)=J%:RETURN 3190 NEXTJ%:ER%=1:IFASC(C$(I%))=8THENER%=2 3210 RETURN 3310 KEYOFF:FORKY%=1TO8:KEYKY%,"":KEY(KY%)OFF:NEXTKY%:GOSUB11650:KEYON:ONERRORGOTO12100 3330 CLS:KEYOFF:GOSUB220:KEY1,"DSKDIR":KEY2,"ALLOCT":KEY3,"COMFAT":KEY4,"DISPLY":KEY5,"ZERO ":KEY6,"UNKILL":KEY7,"HIDDEN":KEY8,"SEARCH":GOSUB11650 3350 ONKEY(1)GOSUB11960:ONKEY(2)GOSUB11970:ONKEY(3)GOSUB11980:ONKEY(4)GOSUB11990:ONKEY(5)GOSUB12000:ONKEY(6)GOSUB12010:ONKEY(7)GOSUB12020:ONKEY(8)GOSUB12030:ONKEY(10)GOSUB10670:FORI%=1TO8:KEY(I%)OFF:NEXTI% 3370 PRINT"":PRINT"":PRINTSPC(32);"2. File Tools":PRINT"":PRINTSPC(5);"F1: Disk directory ":PRINTSPC(5);"F2: Disk or file allocation":PRINTSPC(5);"F3: Compare file allocation tables":PRINTSPC(5);"F4: Display or alter files 3420 PRINTSPC(5);"F5: Zero unallocated sectors":PRINTSPC(5);"F6: Kill or resuscitate (unkill) file":PRINTSPC(5);"F7: Change `hidden` status":PRINTSPC(5);"F8: Search for file data 3460 LOCATE18,1:IFPZ%=1THENGOSUB10680:PRINT"Reading directory on drive ";LT$(DR%+10);". Please wait one minute!":GOSUB3870:PZ%=0:BEEP 3470 FORI%=18TO22:LOCATEI%,1:PRINTSPACE$(80);:NEXTI%:LOCATE23,1:PRINTSPACE$(60);:LOCATE18,1:FORI%=1TO8:KEY(I%)ON:NEXTI%:KEYON 3490 KY$=INKEY$:GOTO 3490 3500 LOCATE8+C%,1:PRINT"*";:LOCATE18,1:ONKEY(10)GOSUB12040:GOSUB12090:DRI$="A":IFC%=1GOTO3700 3560 IFC%=3GOTO4420 3570 IFC%=4GOTO8920 3580 IFC%=5GOTO4540 3590 IFC%=7GOTO9540 3600 IFC%=8GOTO9380 3610 IFC%=2THENKEY1,"FILE":KEY2,"DISK":ONKEY(1)GOSUB12050:ONKEY(2)GOSUB12060 3620 IFC%=6THENKEY1,"KILL":KEY2,"UNKILL":ONKEY(1)GOSUB12070:ONKEY(2)GOSUB12080 3630 GOSUB11650:KEY(1)ON:KEY(2)ON 3640 KY$=INKEY$:GOTO 3640 3650 IFCC%=1THENJZ%=0:GOTO4740 3670 IFCC%=2THENPRINT"Constructing disk allocation map. Please be patient.":GOTO5060 3680 IFCC%=3GOTO9650 3690 IFCC%=4GOTO9880 3700 IC%=0:CLS:FORI%=0TOZ2%:N5%=ASC(LEFT$(DR$(I%),1)):IFN5%<33ORN5%>90GOTO3820 3730 PRINTLEFT$(DR$(I%),8);".";RIGHT$(DR$(I%),3);:IFLPT%=1THENLPRINTLEFT$(DR$(I%),8);".";RIGHT$(DR$(I%),3); 3740 PRINTUSING"#####";AT%(I%);:PRINT" ";:IFLPT%=1THENLPRINTUSING"#####";AT%(I%);:LPRINT" "; 3750 K=F1%(I%):IFK<0THENK=K+SQ 3760 L=F2%(I%):IFL<0THENL=L+SQ 3770 L%=INT(K/512):L=128*L+L%:IFK>512*L%THENL=L+1 3780 K%=L:L%=2*INT(K%/2):IFL%<>K%ANDDS%=0THENK%=K%+1 3790 PRINTUSING"###";K%;:PRINT" ";:IFLPT%=1THENLPRINTUSING"###";K%;:LPRINT" "; 3800 IC%=IC%+1:IFIC%=3THENIC%=0 3810 IFIC%=0ORPC%(17)=40THENPRINT"":IFLPT%=1THENLPRINT" 3820 NEXTI% 3830 PRINT"":IFLPT%=1THENLPRINT" 3840 BEEP:PRINT"Press any key to continue. 3850 IFINKEY$=""GOTO3850 3860 GOTO3330 3870 POKE&H2D0E,N89%:SD%=0:POKE50,0:ST%=0:ET%=39:HD%=0:SS%=1:ES%=N89%:GOSUB10970:POKE49,4:ET%=0:GOSUB10930:POKE&HFE,0:POKE&HFF,2*N89%:FS%=RST%:I%=0:TL$=" ":D2%=PEEK(FS%+512):DS%=1:IFD2%=255ORD2%=253THENDS%=2 3930 N98%=8:IFD2%=253ORD2%=252THENN98%=9 3940 IFN98%<>N89%THENN89%=N98%:GOTO3870 3950 PRINT"Diskette has";N89%;" sectors per track.":GOSUB4370:FS%=FS%+FAT2%:Z1%=0:Z2%=N64%-1 3970 FORI%=Z1%TOZ2%:J%=PEEK(FS%):IFJ%=229ORJ%=0THENDR$(I%)=CHR$(13):GOTO4160 3990 FORJ%=0TO10:K%=PEEK(FS%+J%):MID$(TL$,J%+1,1)=CHR$(K%):IFK%>127THENMID$(TL$,J%+1,1)=" 4020 NEXTJ%:DR$(I%)=TL$:AT%(I%)=PEEK(FS%+11):S1%=PEEK(FS%+26):S2%=PEEK(FS%+27):S=256*S2%+S1%:IFS<=32767THENS%=S:GOTO4080 4070 S%=S-SQ 4080 SC%(I%)=S%:S1%=PEEK(FS%+28):S2%=PEEK(FS%+29):S3%=PEEK(FS%+30):S4%=PEEK(FS%+31):S=256*S2%+S1%:IFS<=32767THENS%=S:GOTO4120 4110 S%=S-SQ 4120 F1%(I%)=S%:S=256*S4%+S3%:IFS<=32767THENS%=S:GOTO4150 4140 S%=SQ-S 4150 F2%(I%)=S% 4160 FS%=FS%+32:NEXTI%:IFDS%<=1GOTO4220 4190 PRINT"Diskette is two-sided. Directory will be checked on both sides.":DS%=0:ET%=0:ST%=0:HD%=1:GOSUB10970:POKE49,4:GOSUB10930:Z1%=N64%:Z2%=111:FS%=RST%:GOTO3970 4220 IFDS%<>0GOTO4240 4230 ET%=0:ST%=0:HD%=0:GOSUB10970:POKE49,4:GOSUB10930 4240 FS%=RST%+512:G%=1:H%=0:FORI%=2TOCM%:G%=G%+1:IFH%=0THENG%=G%+1 4270 K1%=PEEK(FS%+G%):K2%=PEEK(FS%+G%+1):IFH%=1THENFA%=INT(K1%/16):FA=16*K2%+FA% 4290 IFH%=0THENFA%=INT(K2%/16):FA%=K2%-16*FA%:FA=256*FA%+K1% 4300 IFH%=0THENHH%=1:GOTO4320 4310 HH%=0 4320 H%=HH%:FA%=FA:FA%(I%)=FA%:NEXTI%:RETURN 4370 FAT1%=512:FAT2%=1536:IFN89%=9THENFAT1%=1024:FAT2%=2560 4380 N64%=64:IFN89%=8AND(DS%=2ORDS%=0)THENN64%=80 4390 CM%=314:IFN89%=8AND(DS%=2ORDS%=0)THENCM%=316 4400 IFN89%=9THENCM%=352:IFDS%=2ORDS%=0THENCM%=355 4410 RETURN 4420 TR%=0:HD%=0:GOSUB6660:FS%=RST%+512:GS%=FS%+FAT1%:MS%=0:CFE%=FAT1%-1:FORCF%=0TOCFE%:IFPEEK(FS%)=PEEK(GS%)GOTO4500 4470 MS%=MS%+1:CX=CF%:MH$=HEX$(CX):PRINT"Discrepancy at byte ";MH$;:IFLPT%=1THENLPRINT"Discrepancy at byte ";MH$; 4480 CX=PEEK(FS%):MH$=HEX$(CX):PRINT",sector 2 byte=";MH$;:IFLPT%=1THENLPRINT",sector 2 byte=";MH$; 4490 CX=PEEK(GS%):MH$=HEX$(CX):PRINT",sector";N89%-5;" byte=";MH$:IFLPT%=1THENLPRINT",sector";N89%-5;" byte=";MH$ 4500 FS%=FS%+1:GS%=GS%+1:NEXTCF%:IFMS%=0THENPRINT"Sector 2 and sector";N89%-5;" file allocation tables are identical. 4530 GOTO3830 4540 PRINT"ARE YOU SURE <Y/N>? This routine zeros out all unallocated sectors! ";:GOSUB12430:YN$=KB$:IFYN$="Y"ORYN$="y"GOTO4570 4560 GOTO3330 4570 NS%=1:IFDS%=0THENNS%=2 4580 NNS%=NS%:FORCF%=2TOCM%:IFFA%(CF%)<>0GOTO4710 4610 CU%=CF%:GOSUB10980 4620 ST%=TR%:ET%=TR%:S0%=SC%:GOSUB10970:TR%=ST%:SC%=S0%:GOSUB6660:ES%=4*(SC%-1):SS%=ES%+4*NS%:POKE49,8:POKE50,0:GOSUB10930:NBS4%=SC%+NS%-1:IFNBS4%=10THENNBS4%=9 4660 PRINT"Zeroing out sectors";SC%;" to";NBS4%;" on track";TR%;",side";HD%:POKE49,5:POKE51,SC%:POKE52,NBS4%:POKE55,TR%:POKE56,TR%:POKE57,DR%:POKE58,HD%:DEFSEG=SE%:DEFUSR=UR%:UU%=USR(UU%):IFDS%=0ANDSC%=9THENNS%=1:SC%=1:HD%=1:GOTO4620 4700 NS%=NNS% 4710 NEXTCF%:ST%=0:ET%=0:SS%=1:ES%=250:HD%=0:GOSUB10970:TR%=0:POKE49,4:GOSUB10930:GOTO3830 4740 LOCATE21,1:PRINT"Please type the file name in CAPS! ";:GOSUB12430:FI$=KB$ 4750 DP%=INSTR(FI$,"."):IFDP%=0THENFI$=FI$+". ":GOTO4750 4760 IFDP%<2GOTO4740 4770 TL$=" ":MID$(TL$,1,DP%-1)=FI$:MID$(TL$,9,3)=RIGHT$(FI$,3):FORI%=0TOZ2%:IFTL$=DR$(I%)GOTO4840 4820 NEXTI%:BEEP:PRINT"Can't find this file. Please retype.":GOTO4740 4840 CU%=SC%(I%):GOSUB10980:SL%=1:TL%=1:AD%=1:IFDS%=0THENAD%=2:TL%=AD%:SL%=AD% 4850 SG%=1:PRINT"File starts at track";TR%;", side";HD%;", sector";SC%:IFLPT%=1THENLPRINT"File starts at track";TR%;", side";HD%;", sector";SC% 4860 NC%=FA%(CU%):IFJZ%=1THENRETURN 4880 IFNC%=0ANDLPT%=1THENGOSUB10980:LPRINT"Error in file allocation table, byte";INT(3*CU%/2);" (track";TR%;",side";HD%;",sector";SC%;" not allocated. 4890 IFNC%=0THENGOSUB10980:PRINT"Error in file allocation table, byte";INT(3*CU%/2);" (track";TR%;",side";HD%;",sector";SC%;" not allocated.":GOTO5030 4900 IF(NC%>4079ANDNC%<4088ANDLPT%=1)THENGOSUB10980:LPRINT"Error in file allocation table, byte";INT(3*CU%/2);" (track";TR%;",side";HD%;",sector";SC%;" is reserved or bad. 4910 IFNC%>4079ANDNC%<4088THENGOSUB10980:PRINT"Error in file allocation table, byte";INT(3*CU%/2);" (track";TR%;",side";HD%;",sector";SC%;" is reserved or bad.":GOTO5030 4920 XA%=0:IFDS%=0ANDNC%>4087THENXA%=1 4930 IFNC%<4088GOTO4980 4940 GOSUB10980:IFXA%=1ANDN89%=9ANDSC%=9THENHD%=1:SC%=0 4960 IFLPT%=1THENLPRINT"End of file at track";TR%;",side";HD%;",sector";SC%+XA%;". File is";TL%;" sectors long. 4970 PRINT"End of file at track";TR%;",side";HD%;",sector";SC%+XA%;". File is";TL%;" sectors long.":GOTO5030 4980 IFNC%=CU%+1THENSL%=SL%+AD%:TL%=TL%+AD%:CU%=NC%:GOTO4860 4990 TL%=TL%+AD%:PRINT"Length of segment #";SG%;" is";SL%;" sectors.":IFLPT%=1THENLPRINT"Length of segment #";SG%;" is";SL%;" sectors. 5010 IFLPT%=1THENCU%=NC%:GOSUB10980:LPRINT"Next segment begins at track";TR%;", side";HD%;", sector";SC% 5020 CU%=NC%:GOSUB10980:PRINT"Next segment begins at track";TR%;",side";HD%;",sector";SC%:SG%=SG%+1:SL%=AD%:GOTO4860 5030 BEEP:PRINT"":PRINT"Press any key to continue. 5040 IFINKEY$=""GOTO5040 5050 GOTO3330 5060 FORI%=0TO85:FORJ%=0TO8:FORK%=0TO1:DT%(I%,J%,K%)=0:NEXTK%,J%,I%:LOCATE21,1:FORI%=0TOZ2%:IFASC(DR$(I%))=13GOTO5160 5100 CU%=SC%(I%):GOSUB10980 5110 DT%(TR%,SC%-1,HD%)=I%+1:NC%=FA%(CU%):IFNC%=0GOTO5160 5130 IFNC%>4087GOTO5160 5140 IFNC%>4079ANDNC%<4088THENDT%(TR%,SC%-1,HD%)=NC%:GOTO5160 5150 CU%=NC%:GOSUB10980:GOTO5110 5160 NEXTI%:BEEP:TP%=1:LL%=0:MM%=0:IFDS%=0THENMM%=1:TP%=2 5190 FORI%=0TO39:FORK%=0TOMM%:NBS6%=N89%-1:FORJ%=0TONBS6%STEPTP%:JQJ%=J%:IFK%=1ANDN89%=9THENJQJ%=JQJ%+1:IFJQJ%=9GOTO5340 5240 L%=DT%(I%,JQJ%,K%):IFL%=LL%GOTO5340 5260 PRINT"Track";I%;",side";K%;",sector";JQJ%+1;:IFLPT%=1THENLPRINT"Track";I%;",side";K%;",sector";JQJ%+1; 5270 IFDS%=0THENPRINT" to";JQJ%+2;:IFLPT%=1THENLPRINT" to";JQJ%+2; 5280 IFL%=0ANDLPT%=1THENLPRINT" is unallocated. 5290 IFL%=0THENPRINT" is unallocated.":GOTO5330 5300 IFL%>4079ANDL%<4088ANDLPT%=1THENLPRINT" is defective. 5310 IFL%>4079ANDL%<4088THENPRINT" is defective.":L%=2000:GOTO5330 5320 PRINT" belongs to ";DR$(L%-1):IFLPT%=1THENLPRINT" belongs to ";DR$(L%-1) 5330 LL%=L% 5340 NEXTJ%:NEXTK%:NEXTI%:GOTO5030 5380 GOSUB6670:SC%=1:GOSUB6590:GOSUB6190:GOSUB5920 5410 II%=3:JJ%=5:LOCATEII%,JJ%,1:LT%=3:LB%=18:LL%=5:LR%=74:IFPC%(17)=40THENLR%=38:IFLR%=38ANDHX%=1THENLR%=37 5430 FORTT%=1TO10:KEY(TT%)ON:NEXTTT%:KEY(6)OFF:KEY(8)OFF:KEYON 5440 A$=INKEY$:IFA$=""GOTO5440 5450 DEFSEG:POKE106,0:DEFSEG=SE%:A%=ASC(A$):AAA%=LEN(A$):IFAAA%=2THENA%=ASC(RIGHT$(A$,1)) 5470 IFAAA%=2AND(A%<72ORA%>80)GOTO5440 5480 IFAAA%=1GOTO5640 5490 IFA%<>72GOTO5520 5500 II%=II%-1:IFII%<LT%THENII%=LT% 5510 LOCATEII%,JJ%,1:GOTO5430 5520 IFA%<>80GOTO5550 5530 II%=II%+1:IFII%>LB%THENII%=LB% 5540 GOTO5510 5550 IFA%<>75GOTO5580 5560 JJ%=JJ%-1:IFJJ%<LL%THENJJ%=LR%:GOTO5500 5570 GOTO5620 5580 IFA%<>77GOTO5640 5590 JJ%=JJ%+1:IFJJ%>LR%THENJJ%=LL%:GOTO5530 5600 IFLF%(JJ%)=0GOTO5590 5610 GOTO5510 5620 IFLF%(JJ%)=0GOTO5560 5630 GOTO5510 5640 LF%=LF%(JJ%):KK%=A%:FW%=0:IFLF%>16GOTO5730 5660 PRINTA$;:A%=77:TD%(16*(II%-3)+LF%-1)=KK%:M1%=INT(KK%/16):M2%=KK%-16*M1%:A1$=LT$(M1%):A2$=LT$(M2%):FORLK%=5TO52:IF(LF%(LK%)-16)=LF%GOTO5720 5700 NEXTLK%:GOTO5590 5720 LOCATEII%,LK%:PRINTA1$;A2$;:GOTO5590 5730 IFKK%<48GOTO5440 5740 IFKK%>57ANDKK%<65GOTO5440 5750 IFKK%>70THENKK%=KK%-32:GOTO5730 5760 KK%=KK%-48:IFKK%>9THENKK%=KK%-7 5770 IFKK%<0ORKK%>15GOTO5440 5780 PRINTLT$(KK%);:DG%=LF%-16:IFDG%>16THENDG%=DG%-16 5790 M1%=16*(II%-3)+DG%-1:IFTD%(M1%)=256THENTD%(M1%)=PEEK(RST%+512*(SC%-1)+256*HS%+M1%-SPR%*&H1800) 5800 TD%=TD%(M1%):M2%=INT(TD%/16):M3%=TD%-16*M2%:IFLF%<33THENM2%=KK%:GOTO5840 5830 M3%=KK% 5840 TD%=16*M2%+M3%:TD%(M1%)=TD%:FORLK%=57TO74:IFLF%(LK%)=DG%GOTO5890 5870 NEXTLK%:GOTO5910 5890 LOCATEII%,LK%,1:IFTD%<32ORTD%>126THENPRINTB$;:GOTO5910 5900 PRINTCHR$(TD%); 5910 A%=77:GOTO5590 5920 CLS:B$=".":GOSUB12360:LOCATE1,1:PRINT" Drive=";LT$(DR%+10);", track=";TR%;", side=";HD%;", sector=";SC1%;", section=";POR:IFLPT%=1THENLPRINT"Drive=";LT$(DR%+10);", track=";TR%;", sector=";SC1%;", section=";POR 5940 IFFW%=1GOTO5960 5950 CN%=256:FORCMC%=0TO255:TD%(CMC%)=CN%:NEXTCMC% 5960 FW%=1:POKE49,15:POKE50,0:POKE53,SPR%:POKE54,4*SC%+2*HS%-4:DEFSEG=SE%:DEFUSR=UR%:UU%=USR(UU%):LOCATE3,5:IFLPT%=0THENRETURN 5980 FS%=RST%+512*(SC%-1)+256*HS%-SPR%*&H1800:IC%=0:LPRINT"":FORI%=0TO15:LPRINT" ";LT$(I%);":";:FORJ%=0TO15:K%=PEEK(FS%+J%):TD%(IC%+J%)=K%:M1%=INT(K%/16):M2%=K%-16*M1%:LPRINTLT$(M1%);LT$(M2%);:LPRINT" ";:IFJ%=7THENLPRINT" "; 6060 NEXTJ%:LPRINT" ";:FORJ%=0TO15:A$=B$:K%=PEEK(FS%+J%):IFK%<32ORK%>126GOTO6120 6110 A$=CHR$(K%) 6120 LPRINTA$;:IFJ%=7THENLPRINT" "; 6140 NEXTJ%:LPRINT"":FS%=FS%+16:IC%=IC%+16:NEXTI%:RETURN 6190 FORLF%=1TO4:LF%(LF%)=0:NEXTLF%:FORLF%=1TO8:M1%=LF%+LF%+LF%+2:M2%=M1%+1:M3%=M2%+1:M4%=M1%+26:M5%=M2%+26:M6%=M3%+26:M7%=LF%+56:M8%=LF%+66 6220 LF%(M1%)=16+LF%:LF%(M2%)=32+LF%:LF%(M3%)=0:LF%(M4%)=24+LF%:LF%(M5%)=40+LF%:LF%(M6%)=0:LF%(M7%)=LF%:LF%(M8%)=LF%+8:NEXTLF%:LF%(29)=0:LF%(30)=0:LF%(55)=0:LF%(56)=0:LF%(65)=0:LF%(66)=0:RETURN 6250 SPR%=0:TR%=TR%+1:GOSUB6670:SC%=1:HS%=0 6270 GOSUB6660:GOSUB5920:RETURN5410 6290 SPR%=0:TR%=TR%-1:IFTR%<0THENTR%=0 6300 GOSUB6670:SC%=1:HS%=0:GOTO6270 6320 HS%=HS%+1:IFHS%=2THENHS%=0:SC%=SC%+1 6330 GOSUB6670:GOSUB12360:IFSC1%>PEEK(FS%)GOTO6250 6350 GOSUB5920:RETURN5410 6360 HS%=HS%+1:IFHS%=2THENHS%=0:GOTO6380 6370 SC%=SC%-1 6380 GOSUB6670:IFSC%>0THENGOSUB5920:RETURN5410 6390 SPR%=0:TR%=TR%-1:IFTR%<0THENTR%=0:SC%=1:HS%=0:RETURN5410 6400 FS%=LFE%+256*TR%:GOSUB12530:NS%=PEEK(FS%):IFNS%=0GOTO6290 6410 PD=0:FORDP%=1TONS%:PE%=PEEK(FS%+1+5*DP%):IFPE%>5THENPE%=6 6420 PD=PD+PAG(PE%):NEXTDP%:SC%=INT(PD/2):HS%=1:IF(2*SC%+0.1)<PDTHENSC%=SC%+1:HS%=0 6440 GOTO6270 6460 BEEP:KEY7,"WAIT":GOSUB11650:FS%=RST%+512*(SC%-1)+256*HS%-SPR%*&H1800:CN%=256:FORCMC%=0TO255:IFTD%(CMC%)=CN%GOTO6490 6480 POKEFS%,TD%(CMC%):TD%(CMC%)=CN% 6490 FS%=FS%+1:NEXT CMC%:FW%=1:BEEP:IF SPR%=1 THEN POKE &H19,0:POKE 49,13:POKE 53,0:POKE 54,0:POKE 55,0:POKE 56,0:POKE 51,0:POKE 52,48:UU%=USR(UU%):POKE &H19,1 6510 ET%=TR%:ST%=TR%:SS%=1:ES%=250:POKE 50,0:POKE 49,5:GOSUB 10930:IF(PEEK(68)AND 2)=2 THEN KEY 7,"WP!":BEEP:BEEP:BEEP:GOTO 6540 6530 BEEP:KEY7,"SAVE 6540 GOSUB11650:RETURN5410 6550 SPR%=0:HD%=HD%+1:IFHD%=2THENHD%=0 6560 GOSUB6670:ST%=0:ET%=39:ZT%=TR%:ZS%=SC%:GOSUB10970:TR%=ZT%:SC%=ZS%:GOTO6270 6590 KEY10,"MENU":KEY2,"T+1":KEY1,"T-1":KEY4,"S+1":KEY3,"S-1":KEY7,"SAVE":KEY5,"SIDE":KEY6,"":KEY8,"":GOSUB11650:ONKEY(2)GOSUB6250:ONKEY(1)GOSUB6290:ONKEY(4)GOSUB6320:ONKEY(3)GOSUB6360:ONKEY(7)GOSUB6460:ONKEY(5)GOSUB6550:RETURN 6660 ET%=TR%:ST%=TR%:SS%=1:ES%=250:POKE50,0:GOSUB11170:POKE49,4:GOSUB10930:RETURN 6670 FORTT%=1TO8:KEY(TT%)STOP:NEXTTT%:RETURN 6680 KEYOFF 6690 CLS:KEYOFF:ONERRORGOTO11940:FCN%=0 6700 FORKY%=1TO8:KEY(KY%)OFF:KEYKY%,"":NEXTKY%:KEY1,"DISPLY":KEY2,"COMP ":KEY3,"COPY ":KEY4,"ZERO ":KEY5,"SEARCH":ONKEY(10)GOSUB11640:ONKEY(9)GOSUB11660:ONKEY(1)GOSUB11870:ONKEY(2)GOSUB11880:ONKEY(3)GOSUB11890 6710 ONKEY(4)GOSUB11900:ONKEY(5)GOSUB11910:KEY6,"COMPTS":ONKEY(6)GOSUB11920:FORKY%=1TO6:KEY(KY%)ON:NEXTKY%:GOSUB11650:KEYON:GOSUB220:PRINT"":PRINT"":PRINTSPC(25);"1. Track and Sector Tools 6740 PRINT"":PRINTSPC(5);"F1: Display or modify sector data":PRINTSPC(5);"F2: Compare sector data":PRINTSPC(5);"F3: Copy sector data":PRINTSPC(5);"F4: Zero sector data":PRINTSPC(5);"F5: Search for data by sector 6790 PRINTSPC(5);"F6: Compare track (read) data to sector (read) data 6800 KY$=INKEY$:GOTO 6800 6810 ONKEY(10)GOSUB11930:LOCATE8+C%,1:PRINT"*";:LOCATE16,1:GOSUB13370:LOCATE18,1:IFC%=2ORC%=6GOTO7880 6850 IFC%=3THENDRI$="A":GOTO7400 6860 IFC%=4THENDRI$="B":GOTO6960 6870 IFC%=5GOTO8390 6880 IFC%<>1GOTO6680 6890 LOCATE18,1:GOSUB10680:GOSUB10810:POKE49,11:POKE50,0:POKE57,DR%:POKE58,HD%:POKE56,ST%:DEFUSR=UR%:DEFSEG=SE%:UU%=USR(UU%):SPR%=1:TR%=ST%:HX%=0:HS%=0:SC%=1:GOTO5380 6960 GOSUB10680:GOSUB10750:GOSUB10810:GOSUB12200:TR%=ST%:GOSUB11190:GOSUB11240:S4%=S0%:S7%=SF%:S5%=ST%:TR%=ST% 7030 FS%=LFE%+256*TR%:GOSUB12530:S1%=FS%:S2%=PEEK(S1%):S3%=PEEK(S1%+1):IFS2%>=S4%GOTO7070 7060 S4%=S4%-S2%:TR%=TR%+1:GOTO7030 7070 GOSUB6660:S9%=S2%-S4%+1:IFS9%>=S7%THENS9%=S7% 7100 S8%=4:IFS3%<6THENS8%=2^S3% 7110 AH%=S8%*(S4%-1):AL%=S8%*(S9%+S4%-1):SS%=AL%:ES%=AH%:POKE49,8:POKE50,0:GOSUB10930:SS%=S4%:ES%=SS%+S9%-1:POKE49,5:GOSUB10930:S4%=1:S7%=S7%-S9%:IFS7%>0THENTR%=TR%+1:GOTO7030 7170 WR$="Probable CRC":BO%=0 7190 FS%=LFE%+256*S5%:PRINT"Please wait a moment. Checking for CRC errors.":ERM%=0:PRINT"":FORT4%=S5%TOTR%:LOCATE23,1:PRINT"Checking track ";T4%;:GOSUB12530:Q1%=PEEK(FS%):Q%=2:IFQ1%=0GOTO7300 7250 FORS4%=1TOQ1%:Q3%=PEEK(FS%+Q%):Q2%=INT(Q3%/64):IFQ2%=1ORQ2%=3THENPRINT"":ERM%=ERM%+1:PRINTWR$;" error in track";T4%;", sector";S4%:PRINT"":POKEFS%+Q%,Q3%-64*Q2% 7280 Q%=Q%+5:NEXTS4% 7300 FS%=FS%+256:NEXTT4%:IFERM%>0GOTO7340 7330 PRINT"OK. No CRC errors found.":PRINT" 7340 ERM%=0:IFBO%=1GOTO12880 7350 IFBO%=2GOTO2510 7360 IFSBR%=1THENRETURN 7370 BEEP:PRINT"":PRINT"Press any key to continue. 7380 IFINKEY$=""GOTO7380 7390 GOTO6690 7400 PRINTSPC(10);"DATA SOURCE:":GOSUB13420:IFKB$<>"N"ANDKB$<>"n"GOTO7430 7410 IFSPR%=0GOTO7480 7420 POKE49,13:POKE50,0:POKE51,0:POKE52,48:POKE53,0:POKE54,0:POKE55,0:POKE56,0:UU%=USR(UU%):GOTO7480 7430 GOSUB10750:GOSUB10810:GOSUB11190:GOSUB11240:V1%=DR%:V2%=HD%:V3%=ST%:V4%=S0% 7480 PRINTSPC(10);"DATA DESTINATION:":GOSUB12200:GOSUB10680:GOSUB10750:GOSUB10810:GOSUB11190:GOSUB12200:IFPEEK(&HF2)=1THENV1%=DR%:V2%=HD%:V3%=ST%:V4%=SO%:GOSUB11240:GOTO7560 7560 U1%=DR%:U2%=HD%:U3%=ST%:U4%=S0%:S0%=V4%:S4%=S0%:S7%=SF%:S5%=V3%:R4%=U4%:R7%=SF%:R0%=U4%:R8%=U3% 7580 FS%=LFE%+256*V3%:GOSUB12530:S1%=FS%:S2%=PEEK(S1%):IFS2%>=S4%GOTO7620 7610 S4%=S4%-S2%:V3%=V3%+1:GOTO7580 7620 GOSUB12260:IFU1%<>V1%ORPEEK(&HF2)=1GOTO7660 7640 PRINT"Insert the SOURCE disk in drive ";LT$(U1%+10);" and press the S key when ready. 7650 GOSUB12430:IFKB$<>"S"ANDKB$<>"s"GOTO7650 7660 HD%=V2%:POKE25,0:GOSUB12230:POKE25,1:S9%=S2%-S4%+1:IFS9%>S7%THENS9%=S7% 7690 IFU1%<>V1%ORPEEK(&HF2)=1GOTO7720 7700 PRINT"Insert the DESTINATION disk in drive ";LT$(U1%+10);" and press the D key when ready. 7710 GOSUB12430:IFKB$<>"D"ANDKB$<>"d"GOTO7710 7720 FS%=LFE%+256*U3%:GOSUB12530:R1%=FS%:R2%=PEEK(R1%):IFR2%>=R4%GOTO7760 7750 R4%=R4%-R2%:U3%=U3%+1:GOTO7720 7760 GOSUB12310:R9%=R2%-R4%+1:T9%=R9%:IFR9%>S9%THENT9%=S9% 7790 PRINT"Copying sectors from track";V3%;" to track";U3%:POKE25,0:GOSUB11350:POKE25,1:HD%=U2%:GOSUB11170:GOSUB11310:IF(PEEK(68)AND2)=2THENPRINT"Write Protected!!!":GOTO7370 7840 IFS9%>R9%THENR4%=1:U3%=U3%+1:S4%=S4%+R9%:GOSUB12260:S7%=S7%-R9%:S9%=S9%-R9%:GOTO7720 7850 R4%=R4%+S9%:S4%=1:S7%=S7%-R9%:IFS7%>0THENV3%=V3%+1:GOTO7580 7870 TR%=U3%:S5%=R8%:GOTO7170 7880 PRINTSPC(10);"DATA SOURCE:":GOSUB10680:GOSUB10750:GOSUB10810:GOSUB11190:GOSUB11240:V1%=DR%:V2%=HD%:V3%=ST%:V4%=S0%:PRINTSPC(10);"DATA FOR COMPARISON:":GOSUB12200:GOSUB10680:GOSUB10750:GOSUB10810:BO%=0:GOSUB11190:GOSUB12200 8030 U1%=DR%:U2%=HD%:U3%=ST%:U4%=S0%:NC=0:R4%=U4%:R5%=U3%:S0%=V4%:S4%=S0%:S7%=SF%:S5%=V3% 8050 FS%=LFE%+256*V3%:GOSUB12530:S1%=FS%:S2%=PEEK(S1%):IFS2%>=S4%GOTO8090 8080 S4%=S4%-S2%:V3%=V3%+1:GOTO8050 8090 GOSUB12260:IFU1%=V1%THENPRINT"Insert the SOURCE disk in drive ";LT$(U1%+10);" and press the S key when ready."; 8110 IFU1%<>V1%GOTO8140 8120 KB$=INKEY$:IFKB$=""GOTO8120 8130 IFKB$<>"S"ANDKB$<>"s"GOTO8120 8140 IFC%=6THENGOSUB11270:GOTO8160 8150 HD%=V2%:GOSUB12230 8160 S9%=S2%-S4%+1:IFU1%=V1%THENPRINT"Insert the DESTINATION disk in drive ";LT$(U1%+10);" and press the D key when ready."; 8180 IFU1%<>V1%GOTO8210 8190 KB$=INKEY$:IFKB$=""GOTO8190 8200 IFKB$<>"D"ANDKB$<>"d"GOTO8190 8210 IFS9%>S7%THENS9%=S7% 8220 FS%=LFE%+256*U3%:GOSUB12530:R1%=FS%:R2%=PEEK(R1%):IFR2%>=R4%GOTO8260 8250 R4%=R4%-R2%:U3%=U3%+1:GOTO8220 8260 GOSUB12310:R9%=R2%-R4%+1:C9%=S9%:IFR9%<S9%THENC9%=R9% 8290 TR%=U3%:DR%=U1%:HD%=U2%:GOSUB6660:AX%=PTW%:BX%=PTR%:GOSUB12560:SX%=CX%:PRINT"Comparing source track";V3%;", side";V2%;" with destination track";U3%;", side";U2% 8320 GOSUB11400:IFCX%<>0THENGOSUB12620:NC=NC+1:AX%=PTW%+SX%-CX%:BX%=PTR%+SX%-CX%:PRINT"Source=";HEX$(PEEK(TRT%+BX%));",destination =";HEX$(PEEK(RST%+AX%)):AX%=AX%+1:BX%=BX%+1:CX%=CX%-1:IFCX%>0GOTO8320 8340 IFS9%>R9%THENR4%=1:S4%=S4%+R9%:GOSUB12260:S7%=S7%-R9%:U3%=U3%+1:S9%=S9%-R9%:GOTO8220 8350 R4%=R4%+S9%:S4%=1:S7%=S7%-R9%:IFS7%>0THENV3%=V3%+1:GOTO8050 8370 IFNC=0THENPRINT"":PRINT"All bytes compare ok. 8380 WR$="Probable CRC":S5%=R5%:TR%=U3%:GOTO7190 8390 PRINTSPC(10);"SECTORS TO BE SEARCHED:":JZ%=0:GOSUB10680:GOSUB10750:GOSUB10810:TR%=ST%:GOSUB11190:GOSUB11240:SC%=S0%:S7%=S0%+SF%-1:S5%=TR% 8470 PRINT"":PRINT"<H>ex or <A>scii character search ";:GOSUB12430:HA$=LEFT$(KB$,1):IFHA$<>"H"ANDHA$<>"h"ANDHA$<>"A"ANDHA$<>"a"THENBEEP:GOTO8470 8480 IFHA$="A"ORHA$="a"GOTO8850 8490 PRINT"":PRINT"Type the string to be searched for as a series of HEX characters (0-F)":PRINT"":LOCATE23,1,1:NC%=1:SG$=" 8510 A$=INKEY$:IFA$=""GOTO8510 8520 DEFSEG:POKE106,0:DEFSEG=SE%:A%=ASC(A$):IF(A%>47ANDA%<58)OR(A%>64ANDA%<71)GOTO8580 8540 IFA%=13GOTO8590 8550 IFA%<>8GOTO8510 8560 NC%=NC%-1:IFNC%=0THENNC%=1:LOCATE23,1,1:SG$="":PRINTSG$:LOCATE23,1,1:GOTO8510 8570 SG$=LEFT$(SG$,NC%-1):LOCATE23,1:PRINTSG$;:LOCATE23,NC%,1:GOTO8510 8580 PRINTA$;:SG$=SG$+A$:NC%=NC%+1:LOCATE23,NC%,1:GOTO8510 8590 MC%=INT((NC%-1)/2):IFMC%=0THENBEEP:PRINT"String too short. Retype.":GOTO8490 8600 FS%=TRT%:NC%=2*MC%-1:FORI%=1TONC%STEP2:J%=ASC(MID$(SG$,I%,1)):K%=ASC(MID$(SG$,I%+1,1)):J%=J%-48:IFJ%>9THENJ%=J%-7 8650 K%=K%-48:IFK%>9THENK%=K%-7 8660 K%=16*J%+K%:POKEFS%,K%:FS%=FS%+1:NEXTI% 8690 IFJZ%=1THENRETURN 8700 NC=0:PRINT" 8710 FS%=LFE%+256*TR%:GOSUB12530:S1%=FS%:S2%=PEEK(S1%):IFS2%>SC%GOTO8750 8740 SC%=SC%-S2%:TR%=TR%+1:GOTO8710 8750 S9%=S2%-SC%+1:IFS9%>S7%THENS9%=S7% 8770 GOSUB6660:GOSUB12830:R4%=SC%:U3%=TR%:C9%=S9%:GOSUB12560:BX%=AX%+CX%:CX=0:GOSUB11440:GOSUB11500:S7%=S7%-S9%:IFS7%>0THENSC%=1:TR%=TR%+1:GOTO8710 8820 IFNC=0THENPRINT"":PRINT"String not found. 8830 WR$="Reading":GOTO7190 8850 PRINT"":PRINT"Type the string to be searched for (normal Ascii characters).":GOSUB12430:SG$=KB$:IFLEN(SG$)=0THENBEEP:PRINT"String too short. Retype.":GOTO8850 8870 FS%=TRT%:NC%=LEN(SG$):FORI%=1TONC%:J%=ASC(MID$(SG$,I%,1)):POKEFS%,J%:FS%=FS%+1:NEXTI%:MC%=NC%:GOTO8690 8920 JZ%=1:GOSUB4740:FC%(0)=CU%:FC%(1)=NC%:I%=1 8950 IFNC%<1ORNC%>CM%GOTO8970 8960 I%=I%+1:NC%=FA%(NC%):FC%(I%)=NC%:GOTO8950 8970 J%=I%:IFDS%=0THENJ%=J%+J% 8980 PRINT"File is";J%;" sectors long. Which sector do you want to examine ";:GOSUB12430:K%=VAL(KB$):IFK%<1ORK%>J%GOTO8980 9000 CL%=0:CJ%=J%-1:CK%=K%-1:CMM%=1:IFDS%=0THENCK%=INT((K%-1)/2):CJ%=INT((J%-1)/2):CL%=K%-2*CK%-1:CMM%=3 9020 CU%=FC%(CK%):GOSUB10980:HS%=0:CH%=0:IFCL%=1THENSC%=SC%+1:CH%=2:IFSC%=10THENSC%=1:HD%=1 9030 GOSUB9050:GOSUB6670:GOSUB6660:GOSUB6190:GOSUB5920:GOSUB9320:GOTO5410 9050 KEYOFF:KEY1,"":KEY2,"":KEY4,"S+1":KEY3,"S-1":KEY6,"":KEY7,"SAVE":KEY8,"":KEY5,"":FORKY%=1TO8:KEY(KY%)OFF:NEXTKY%:KEY(3)ON:KEY(4)ON:KEY(7)ON:ONKEY(4)GOSUB9100:ONKEY(3)GOSUB9200:ONKEY(10)GOSUB9310:ONKEY(7)GOSUB6460 9080 GOSUB11650:KEYON:RETURN 9100 GOSUB6670:CH%=CH%+1:HS%=HS%+1:IFHS%=2THENHS%=0 9110 IFDS%=0ANDCH%=4THENCH%=0:GOTO9160 9120 IFN89%=9ANDDS%=0ANDSC%=9ANDCH%=2THENHD%=1:SC%=1:GOTO9190 9130 IFDS%=1ANDCH%=2THENCH%=0:GOTO9160 9140 IFHS%=0THENSC%=SC%+1 9150 GOSUB5920:GOSUB9320:RETURN5410 9160 LS%=0:CK%=CK%+1:IFCK%>CJ%THENCK%=CJ%:CH%=CMM%:HS%=1:LS%=1 9170 CU%=FC%(CK%):GOSUB10980:IFLS%=1ANDDS%=0THENSC%=SC%+1:IFSC%=10THENSC%=1:HD%=1:CH%=3 9190 GOSUB6660:GOTO9150 9200 GOSUB6670:CH%=CH%-1:HS%=HS%+1:IFHS%=2THENHS%=0 9210 IFCH%<0GOTO9250 9220 IFHS%=1THENSC%=SC%-1 9230 IFSC%=0THENSC%=N89%:HD%=0:GOTO9300 9240 GOSUB5920:GOSUB9320:RETURN5410 9250 IFDS%=0THENCH%=3 9260 IFDS%=1THENCH%=1 9270 XF%=1:CK%=CK%-1:IFCK%<0THENCK%=0:CH%=0:HS%=0:XF%=0 9280 CU%=FC%(CK%):GOSUB10980:IFDS%=0THENSC%=SC%+XF% 9290 IFSC%=10THENSC%=1:HD%=1:CH%=3:HS%=1 9300 GOSUB6660:GOTO9240 9310 RETURN3330 9320 FORTL%=1TO11:LOCATETL%+3,1:PRINTMID$(TL$,TL%,1);:NEXTTL%:CQ%=CK%+INT(CH%/2)+1:IFDS%=0THENCQ%=CQ%+CK% 9330 TL%=15:CK$=STR$(CQ%):CH$=STR$(HS%+1):FORKY%=1TOLEN(CK$):LOCATETL%,1:PRINTMID$(CK$,KY%,1);:TL%=TL%+1:NEXTKY%:LOCATETL%,1:PRINT".";:TL%=TL%+1:FORKY%=1TOLEN(CH$):LOCATETL%,1:PRINTMID$(CH$,KY%,1);:TL%=TL%+1:NEXTKY% 9360 IFLPT%=1THENLPRINTTL$;" ";CQ%;".";HS%+1 9370 RETURN 9380 JZ%=1:GOSUB4740:CUF%=CU%:RT%=250:DH%=RT%:NC=0:GOSUB8470:FCN%=1:FCX%=0:PRINT" 9430 GOSUB10980:IFDH%=HD%ANDTR%=RT%GOTO9460 9450 GOSUB6660:DH%=HD%:RT%=TR% 9460 S9%=1:IFDS%=0ANDSC%<>9THENS9%=2 9480 FS%=LFE%+256*TR%:GOSUB12530:GOSUB12830:R4%=SC%:U3%=TR%:C9%=S9%:GOSUB12560:BX%=AX%+CX%:CX=0:GOSUB11440:GOSUB11500:FCX%=0:IFDS%=0ANDSC%=9THENFCX%=1:HD%=1:SC%=1:GOSUB6660:DH%=HD%:S9%=1:GOTO9480 9500 FCN%=FCN%+2-DS%:CU%=FA%(CU%):IFCU%>0ANDCU%<(CM%+1)GOTO9430 9520 IFNC=0THENPRINT"":PRINT"String not found. 9530 GOTO3830 9540 JZ%=1:GOSUB4740:TR%=0:HD%=0:SC%=4:T9%=5:IFN89%=9THENSC%=6:T9%=4 9560 IFI%<N64%GOTO9580 9570 HD%=1:SC%=1:I%=I%-N64%:T9%=2:IFN89%=9THENT9%=3 9580 GOSUB6660:AT%=PEEK(RST%+512*(SC%-1)+32*I%+11) 9600 PRINT"File allocation byte is ";AT%;". Please type the new byte (0-255) ";:GOSUB12430:AT%=VAL(KB$):IFAT%<0ORAT%>255GOTO9600 9610 POKERST%+512*(SC%-1)+32*I%+11,AT%:AT%(I%)=AT%:R4%=SC%:U3%=0:U1%=DR%:U2%=HD%:GOSUB11310:GOTO3830 9650 JZ%=1:GOSUB4740:PRINT"It takes a while to kill a file. Please be patient.":MID$(DR$(I%),1,1)=CHR$(13):TR%=0:HD%=0:SC%=2*N89%-12:IFI%<N64%GOTO9700 9690 HD%=1:SC%=1:I%=I%-N64% 9700 GOSUB6660:POKERST%+512*(SC%-1)+32*I%,229:IFHD%=1THENR4%=1:U3%=0:U1%=DR%:U2%=HD%:GOSUB11310 9730 IFHD%=1THENHD%=0:GOSUB6660 9740 NC%=FA%(CU%):IFNC%>CM%ORNC%=0GOTO9760 9750 FA%(CU%)=0:CU%=NC%:GOTO9740 9760 FS%=RST%+512:GS%=FS%+FAT1%:G%=1:H%=0:FA%(CU%)=0 9770 CME%=CM%-1:FORI%=2TOCME%:G%=G%+1:IFH%=0THENG%=G%+1 9800 IFH%=1THENK3%=INT(FA%(I%-1)/256):K1%=FA%(I%)-16*INT(FA%(I%)/16):K1%=16*K1%+K3%:K2%=INT(FA%(I%)/16):GOTO9820 9810 K3%=FA%(I%+1)-16*INT(FA%(I%+1)/16):K1%=FA%(I%)-256*INT(FA%(I%)/256):K2%=INT(FA%(I%)/256)+16*K3%:HH%=1:GOTO9830 9820 HH%=0 9830 H%=HH%:POKEFS%+G%,K1%:POKEFS%+G%+1,K2%:POKEGS%+G%,K1%:POKEGS%+G%+1,K2%:NEXTI%:R4%=1:T9%=8:U3%=0:U1%=DR%:U2%=0:GOSUB11310:GOTO3830 9880 PRINT"":PRINT"Type the name of the file to be resuscitated in CAPS! ";:GOSUB12430:FI$=KB$:DP%=INSTR(FI$,"."):IFDP%<2GOTO9880 9900 FCH$=LEFT$(FI$,1):TL$=" ":MID$(TL$,1,DP%-1)=FI$:MID$(TL$,9,3)=RIGHT$(FI$,3):MID$(TL$,1,1)=CHR$(229):SD%=0:POKE50,0:ST%=0:ET%=0:HD%=0:SS%=1:ES%=8:GOSUB10970:POKE49,4:GOSUB10930 9940 FS%=RST%:I%=0:UP%=255:UF%=0:UA%=0:UB%=0:UN%=0:Z1%=0:Z2%=0:Z2%=N64%-1:NF%=0:D2%=PEEK(FS%+512):IFD2%=255ORD2%=253THENDS%=2:GOTO9970 9960 DS%=1 9970 FS%=FS%+FAT2% 9980 FORI%=Z1%TOZ2%:J%=PEEK(FS%):IFJ%<>229THENUB%=I%:UN%=UN%+1:GOTO10070 10030 FORJ%=0TO10:K%=PEEK(FS%+J%):IFCHR$(K%)<>MID$(TL$,J%+1,1)GOTO10070 10050 NEXTJ%:UF%=UF%+1:IFUF%=1THENUP%=I%:S1%=PEEK(FS%+26):S2%=PEEK(FS%+27):S3%=PEEK(FS%+28):S4%=PEEK(FS%+29):S5%=PEEK(FS%+30):S6%=PEEK(FS%+31):AT%=PEEK(FS%+11) 10070 FS%=FS%+32:NEXTI%:IFDS%<2GOTO10120 10100 DS%=0:ET%=0:ST%=0:HD%=1:GOSUB10970:POKE49,4:GOSUB10930:Z1%=N64%:Z2%=111:FS%=RST%:GOTO9980 10120 IFDS%<>0GOTO10140 10130 ET%=0:ST%=0:HD%=0:GOSUB10970:POKE49,4:GOSUB10930 10140 FS%=RST%+512:IFUF%<>0GOTO10180 10160 BEEP:PRINT"Can't find this file.":GOTO3830 10180 IFUF%>1THENBEEP:PRINT"Found this file more than once. Patch directory entries on track 0 before tryingto resuscitate file.":GOTO3830 10190 UD%=0:IFUN%<>UB%THENUD%=1 10200 IFUD%=0GOTO10220 10210 PRINT"Directory contains more than one killed file. Explicit directions may be required for resuscitation. 10220 PRINT"Do you want <A>utomatic or <M>anual resuscitation ";:GOSUB12430:AM$=LEFT$(KB$,1):IFAM$="A"ORAM$="a"THENUD%=0:GOTO10260 10240 IFAM$<>"m"ANDAM$<>"M"GOTO10220 10250 UD%=1 10260 S=256*S2%+S1%:IFS>CM%THENBEEP:PRINT"Can't resuscitate file. Directory pointer to first cluster is bad.":GOTO3830 10270 CU%=S:GOSUB10980:PRINT"File starts at track";TR%;", side";HD%;", sector";SC%;:S=128*S5%+(256*S4%+S3%)/(2*256):S%=INT(S):IFS%<>STHENS%=S%+1 10300 IF2*INT(S%/2)<>S%ANDDS%=0THENS%=S%+1 10310 PRINT" and is";S%;" sectors long.":IFS6%<>0GOTO10350 10330 S6%=S%:AT%(UP%)=AT%:S=256*S4%+S3%:IFS<=32767THENS%=S ELSES%=S-SQ 10335 F1%(UP%)=S%:F2%(UP%)=S5%:S=256*S2%+S1%:IFS<=32767THENS%=S ELSES%=S-SQ 10336 SC%(UP%)=S%:IFDS%=0THENS6%=INT(S6%/2) 10340 IFS6%<(CM%-2)GOTO10360 10350 BEEP:PRINT"File is too long. Can't resuscitate.":GOTO3830 10360 NCC%=CU%+1:LCC%=CU% 10370 IFFA%(NCC%)<>0THENNCC%=NCC%+1:GOTO10370 10380 FA%(CU%)=NCC%:CU%=NCC%:S6%=S6%-1:IFS6%=0GOTO10490 10390 GOSUB10980:PRINT"Next section of the file will start at track";TR%;", side";HD%;", sector";SC%:IFUD%=0GOTO10360 10420 PRINT"Is this ok <Y/N> ";:GOSUB12430:YN$=LEFT$(KB$,1):IFYN$="Y"ORYN$="y"GOTO10360 10430 IFYN$<>"N"ANDYN$<>"n"GOTO10420 10440 PRINT"Track ";:INPUTTR%:IFTR%<0ORTR%>39GOTO10440 10450 PRINT"Side ";:INPUTHD%:IFHD%<0ORHD%>1GOTO10450 10460 PRINT"Sector ";:INPUTSC%:IFSC%<1ORSC%>N89%GOTO10460 10470 GOSUB10590:FA%(LCC%)=TU%:CU%=TU%:GOTO10360 10490 CU%=LCC%:FA%(CU%)=4088:PRINT"Updating directory and file allocation tables.":HD%=0:IFUP%<N64%GOTO10570 10530 SD%=0:ST%=0:ET%=0:HD%=1:SS%=1:ES%=N89%:GOSUB10970:POKE49,4:GOSUB10930:FS%=RST%:K%=ASC(FI$):FS%=FS%+32*(UP%-N64%):POKEFS%,K%:POKE49,5:GOSUB10930:HD%=0:GOSUB10970:POKE49,4:GOSUB10930:GOTO10580 10570 FS%=RST%+FAT2%+32*UP%:K%=ASC(FI$):POKEFS%,K% 10580 DR$(UP%)=TL$:MID$(DR$(UP%),1,1)=FCH$:FS%=RST%+512:GS%=FS%+FAT1%:G%=1:H%=0:GOTO9770 10590 IFDS%=0GOTO10630 10600 IFN89%=9GOTO10620 10610 TU%=8*TR%+SC%-6:RETURN 10620 TU%=9*TR%+SC%-8:RETURN 10630 IFN89%=9GOTO10650 10640 TU%=8*TR%+4*HD%-3+INT((SC%-1)/2):RETURN 10650 TU%=INT((18*TR%+9*HD%+SC%-9)/2):RETURN 10670 RETURN200 10680 PRINT"Which drive (A,B,C,D) ";:PRINTDRI$;" ";:GOSUB12430:DR$=KB$:IFLEN(DRI$)=0ANDLEN(DR$)=0THENPRINT"Redo!":GOTO10680 10700 IFLEN(DR$)=0THENDR$=DRI$ 10710 DR%=ASC(DR$):IFDR%>96THENDR%=DR%-32 10720 IFDR%<65ORDR%>68THENBEEP:PRINT"Redo! ":GOTO10680 10730 DRI$=DR$:DR%=DR%-65:RETURN 10750 HD%=HDI%:PRINT"Which side (0 or 1) ";:PRINTHD%;" ";:GOSUB12430:HDI$=KB$:IFLEN(HDI$)=0THENRETURN 10770 HD%=VAL(HDI$):IFHD%<>0ANDHD%<>1THENBEEP:PRINT"Redo! ":GOTO10750 10790 HDI%=HD%:RETURN 10810 ST%=STI%:PRINT"Starting track ";:PRINTST%;" ";:GOSUB12430:STI$=KB$:IFLEN(STI$)=0THENRETURN 10830 ST%=VAL(STI$):IFST%<0THENBEEP:PRINT"Redo!":GOTO10810 10850 STI%=ST%:RETURN 10870 ET%=ETI%:PRINT"Ending track (";ST%;"-";ST%+41;") ";:PRINT ET%;" ";:GOSUB 12430:ETI$=KB$:IF LEN(ETI$)=0 THEN RETURN 10890 ET%=VAL(ETI$):IFET%<0ORET%<ST%OR(ET%-ST%)>41THENBEEP:PRINT"Redo!":GOTO10870 10910 ETI%=ET%:RETURN 10930 DEFSEG=SE%:DEFUSR=UR%:POKE55,ET%:POKE56,ST%:POKE57,DR%:POKE58,HD%:POKE51,SS%:POKE52,ES%:POKE53,SD%:UU%=USR(UU%):RETURN 10970 DEFSEG=SE%:DEFUSR=UR%:PK9%=PEEK(49):POKE49,16:POKE50,0:POKE55,ET%:POKE56,ST%:POKE58,HD%:UU%=USR(UU%):SIDE%=HD%:POKE49,PK9%:RETURN 10980 IFDS%=0GOTO11080 10990 HD%=0:IFN89%=9GOTO11050 11010 TR%=INT((CU%+5)/8):SC%=CU%-8*TR%+6 11030 IFCU%=0THENSC%=1 11040 RETURN 11050 TR%=INT((CU%+7)/9):SC%=CU%-9*TR%+8:GOTO11030 11080 IFN89%=9GOTO11130 11090 TR%=INT((CU%+3)/8):HD%=INT((CU%-8*TR%+3)/4):SC%=2*(CU%-8*TR%-4*HD%+3)+1:GOTO11030 11130 TR%=INT((2*CU%+9)/18):HD%=INT((2*CU%-18*TR%+8)/9):SC%=2*CU%-18*TR%-9*HD%+9:GOTO11030 11170 IFSIDE%=HD%THENRETURN 11180 DEFSEG=SE%:DEFUSR=UR%:PK9%=PEEK(49):POKE49,16:POKE50,0:POKE55,39:POKE56,0:POKE58,HD%:UU%=USR(UU%):SIDE%=HD%:POKE49,PK9%:RETURN 11190 PRINT"Starting sector ";:PRINTS0%;" ";:GOSUB12430:S0$=KB$:IFLEN(S0$)=0THENRETURN 11210 S0%=VAL(S0$):IFS0%<1ORS0%>40THENBEEP:GOTO11190 11230 RETURN 11240 PRINT"Number of sectors ";:GOSUB12430:SF%=VAL(KB$):IFSF%<1THENBEEP:GOTO11240 11260 RETURN 11270 POKE49,11:POKE50,0:POKE55,V3%:POKE56,V3%:POKE57,V1%:POKE58,V2% 11290 DEFUSR=UR%:UU%=USR(UU%):POKE&HFB,0:POKE&HFC,0:POKE&HFD,0:RETURN 11310 POKE49,5:POKE50,0:POKE52,R4%+T9%-1:POKE51,R4%:IFT9%=1AND(PEEK(S1%+5*S4%-3)AND&H40)=&H40THENCRC%=PEEK(S1%+5*S4%+1):CRC%=PAG(CRC%):POKE&HFB,&HD1:POKE&HFD,CRC% 11330 POKE55,U3%:POKE56,U3%:POKE57,U1%:POKE58,U2%:GOTO11290 11350 POKE49,13:POKE50,0:POKE51,0:BX=PTW%:BH%=INT(BX/256):BL%=BX-256*BH%:POKE53,BL%:POKE54,BH%:CX=PTR%:CH%=INT(CX/256):CL%=CX-256*CH%:POKE55,CL%:POKE56,CH%:LDA%=48-INT(BX/128):POKE52,LDA%:GOTO11290 11400 POKE49,9:POKE50,0:AH%=INT(AX%/256):AL%=AX%-256*AH%:POKE51,AL%:POKE52,AH%:BH%=INT(BX%/256):BL%=BX%-256*BH%:POKE53,BL%:POKE54,BH%:CH%=INT(CX%/256):CL%=CX%-256*CH%:POKE55,CL%:POKE56,CH%:GOSUB11290:CL%=PEEK(53):CH%=PEEK(54):CX%=256*CH%+CL% 11430 RETURN 11440 CX%=MC%:POKE49,10:POKE50,0:AH%=INT(AX%/256):AL%=AX%-256*AH%:BH%=INT(BX%/256):BL%=BX%-256*BH%:CH%=INT(CX%/256):CL%=CX%-256*CH%:POKE51,AL%:POKE52,AH%:POKE53,BL%:POKE54,BH%:POKE56,CH%:POKE55,CL%:POKE57,255:POKE58,255 11480 IFAX%>(BX%-CX%+1)THENRETURN 11490 GOTO11290 11500 IFPEEK(58)=255ANDPEEK(57)=255THENRETURN 11510 CX=256*PEEK(58)+PEEK(57):NC=NC+1:XC=CX:GOSUB12740:IFCX>10000THENRETURN 11540 AX%=XC+1:GOSUB11440:GOTO11500 11560 IFERR=27ORERR=24THENBEEP:GOSUB11660:RESUMENEXT 11570 RESUME550 11580 JP%=1:RETURN390 11590 JP%=2:RETURN390 11600 JP%=3:RETURN390 11610 JP%=4:RETURN390 11620 JP%=5:RETURN390 11640 RETURN200 11650 DEFSEG:POKE106,0:DEFSEG=SE%:RETURN 11660 IFLPT%=1THENLPT%=0:KEY9,"LPTOFF":GOSUB11650:RETURN 11670 LPT%=1:KEY9,"LPT-ON":GOSUB11650:LPRINT" ":RETURN 11700 KEYOFF:GOSUB12090:ONKEY(10)GOSUB11780:RETURN12940 11710 BO%=0:N3%=2:RETURN710 11720 N3%=3:RETURN710 11730 N3%=4:RETURN710 11740 N3%=5:RETURN710 11750 N3%=6:RETURN710 11760 N3%=7:RETURN710 11770 N3%=8:RETURN710 11780 RETURN540 11830 IFINKEY$=""GOTO11830 11840 RETURN 11870 C%=1:RETURN6810 11880 C%=2:RETURN6810 11890 C%=3:RETURN6810 11900 C%=4:RETURN6810 11910 C%=5:RETURN6810 11920 C%=6:RETURN6810 11930 RETURN6690 11940 IFERR=27ORERR=24THENBEEP:GOSUB11660:RESUMENEXT 11950 RESUME6690 11960 C%=1:RETURN3500 11970 C%=2:RETURN3500 11980 C%=3:RETURN3500 11990 C%=4:RETURN3500 12000 C%=5:RETURN3500 12010 C%=6:RETURN3500 12020 C%=7:RETURN3500 12030 C%=8:RETURN3500 12040 RETURN3330 12050 CC%=1:RETURN3650 12060 CC%=2:RETURN3650 12070 CC%=3:RETURN3650 12080 CC%=4:RETURN3650 12090 FORI%=1TO8:KEYI%,"":KEY(I%)OFF:NEXTI%:GOSUB11650:RETURN 12100 IFERR=27ORERR=24THENBEEP:GOSUB11660:RESUMENEXT 12110 RESUME3310 12200 IFDRI$="A"ORDRI$="a"THENDRI$="B":RETURN 12210 IFDRI$="B"ORDRI$="b"THENDRI$="A":RETURN 12220 RETURN 12230 POKE50,0:GOSUB11170:ES%=S4%+S7%-1:IFES%>255THENES%=255 12240 POKE 49,4:SS%=S4%:ST%=V3%:ET%=V3%:DR%=V1%:HD%=V2%:GOSUB 10930:POKE 50,0:POKE 49,13:POKE 51,1:POKE 52,48:POKE 53,0:POKE 54,0:POKE 55,0:POKE 56,0:DEF USR=UR%:UU%=USR(UU%):RETURN 12260 PTR=0:PTR%=0:IFS4%<2THENRETURN 12270 FORJC%=1TOS4%-1:LC%=PEEK(S1%+5*JC%+1):IFLC%>5GOTO12290 12280 PTR=PTR+PAG(LC%) 12290 NEXTJC%:PTR%=256*PTR:RETURN 12310 PTW=0:PTW%=0:IFR4%<2THENRETURN 12320 FORJC%=1TOR4%-1:LC%=PEEK(R1%+5*JC%+1):IFLC%>5GOTO12340 12330 PTW=PTW+PAG(LC%) 12340 NEXTJC%:PTW%=256*PTW:RETURN 12360 PAG=2*(SC%-1)+HS%+1:FS%=LFE%+256*TR%:GOSUB12530:PK%=6:SC1%=1 12390 N%=PEEK(FS%+PK%):IFN%>5THENN%=6 12395 EW%=PEEK(FS%+PK%-4):IF (EW% AND &H30) <>0 THEN N%=6 12400 PAG=PAG-PAG(N%):IFPAG>0THENPK%=PK%+5:SC1%=SC1%+1:GOTO12390 12410 POR=PAG(N%)+PAG:RETURN 12430 CO%=POS(X):RO%=CSRLIN:IFCO%>77THENPRINT" ";:CO%=1:RO%=RO%+1:IFRO%>24THENRO%=24 12440 KB$="":PRINT"? ";:CO%=CO%+2:LOCATERO%,CO%,1 12450 BK$=INKEY$:IFBK$=""GOTO12450 12460 GOSUB11650:IFLEN(BK$)>1GOTO12450 12480 BK%=ASC(BK$):IFBK%<>8ANDBK%<>13THENPRINTBK$;:KB$=KB$+BK$:GOTO12450 12490 IFBK%=13THENPRINT"":RETURN 12500 KB%=LEN(KB$):IFKB%=0GOTO12450 12510 KB$=LEFT$(KB$,KB%-1):RO%=CSRLIN:CO%=POS(X)-1:IFCO%=0THENCO%=80:RO%=RO%-1 12520 LOCATERO%,CO%:PRINT" ";:LOCATERO%,CO%,1:GOTO12450 12530 REM 12540 IFFS%>=LFT%THENFS%=FS%-LFT%+LFE%:GOTO12540 12550 RETURN 12560 FS%=LFE%+256*U3%:GOSUB12530:PK%=1+5*R4%:CX%=0:CT9%=C9% 12580 N%=PEEK(FS%+PK%):IFN%>5THENN%=6 12590 CX%=CX%+2*PAG(N%):CT9%=CT9%-1:IFCT9%>0THENPK%=PK%+5:GOTO12580 12610 CX%=128*CX%:RETURN 12620 CX=SX%-CX%:PAG=INT(CX/256):FS%=LFE%+256*V3%:GOSUB12530:PK%=1+5*S4%:SC1%=S4% 12660 N%=PEEK(FS%+PK%):IFN%>5THENN%=6 12670 PAG=PAG-PAG(N%):IFPAG>=0THENPK%=PK%+5:SC1%=SC1%+1:CX=CX-256*PAG(N%):GOTO12660 12690 GOSUB12720:PRINT"Non-compare at source track";V3%;",head";V2%;",sector";SC1%;",section";POR;",hex offset ";MH$:RETURN 12720 POR=PAG(N%)+PAG+1:MH$=RIGHT$(HEX$(CX),2):RETURN 12740 PAG=INT(CX/256):FS%=LFE%+256*TR%:GOSUB12530:PK%=6:SC1%=1 12770 N%=PEEK(FS%+PK%):IFN%>5THENN%=6 12780 PAG=PAG-PAG(N%):IFPAG>=0THENPK%=PK%+5:SC1%=SC1%+1:CX=CX-256*PAG(N%):GOTO12770 12800 GOSUB12720:PRINT"Match found at track";TR%;",head";HD%;",sector";SC1%;",section";POR;",hex offset ";MH$:IFLPT%=1THENLPRINT"Match found at track";TR%;",head";HD%;",sector";SC1%;",section";POR;",hex offset ";MH$ 12803 IFFCN%=0GOTO12810 12805 FCM%=FCN%+FCX%:IFSC1%<>SC%THENFCM%=FCM%+1 12807 PRINT"(Match was in sector";FCM%;" of the file.)":IFLPT%=1THENLPRINT"(Match was in sector";FCM%;" of the file.) 12810 RETURN 12830 PK%=6:AX%=0:NSC%=1:IFSC%=1THENRETURN 12840 N%=PEEK(FS%+PK%):IFN%>5THENN%=6 12850 AX%=AX%+2*PAG(N%):NSC%=NSC%+1:IFNSC%<SC%GOTO12840 12870 AX%=128*AX%:RETURN 12880 BEEP:PRINT"Do you want to make another copy <Y/N> ";:GOSUB12430:IFKB$="Y"ORKB$="y"GOTO12910 12890 IFKB$="N"ORKB$="n"GOTO1370 12900 BEEP:GOTO12880 12910 PRINT"Put the source diskette in drive ";LT$(BL%+10);". Press any key to continue. 12920 IFINKEY$=""GOTO12920 12930 GOTO1350 12940 LOCATE 10,1:PRINT"*";:LOCATE 19,1:DRI$="A":PRINT"SOURCE ":GOSUB 10680:BL%=DR%:GOSUB 12200:PRINT"DESTINATION ":GOSUB 10680:DL%=DR%:STI%=0:ETI%=41:GOSUB 10810:GOSUB 10870 12980 PRINT"Side <0>, <1>, <B>oth or <A>utomatic A ";:GOSUB12430:GH%=0:IFKB$="B"ORKB$="b"THENGH%=2:GOTO13070 13000 IFKB$="A"ORKB$="a"GOTO13040 13010 IFLEN(KB$)=0THENGH%=0:GOTO13040 13020 GH%=VAL(KB$):IFGH%=1ORGH%=0GOTO13070 13030 GOTO12980 13040 GOSUB13370:GOSUB13480:PRINT:PRINTSPC(15)"NOTE: Use the Esc key to terminate this routine":PRINT" 13045 POKE&H309,0:POKE49,4:POKE51,1:POKE52,3:POKE50,0:POKE55,0:POKE56,0:POKE57,BL%:POKE58,0:UU%=USR(UU%):GH%=0:GHT%=PEEK(RST%+512):IFGHT%=255ORGHT%=253THENGH%=2 13060 POKE58,0:UU%=USR(UU%):GOTO13080 13070 GOSUB13370:GOSUB13480:PRINT"":GOTO13080 13080 NS%=1:IFGH%=2THENNS%=2 13090 POKE&HED,4:POKE&HEE,0:IFVAIL>16000GOTO14000 13094 IF BL%=DL%THEN PRINT"":PRINT"NOT ENOUGH MEMORY INSTALLED FOR A SINGLE DRIVE COPY!!":IF SBR%=1 THEN GOSUB 12200:GOTO 1370 13096 IFBL%=DL%GOTO13330 13100 FORTR%=ST%TOET%:FORSD%=1TONS%:IFGH%<2THENHS%=GH% ELSEHS%=SD%-1 13130 POKE49,18:POKE50,0:POKE51,0:POKE52,0:POKE53,BL%:POKE54,0:POKE55,0:POKE56,TR%:POKE57,DL%:POKE58,HS%:LOCATE23,1:PRINT"ANALYZING, COPYING & VERIFYING TRACK ";:PRINTUSING"###";TR%;:PRINT", SIDE ";:PRINTUSING"###";HS%; 13150 DEFUSR=UR%:UU%=USR(UU%):IF(PEEK(62)AND2)=2GOTO13340 13170 IFPEEK(53)=0ANDPEEK(54)=0GOTO13190 13180 PRINT"":PRINT"BAD COMPARE ON TRACK ";:PRINTUSING"###";TR%;:PRINT", SIDE ";:PRINTUSING"##";HS%:PRINT" 13190 IFVF$="N"GOTO13220 13195 GOSUB13200:GOTO13220 13200 GOSUB13530:ZC%=CZ%:GOSUB13580:GOSUB13530:IFZC%=CZ%GOTO13220 13210 BEEP:PRINT"":PRINT"CRC VERIFY ERROR ON TRACK";:PRINTUSING"###";TR%;:PRINT", SIDE";:PRINTUSING"##";HS%:PRINT"":RETURN 13220 NEXTSD%:NEXTTR%:BEEP:IFSBR%=1THENRETURN 13260 GOSUB 17000:PRINT"":BEEP:PRINT TAB(16)"Copy complete. Do you wish to make another <Y/N> ";:GOSUB 12430:IF KB$="Y"OR KB$="y"GOTO 13290 ELSE POKE &HD2,0 13270 IFKB$="N"ORKB$="n"GOTO13330 13280 GOTO13260 13290 PRINT"":PRINT TAB(20)"Press any key when ready to begin copying. 13300 IFINKEY$=""GOTO13300 13310 PRINT"":GOTO13090 13330 POKE&H2D00,&HA:POKE&H2D01,32:POKE&H2D02,&H2A:POKE&H2D03,&H80:POKE&H2D04,&HC8:POKE40,&HF6:GOTO540 13340 BEEP:PRINT"":PRINT"Destination diskette is write-protected! Remove tab, press any key to continue.":POKE62,0:GOTO13300 13370 GOSUB 17500:PRINT"<S>ynchronous (slower) or <A>synchronous (faster) disk operation ";ASYN$" ";:GOSUB 12430 13380 IF KB$="S"OR KB$="s"THEN POKE &H3D,1:POKE &H18,1:ASYN$="S":RETURN 13390 IFKB$="A"ORKB$="a"ORKB$="F"ORKB$="f"THENPOKE&H3D,0:POKE&H18,0:ASYN$="A":RETURN 13400 IFKB$=""THENKB$=ASYN$:GOTO13380 13410 PRINT"RETYPE, PLEASE!":GOTO13370 13420 PRINT"Which drive (A,B,C,D or <N>one) ";DRI$;:GOSUB12430:IFKB$="N"ORKB$="n"THENPOKE&HF2,1:RETURN 13430 DR$=KB$:IFLEN(DRI$)=0ANDLEN(DR$)=0THENPRINT"Redo!":GOTO13420 13440 IFLEN(DR$)=0THENDR$=DRI$ 13450 DR%=ASC(DR$):IFDR%>96THENDR%=DR%-32 13460 IFDR%<65ORDR%>68THENBEEP:PRINT"Redo!":GOTO13420 13470 DRI$=DR$:DR%=DR%-65:RETURN 13480 VF$="N":PRINT"Verify CRC errors <Y/N> ";VF$;" ";:GOSUB12430:IFKB$="Y"ORKB$="y"THENVF$="Y":RETURN 13500 IFKB$="n"ORKB$="N"THENVF$="N":RETURN 13510 IFKB$=""THENRETURN 13520 PRINT"RETYPE PLEASE!!":GOTO13480 13530 CZ%=0:FS%=LFE%+256*TR%:GOSUB12530:NNS%=PEEK(FS%):IFNNS%=0THENRETURN 13540 FS%=FS%+2:FORVF%=1TONNS%:IF(PEEK(FS%)AND&H40)<>0THENCZ%=CZ%+1 13560 FS%=FS%+5:NEXTVF%:RETURN 13580 PRINT"Verifying CRCs on track";TR%:POKE49,1:POKE50,0:POKE55,TR%:POKE56,TR%:POKE57,DL%:POKE58,HS%:UU%=USR(UU%):RETURN 13610 C1%=PEEK(ADR):C2%=INT(ADR/256):C3%=INT(C2%/16):C4%=C2%-16*C3%:C5%=ADR-256*C2%:C6%=INT(C5%/16):C7%=C5%-16*C6%:C8%=INT(C1%/16):C9%=C1%-16*C8%:PRINTLT$(C3%);LT$(C4%);" ";LT$(C6%);LT$(C7%);SPC(15);"Contents: ";LT$(C8%);LT$(C9%):RETURN 13620 GOSUB10680:GOSUB10750:ST%=STI%:PRINT"Which track ";:PRINTST%;" ";:GOSUB12430:STI$=KB$:IFLEN(STI$)=0GOTO13670 13650 ST%=VAL(STI$):IFST%<0THENBEEP:PRINT"Redo!":GOTO10810 13660 STI%=ST% 13670 FS%=LFE%+256*ST%:GOSUB12540:NF%=PEEK(FS%+1):NS%=PEEK(FS%) 13680 PRINT"What Format-N value ";NF%;" ";:GOSUB12430:IFKB$=""GOTO13710 13690 NF%=VAL(KB$):IFNF%<0ORNF%>255GOTO13680 13700 POKEFS%+1,NF% 13710 PRINT"How many sectors ";NS%;" ";:GOSUB12430:IFKB$=""GOTO13740 13720 NS%=VAL(KB$):IFNS%<0ORNS%>255GOTO13710 13730 POKEFS%,NS% 13740 FGL%=PEEK(&H2D07+NF%) 13750 PRINT"Format Gap Length (HEX!) ";HEX$(FGL%);" ";:GOSUB12430:IFKB$=""GOTO13780 13760 FGL%=VAL("&H"+KB$):IFFGL%<0ORFGL%>255GOTO13750 13770 POKE&H2D07+NF%,FGL% 13780 GOSUB13790:GOTO13840 13790 FGL%=PEEK(40) 13800 PRINT"Format Fill Character (HEX!) ";HEX$(FGL%);" ";:GOSUB12430:IFKB$=""GOTO13830 13810 FGL%=VAL("&H"+KB$):IFFGL%<0ORFGL%>255GOTO13800 13820 POKE40,FGL% 13830 FGL=PEEK(&HED)+256*PEEK(&HEE):RETURN 13840 PRINT"ABTIME Value (HEX!) ";HEX$(FGL);" ";:GOSUB12430:IFKB$=""GOTO13870 13850 FGL=VAL("&H"+KB$):EE%=INT(FGL/256):ED%=FGL-256*EE%:POKE&HED,ED%:POKE&HEE,EE% 13870 POKE&HFB,&H81:POKE&HFC,4*NS%:ET%=ST%:GOTO2170 14000 POKE&HE2,LSL%:POKE&HE3,LSH%:PRINT"":FORSD%=1TONS%:IFGH%<2THENHS%=GH% ELSEHS%=SD%-1 14015 POKE&HE0,FSL%:POKE&HE1,FSH%:T1%=ST%:T2%=ET% 14020 IFBL%<>DL%GOTO14100 14030 IFDMC%=1THENGOSUB2500:GOTO14100 14040 BEEP:PRINT"Insert the source disk and press the S key when ready. 14050 A$=INKEY$:IFA$<>"S"ANDA$<>"s"GOTO14050 14060 PRINT"":PRINT" 14100 POKE49,18:POKE50,0:POKE55,T2%:POKE56,T1%:POKE54,0:POKE53,BL%:POKE58,HS%:POKE57,BL%:LOCATE23,40:PRINT"Analyzing and reading side";HS%;", track";:UU%=USR(UU%):IFPEEK(52)=255GOTO14160 14102 IF PEEK(&H2D06)<>&HC8 THEN GOSUB 30000 14105 IFBL%=DL%THENGOSUB2505 14107 PRINT"":PRINT" 14110 POKE&HE0,FSL%:POKE&HE1,FSH%:T3%=PEEK(52) 14112 POKE55,T3%:POKE56,T1%:POKE54,1:POKE53,DL%:POKE58,HS%:POKE57,DL%:LOCATE23,28:PRINT"Formatting, writing and verifying side";HS%;", track";:UU%=USR(UU%):T5%=PEEK(&H44):IF(T5%AND2)=0GOTO14120 14116 BEEP:PRINT"":PRINT"":PRINT"Destination disk is write protected. Remove tab, press any key to continue.":PRINT"":PRINT"":PRINT" 14117 IFINKEY$=""GOTO14117 14118 GOTO14110 14120 T4%=PEEK(51):T9%=PEEK(52):IFT4%=255ANDT9%=255GOTO14160 14121 IFT9%<>255THENPRINT"":PRINT"":GOTO14124 14122 BEEP:PRINT"":PRINT"Possible verify failure in track";T4%:PRINT"":IFT4%<T3%THENT1%=T4%+1:GOTO14112 14124 IFVF$="N"GOTO14130 14125 FORTR%=T1%TOT3%:GOSUB13530:ZC%=CZ%:GOSUB13580:GOSUB13530:IFZC%<>CZ%THENGOSUB13210 14127 NEXT 14130 IFT3%=T2%GOTO14150 14140 T1%=T3%+1:POKE&HE0,FSL%:POKE&HE1,FSH%:GOTO14020 14150 T1%=ST%:NEXTSD% 14160 IFSBR%=1THENPRINT"":RETURN 14170 GOTO13260 16000 COLOR 15,1,1:GOSUB 11640:RETURN 16100 COLOR7,0,0:GOSUB11640:RETURN 17000 IF PEEK(&HD2)>1 THEN GOSUB 19000 17100 RETURN 17500 IF PEEK(&HD2)>0 THEN ASYN$="S" ELSE ASYN$="A" 17600 RETURN 18000 FORI=1TO2:SOUND2550,1:SOUND50,1:NEXTI:RETURN 19000 CLS:LOCATE 8,30:PRINT"DISKETTE HAS POSSIBLE":LOCATE 10,35:PRINT"LASER HOLE":LOCATE 12,34:PRINT"ON TRACK ";INT(((PEEK(&HD2)-2)/2)):LOCATE 14,32:PRINT"RUN NOLOK PROGRAM":LOCATE 16,30:PRINT"BEFORE RUNNING COPY" 20000 RETURN 30000 STOP:RETURN