10
20
30 :
40
50
60
70 :
80 A%=0:Y%=0:E%=0:fs%=USR(&FFDA)AND&FF
90 DIM ctrl% 31,data% 10*512-1:X%=ctrl%:Y%=X%DIV256
100 :
110 INPUT"Input file:"in$:in%=OPENOUT(in$):IFin%=0:PRINT"File '"in$"' not found":END
120 ON ERROR REPORT:OSCLI"FX143,18,"+STR$fs%:CLOSE#in%:in%=0:PRINT:END
130 FOR track%=0 TO 159
140 IF track%<3:*FX143,18,4
150 IF track%>2:*FX143,18,8
160 FOR sector%=0 TO 9:PRINTCHR$13;track%;":";sector%;
170 IF track%<3:PROCFDCwrFM(0,data%+sector%*256,track%,sector%)
180 IF track%>2:PROCFDCwrMFM(0,data%+sector%*512,track%,sector%)
190 NEXT sector%:OSCLI"FX143,18,"+STR$fs%
200 IF track%<3:PROCgbpb(4,in%,data%,10*256,0)
210 IF track%>2:PROCgbpb(4,in%,data%,10*512,0)
220 NEXT track%:PRINT
230 CLOSE#in%:in%=0
240 END
250 :
260 DEFPROCFDCwrFM(dv%,ad%,tk%,sc%)
270 ?X%=dv%+2*(tk%DIV80):X%!1=ad%:X%!5=3:X%?6=&4B
280 X%?7=tk%MOD80:X%?8=sc%:X%?9=&21
290 A%=&7F:CALL&FFF1
300 IFX%?10:PRINT" error ";~X%?10
310 ENDPROC
320 :
330 DEFPROCFDCwrMFM(dv%,ad%,tk%,sc%)
340 ?X%=0:X%!1=ad%:X%!5=10
350 X%!8=tk%*16+sc%:X%?7=X%?9:X%?6=&80
360 X%!9=1:X%!11=0:A%=&72:CALL&FFF1
370 IF?X%:PRINT" error ";~?X%
380 ENDPROC
390 :
400 DEFPROCgbpb(A%,ch%,ad%,nm%,pt%)
410 ?X%=ch%:X%!1=ad%:X%!5=nm%:X%!9=pt%:CALL &FFD1:ENDPROC