(**********************************************************************) (* *) (* Ph”niX SoftCrew Turbo Pascal Programme *) (* most (c) by PSC Software Development Lippstadt/Warendorf *) (* *) (* Ph”niX SoftCrew #### #### #### *) (* c/o Carsten Strotmann # # ## ## *) (* An der Kreutzbrede 20 #### ### ## Software Development *) (* # ## ## *) (* 4410 Warendorf 1 # #### #### *) (* *) (**********************************************************************) (* Programmname :ATARI Kompatibilit„ts Unit Filename :A_UNIT.PAS von :Carsten Strotmann letzte Žnderung:06.02.91 Bemerkung : *) UNIT A_UNIT; INTERFACE USES DOS, CRT; TYPE a_sector = RECORD CASE INTEGER OF 1 : ( secdata : ARRAY [0..252] OF BYTE; { Sektordaten } seclink : WORD; { Link Word } secsize : BYTE; { Anzahl Bytes } dummy : WORD; ); 2 : ( sectordat: ARRAY [0..$FF] OF BYTE ); END; drivetab = RECORD steptime : BYTE; { Schrittzeit } dmamode : BYTE; { DMA Modus } motorwait: BYTE; { Motor Nachlaufzeit } secbyte : BYTE; { Bytes pro Sektor } sectrack : BYTE; { Max. Anzahl Sek. pro Track } secspace1: BYTE; { Zeit zwischen Sektoren } notused : BYTE; { unbenutzt } secspace2: BYTE; { Freiraum zwischen Sektoren } fillcode : BYTE; { ASCII Code zum fllen } endtime : BYTE; { Ruhezeit zum Ausschwingen } starttime: BYTE; { Anlaufzeit des Motors } END; filename = RECORD name : ARRAY [0..7] OF CHAR; { Bezeichnung } ext : ARRAY [0..2] OF CHAR; { Extender } END; direntry = RECORD flag : BYTE; { Statusflag } length : WORD; { L„nge des Files } startsec: WORD; { Startsector } name : ARRAY [0..7] OF CHAR; { Bezeichner } ext : ARRAY [0..2] OF CHAR; { Extender } END; vtoc = RECORD version : BYTE; { Dos Version kompat. } maxfree : WORD; { Max. Sektoren der Disk } freesec : WORD; { Freie Sektoren } table : ARRAY [0..$FF] OF BYTE; { Sektorenbelegungstabelle } END; VAR olddrivetab : POINTER; { Zeiger auf alte Tabelle } a_drivetab : drivetab; { Neue Laufwerkstabelle } a_vtoc : vtoc; { VOLUME TABLE OF CONTENTS } a_dir : ARRAY [1..64] OF direntry; { DIRECTORY ARRAY } dir_read, { Flag fr Directory schon gelesen } vtoc_read : BOOLEAN; { Flag fr VTOC schon gelesen } secprotrk, { Sektoren pro Track } secsize, { Sektorengr”áe } diskside, { Diskettenseite } drivenum, { Laufwerksnummer } entrycount, { Eintragsnummer } a_error : BYTE; { Fehlernummer } FUNCTION DiskStatus : BYTE; { Ermittelt den Diskstatus } PROCEDURE DiskReset; { Fhrt einen Diskreset aus } PROCEDURE SetDrive (drive, value : BYTE); { Setzt Formatangaben fr Diskettenlaufwerk } PROCEDURE SetNewDriveTab (strack, sbyte : BYTE); { Installiert neue Laufwerkstabelle } PROCEDURE SetOldDriveTab; { Restauriert alte Laufwerkstabelle } FUNCTION Read_A_Sector (drive, side : BYTE; num : WORD; VAR buffer : a_sector): BYTE; { Liest einen ATARI Sektor } FUNCTION Write_A_Sector (drive, side : BYTE; num : WORD; VAR buffer : a_sector): BYTE; { Schreibt einen ATARI Sektor } PROCEDURE Read_Dir (drive : BYTE); { Liest Directory ein } PROCEDURE Read_VTOC (drive : BYTE); { Liest VTOC ein } FUNCTION A_FindFirst (filen : STRING) : BYTE; { Findet ersten Filenamen in Directory und liefert Eintragsnummer zurck } FUNCTION A_FindNext (filen : STRING): BYTE; { Findet n„chsten Filenamen in Directory und gibt Eintragsnummer zurck }