  100REM Format - 80 Track
  200REM 8271 Disc Formatter
  300REM (C) Ian Wolstenholme 2007
  400REM Version 3.1 26/vi/2011
  500REM Allow repeat formatting
  600DIM osblock 20,sector 50,track0 512
  700PRINT'"BeebMaster Disc Formatter Version 3.1";
  800REPEATREPEAT
  900PRINT'"Which drive? ";:INPUT""D%
 1000UNTILD%=0ORD%=1ORD%=2ORD%=3
 1100PRINT"Formatting track ";
 1200FORT%=0TO79
 1300IFT%<10PRINT"0";
 1400PRINT;T%;
 1500PROCsector
 1600A%=&7F
 1700X%=osblock MOD256
 1800Y%=osblock DIV256
 1900?osblock=D%
 2000osblock!1=sector
 2100osblock?5=5:REM 5 params
 2200osblock?6=&63:REM Format
 2300osblock?7=T%:REM track
 2400osblock?8=21:REM gap3
 2500osblock?9=32+10:REM 256 bps; 10 spt
 2600osblock?10=0:REM gap5
 2700osblock?11=16:REM gap1
 2800osblock?12=0
 2900CALL&FFF1
 3000IFosblock?12<>0 PRINT"?"'"Error ";~osblock?12;" at track ";T%:END
 3100IFT%<79VDU8,8
 3200NEXT
 3300PROCcat
 3400IFosblock?10=0PRINT'"Disc formatted"ELSEPRINT'"Error writing disc catalogue"
 3500PRINT"Format another disc? ";
 3600B%=GET:VDUB%
 3700UNTILB%<>89ANDB%<>121
 3800PRINT:END
 3900DEFPROCsector
 4000FORB%=0TO36STEP4
 4100sector?B%=T%:REM track
 4200sector?(B%+1)=0:REM head no
 4300sector?(B%+2)=B%/4:REM sec no
 4400sector?(B%+3)=1:REM 256 bps
 4500NEXT
 4600ENDPROC
 4700DEFPROCcat
 4800FORB%=0TO512STEP4
 4900track0!B%=0
 5000NEXT
 5100track0?262=3:REM 1 for 40 track
 5200track0?263=32:REM 144 for 40 track
 5300X%=osblock MOD256
 5400Y%=osblock DIV256
 5500?osblock=D%
 5600osblock!1=track0
 5700osblock?5=3:osblock?6=&4B
 5800osblock?7=0:osblock?8=0
 5900osblock?9=34
 6000osblock?10=0
 6100CALL&FFF1
 6200CALL&FFF1
 6300ENDPROC
