10 REM > WrDDCPM
   20 REM Write Challenger DDCPM disk
   30 :
   40 REM Need to format disk first
   50 REM Tracks 0-2  : 10*256 FM
   60 REM Tracks 3-159: 10*512 MFM
   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