ô > Form/src ô Disk formatter ô Extracted from HADFS rom ($ô 15/11/1992 Form staggers by -3 2ô and gap1=16, gap3=16 <: F!Þ mcode% &800:load%=&FFFF6000 PPageF=&0900:tracks=80 Z: dOSWRCH=&FFEE:OSNEWL=&FFE7 nOSRDCH=&FFE0:OSWORD=&FFF1 xOSARGS=&FFDA ‚: Œ ã P=0 ¸ 1 –P%=load%:O%=mcode%  [OPT P*3+4 ª.TextTable ´$.TxtDrv:EQUS "Format drive ":BRK ¾#.TxtForm:EQUS "Formatting ":BRK È: Ò.PrText:.PrTextX Ü!LDA TextTable,X:BEQ PrTextEnd æJSR OSWRCH:INX:BNE PrTextX ð.PrTextEnd úRTS :  .PrHex PHA:LSR A:LSR A:LSR A:LSR A "JSR PrNyb:PLA , .PrNyb 6$€ #15:CMP #10:BCC PrDigit:ADC #6 @ .PrDigit JADC #—"0":JMP OSWRCH T: ^.go% h .Format r?LDA #tracks:PHA :\ Set number of tracks |%LDA #1:LDY #0:LDX #&A8:JSR OSARGS †&LDA (&A8),Y:CMP #—"0":BCC BadDrive CMP #—"4":BCC GoodDrive š .BadDrive ¤%BRK:EQUB 205:EQUS "Bad drive":BRK ®: ¸.GoodDrive Â5€ #3:STA PageF+&90 :\ Drive number Ì&LDA #0:STA PageF+&94:STA PageF+&92 Ö1PLA:STA PageF+&91 :\ Tracks à'STA PageF+&95:CMP #101:BCC FormDsk5 êD€ #&FE:STA PageF+&95 :\ Force tracks even if 2*side ô>DEC PageF+&92:.FormDsk5 :\ Set doubleside flag þ%LDA PageF+&90:CMP #2:BCC FormDsk6 MLDA #0:STA PageF+&92:.FormDsk6 :\ If drv2/3, can only do single side :LDX #TxtDrv-TextTable:JSR PrText :\ "Format drive " LDA PageF+&90:JSR PrNyb &LDA #—"?":JSR OSWRCH 0@JSR OSRDCH:PHA:JSR OSNEWL:PLA :\ Wait for confirmation :"€ #&DF:CMP #—"Y":BEQ FormatYes DRTS N.FormatYes X: b8BIT PageF+&92:BPL FormDskTrackZero :\ Double sided? lELDA PageF+&95:LSR A:STA PageF+&95 :\ Divide TracksThisSide by 2 v.FormDskTrackZero €?LDA #7:STA PageF+&93 :\ Initial sector start Š.FormDskLoop ”9LDA PageF+&90:JSR FormatTrack :\ Format a track ž BIT &FF:BPL P%+5:JMP FormEsc ¨EINC PageF+&94:LDA PageF+&94 :\ Inc ThisTrack, at end yet? ²@CMP PageF+&95:BNE FormDskLoop :\ Loop to do next track ¼: ÆIBIT PageF+&92:BPL FormDsk7a :\ If singlesided, jump to finish ÐALDA PageF+&90:€ #2:BNE FormDsk7a :\ If side2, jump to finish Ú=LDA PageF+&90:„A #2:STA PageF+&90 :\ Set drive to side 2 äALDA #0:STA PageF+&94:BEQ FormDskLoop:\ Loop to do second side î: ø$\ Now initialise formatted disk: :  .FormDsk7a 1JSR OSNEWL:LDA PageF+&91:PHA :\ Tracks  0LDY PageF+&90 :\ Drive *: 4\ Initialise sector 0: >: H LDX #0:LDA #—" ":.FormDsk7Lp RJCPX #8:BNE P%+4:LDA #0 :\ Spaces for 0..7, zeros for rest \&STA PageF+&00,X:INX:BNE FormDsk7Lp f2TYA:PHA:JSR WriteToDisk :\ Y=Drive p:PLA:TAY :\ Save drive in Y z: „\ Initialise sector 1: Ž: ˜>LDA #0:STA PageF+&04:STA PageF+&05 :\ Cycle=0, no entries ¢9STA PageF+&06:PLA:STA PageF+&07 :\ Sectors=Tracks ¬;ASL PageF+&07:ROL PageF+&06 :\ Sectors=Tracks*2 ¶;ASL PageF+&07:ROL PageF+&06 :\ Sectors=Tracks*4 À#CLC:ADC PageF+&07:STA PageF+&07 Ê;LDA #0:ADC PageF+&06:STA PageF+&06 :\ Sectors=Tracks*5 ÔPLA:TAX :\ Get retries counter ~9LDA OswFDC_Result:BEQ WriteOk :\ Get the result ˆCMP #&12:BEQ WriteProtected ’DDEX:BNE WriteToDiskLp :\ Retry if not given up yet œ'BRK:EQUB 199:EQUS "Write error":BRK ¦.WriteProtected °0BRK:EQUB 201:EQUS "Disk write protected":BRK º .WriteOk Ä .FormEsc ÎRTS Ø: â: ì.FormatTrack ö\ A=dfs drive number (STA PageF+&80:PHA:LDA #13:JSR OSWRCH  8LDX #TxtForm-TextTable:JSR PrText :\ "Formatting " PLA:JSR PrNyb LDA #—":":JSR OSWRCH (LDA PageF+&94:JSR PrHex 2.FormDskGoLp <LDX #10:BIT &FF:BMI FormEsc F.FormSectLp1 P#LDA FormTable,X:STA PageF+&81,X ZDEX:BPL FormSectLp1 d'LDA PageF+&94:STA PageF+&87:\ track n\ Set up sector table xLDX #0:.FormSectLp2 ‚!LDA PageF+&94:STA PageF+&00,X ŒLDA #0:STA PageF+&01,X –/LDA PageF+&93:STA PageF+&02,X:INC PageF+&93  CMP #9:BCC FormSect2 ªLDA #0:STA PageF+&93 ´.FormSect2 ¾LDA #1:STA PageF+&03,X ÈINX:INX:INX:INX:CPX #40 ÒBNE FormSectLp2 Ü&LDA PageF+&93:SBC #3:BPL FormSect3 æ$ADC #10:.FormSect3:STA PageF+&93 ð6LDX #(PageF+&80)€&FF:LDY #(PageF+&80)256:LDA #&7F úJSR OSWORD LDA PageF+&8C:BEQ FormGoEnd 8CMP #&12:BNE P%+5:JMP WriteProtected:BCC FormDskGoLp CMP #&14:BEQ FormDskGoLp "#LDA #—"?":JSR OSWRCH:JMP OSNEWL ,.FormGoEnd 6RTS @: J .OswFDC T.OswFDC_Drive :EQUB 0 ^C.OswFDC_Addr :EQUD PageF „ &FFFF0000 :\ Address of sector data hEQUB 3:EQUB &4B :\ "Write" r.OswFDC_Track :EQUB 0 |.OswFDC_Sector:EQUB 0 †.OswFDC_Number:EQUB &21 .OswFDC_Result:EQUB 0 š: ¤.FormTable ®$EQUD PageF „ &FFFF0000:\ =sectab ¸EQUB &5:EQUB &63:\ =format ÂEQUB 0:\ track ÌEQUB &10:\ gap3 Ö EQUB &2A:\ sector num + size àEQUB &00:\ gap5 êEQUB &10:\ gap1 ô: þ: ] í Jñ"*Save Form";tracks;" ";~mcode%;" ";~O%;" ";~go%„&FFFF0000;" ";~load% ÿ