10
20
30
40 DIM param 12, sectab 39, cat 511
50 osword=&FFF1
60 MODE 7
70 PROCbegin :
80 PROCinitsec(0) :
90 PROCformat(0) :
100 FOR T%=20 TO 39
110 PROCinitsec(T%) :
120 PROCformat(T%) :
130 NEXT
140 FOR T%=40 TO 78 STEP 2
150 PROCinitsec(T% DIV 2) :
160 PROCformat(T%) :
170 NEXT
180 PROCcreatecat :
190 PROCwritecat :
200 PRINT TAB(6,22);CHR$133;"Formatting complete"
210 END
220
230 DEFPROCbegin
240 REPEAT
250 PROCwhichdrive
260 UNTIL ans$="Y" OR ans$="y"
270 PROCinsert
280 ENDPROC
290
300 DEFPROCcreatecat
310 FOR I%=0 TO 511
320 cat?I%=0 :
330 NEXT
340 $(cat+8)="dummy $" :
350 cat?&10 = 0 :
360 cat?&105 = 8 :
370 cat?&106 = 3 :
380 cat?&107 = &20
390 cat?&10D = 198 :
400 cat?&10F = 2 :
410 ENDPROC
420
430 DEFPROCformat(track%)
440 param?0 = drive% :
450 param!1 = sectab :
460 param?5 = &05 :
470 param?6 = &63 :
480 param?7 = track% :
490 param?8 = 21 :
500 param?9 = &2A :
510 param?10 = 0 :
520 param?11 = 16 :
530 A%=&7F
540 X%=param
550 Y%=X% DIV 256
560 CALL osword
570 PRINT TAB(12,12);CHR$130;"track ";track%
580 IF param?12=0:ENDPROC
590 PRINT TAB(0,23);CHR$13;"format: bad result = &";~param?12:END
600 ENDPROC
610
620 DEFPROChead
630 CLS
640 PRINT TAB(0,2);CHR$141;CHR$131;"COMBINED 40/80 TRACK FORMATTER"
650 PRINT TAB(0,3);CHR$141;CHR$131;"COMBINED 40/80 TRACK FORMATTER"
660 ENDPROC
670
680 DEFPROCinitsec(logtrack%)
690 FOR I%=0 TO 9
700 sectab?(I%*4+0)=logtrack%
710 sectab?(I%*4+1)=0
720 sectab?(I%*4+2)=I%
730 sectab?(I%*4+3)=1
740 NEXT
750 ENDPROC
760
770 DEFPROCinsert
780 PROChead
790 PRINT TAB(0,5);CHR$134;"insert disk in drive ";drive%
800 PRINT TAB(0,7);CHR$134;"press SPACE when ready";
810 REPEAT
820 UNTIL INKEY(100)=32
830 PROChead
840 ENDPROC
850
860 DEFPROCwhichdrive
870 PROChead
880 REPEAT
890 PRINT TAB(0,5);STRING$(38," ")
900 PRINT TAB(0,5);CHR$134;"enter drive to format (0-3) >";
910 INPUT " " drive%
920 UNTIL drive%>-1 AND drive%<4
930 PROChead
940 PRINT TAB(0,5);CHR$134;"formatting drive ";drive%
950 REPEAT
960 PRINT TAB(0,7);STRING$(38," ")
970 PRINT TAB(0,7);CHR$134;"are you sure (Y/N) >";
980 INPUT " " ans$
990 ans$=LEFT$(ans$,1)
1000 UNTIL ans$="Y" OR ans$="y" OR ans$="N" OR ans$="n"
1010 ENDPROC
1020
1030 DEFPROCwritecat
1040 param?0 = drive% :
1050 param!1 = cat :
1060 param?5 = &03 :
1070 param?6 = &4B :
1080 param?7 = 0 :
1090 param?8 = 0 :
1100 param?9 = &22 :
1110 A%=&7F
1120 X%=param
1130 Y%=X% DIV 256
1140 CALL osword
1150 IF param?10=0:ENDPROC
1160 PRINT tab(0,23);CHR$133;"writecat: bad result = &";~param?10:END
1170 ENDPROC