REM > FlexForm REM BBC Flex disk formatter REM Side 0 formatted as sectors 1-10, side 1 as sectors 11-20 REM Track 0/Side 0 formatted as 0,1,3-10 with DFS catalog in 0/1 : DIM X% 31,data% 255:Y%=X%DIV256:*DISK ON ERROR REPORT:PRINT " at line ";ERL:OSCLI"FX180,"+STR$(PAGE/256):END *FX180,64 INPUT"Drive: "drive% INPUT"Tracks: (80) "tracks%:IF tracks%=0:tracks%=80 INPUT"Sides: (2) "sides%:IF sides%=0:sides%=2 INPUT"Start sector: (1) "A$:IF A$="":sec0%=1 ELSE sec0%=VALA$ sectors%=10 FOR track%=0 TO tracks%-1 FOR side%=0 TO sides%-1 : this%=track%:IF this%>79:this%=this%-80:drive%=drive% OR 2 PRINT CHR$13;"Format ";drive%;":";this%;":";side%;SPC3;CHR$8;CHR$8;CHR$8; FOR sector%=0 TO 9 data%!(sector%*4+0)=this% data%?(sector%*4+1)=side%+track%DIV80 data%?(sector%*4+2)=sec0%+(sector%+this%*7)MOD10+side%*sectors% data%?(sector%*4+3)=1 IF track%=0:IF side%=0:IF sector%<2:data%?(sector%*4+2)=sector% NEXT sector% X%?0=drive% OR side%*2 X%!1=data% X%!5=&6305 X%?7=this% X%!8=&10002A10 A%=127:REPEAT:CALL&FFF1:UNTIL X%?12<>&10 IF X%?12:PRINT TAB(18);"error &";~X%?12 : FOR A%=0 TO 255 STEP 4:data%!A%=0:NEXT A% FOR sector%=0 TO sectors%-1 sec%=sec0%+sector%+side%*sectors% IF this%=0:IF side%=0:IF sector%<2:sec%=sector% PRINT CHR$13;"Link ";drive%;":";this%;":";side%;":";sec%; link0%=track%:link1%=sec%+side%*sectors%+1 IF sector%=sectors%-1:IF side%=sides%-1:link0%=track%+1:link1%=sec0%:IF track%=tracks%-1:link0%=0:link1%=0:REM End of disk IF sector%=sectors%-1:IF track%=0:IF side%=0:link0%=0:link1%=0:REM End of catalog data%?0=link0% data%?1=link1% : X%?0=drive% OR side%*2 X%!1=data% X%!5=&4B03 X%?7=this% X%?8=sec% X%!9=&21 A%=127:REPEAT:CALL&FFF1:UNTIL X%?10<>&10 IF X%?10:PRINT TAB(18);"error &";~X%?10 NEXT sector% : NEXT side% NEXT track% : PRINT CHR$13;"Initialise SIR ";CHR$8;CHR$8; FOR A%=0 TO 255 STEP 4:data%!A%=0:NEXT A% data%!&1D=&0101 data%?&1F=tracks%-1 data%?&20=sectors% data%?&21=(sectors%*tracks%*sides%-sectors%) DIV 256 data%?&22=(sectors%*tracks%*sides%-sectors%) AND 255 data%!&23=&730101 data%?&26=tracks%-1 data%?&27=sectors% : X%?0=drive% X%!1=data% X%!5=&03004B03 X%!9=&21 A%=127:REPEAT:CALL&FFF1:UNTIL X%?10<>&10 IF X%?10:PRINT TAB(18);"error &";~X%?10 PRINT : OSCLI"FX180,"+STR$(PAGE/256):END