program XFormat; { 1987 by M. Anton } { 'DISCKIT3' fuer JOYCE, DATA ONLY und SYSTEM-Format; auch bis Track 42/43. Fuer COM-File Compilerendadresse auf $DF00 oder kleiner setzen!!! } type Track_Id = array[0..35] of byte; var Track : byte absolute $DF90; Table : Track_Id absolute $DFA0; Von, Bis : integer; Taste : char; const { Tracktabellen } Data:Track_Id = ($00,$00,$C1,$02, $00,$00,$C6,$02, $00,$00,$C2,$02, $00,$00,$C7,$02, $00,$00,$C3,$02, $00,$00,$C8,$02, $00,$00,$C4,$02, $00,$00,$C9,$02, $00,$00,$C5,$02); System:Track_Id = ($00,$00,$41,$02, $00,$00,$46,$02, $00,$00,$42,$02, $00,$00,$47,$02, $00,$00,$43,$02, $00,$00,$48,$02, $00,$00,$44,$02, $00,$00,$49,$02, $00,$00,$45,$02); Joyce:Track_Id = ($28,$00,$01,$02, $28,$00,$06,$02, $28,$00,$02,$02, $28,$00,$07,$02, $28,$00,$03,$02, $28,$00,$08,$02, $28,$00,$04,$02, $28,$00,$09,$02, $28,$00,$05,$02); procedure Message; begin writeln; writeln; writeln ('- Disk einlegen und Taste dr}cken -'); while not keypressed do; end; procedure Scan_Key; begin repeat until keypressed; read(kbd,Taste); end; procedure Menu; begin clrscr; writeln ('************************************'); writeln ('* XFormat v 1.0 1986 by M.Anton *'); writeln ('************************************'); writeln; writeln; writeln ('1 = DATA ONLY (178 KB) Track 0-39'); writeln ('2 = DATA ONLY (178 KB) Track 0-42'); writeln ('3 = DATA ONLY (178 KB) Track 40-42'); writeln; writeln ('4 = SYSTEM (169 KB) Track 0-39'); writeln ('5 = SYSTEM (169 KB) Track 0-42'); writeln ('6 = SYSTEM (169 KB) Track 40-42'); writeln; writeln ('7 = JOYCE (173 KB) Track 40-42'); writeln ('0 = Verlassen - keine Aktion '); writeln; write (' Wahl: '); repeat Scan_Key; until Taste in ['0'..'7']; writeln (Taste); end; procedure Select_A; { A: als Bezugslaufwerk (BDOS#14) } begin inline($1E/$00/$0E/$0E/$CD/$05/$00) end; { XDPBs bei $F000 initialisieren (XBIOS#7): } procedure Make_Data_XDPB; begin inline($3E/$02/$DD/$21/$00/$F0/$CD/$5A/$FC/$95/$00) end; procedure Make_System_XDPB; begin inline($3E/$01/$DD/$21/$00/$F0/$CD/$5A/$FC/$95/$00) end; procedure Make_Joyce_XDPB; begin inline($3E/$00/$DD/$21/$00/$F0/$CD/$5A/$FC/$95/$00) end; procedure Increment_Tracks; { erhoeht Tracknummern in Tracktabelle ab $DFA0 } begin inline($21/$A0/$DF/$11/$04/$00/$06/$09/$34/$19/$10/$FC) end; procedure Format_Track; { formatiert Track mit XDPB und Tracktabelle (XBIOS#5) } begin inline($06/$01/$0E/$00/$3A/$90/$DF/$57/$1E/$E5/$21/ $A0/$DF/$DD/$21/$00/$F0/$CD/$5A/$FC/$8F/$00) end; begin { Hauptprogramm } Menu; Select_A; case Taste of '0' : exit; '1' : begin Von:=0; Bis:=39; Make_Data_XDPB; Table:=Data; end; '2' : begin Von:=0; Bis:=42; Make_Data_XDPB; Table:=Data; end; '3' : begin Von:=40; Bis:=42; Make_Data_XDPB; Table:=Data; for Track:=0 to 40 do Increment_Tracks; end; '4' : begin Von:=0; Bis:=39; Make_System_XDPB; Table:=System; end; '5' : begin Von:=0; Bis:=42; Make_System_XDPB; Table:=System; end; '6' : begin Von:=40; Bis:=42; Make_System_XDPB; Table:=System; for Track:=0 to 40 do Increment_Tracks; end; '7' : begin Von:=40; Bis:=42; Make_Joyce_XDPB; Table:=Joyce; end; end; Message; for Track:=Von to Bis do begin Format_Track; Increment_Tracks; gotoxy(0,22); write ('Formatiere Track Nr.: ',Track); end; writeln; writeln; writeln ('Diskette wurde formatiert'); writeln ('von Track ',Von,' bis Track ',Track); writeln end.