Verschiedene Datei-Routinen

Die hier vorgestellten Routinen sind solche für das allgemeine Arbeiten mit Dateien.

Modul-Entry B: Beschreibung, I: Eingabe-, O: Ausgabeparameter

FILSIZ.MAC
FILSIZ B: Ermitteln der Größe einer Datei
  I: Das Registerpaar DE hält Adresse der FCB
  O: Die Carryflag ist gesetzt falls Datei nicht vorhanden ist, sonst nicht gesetzt. Die Dateigröße in Rekords (128 Bytes) steht dann in FCB+33 bis FCB+35, beginnend mit niederwertigem Byte in FCB+33. Im Extended Error Mode im Fehlerfall Verzweigung möglich. Das Registerpaar HL hält das niederwertige und mittlere Byte, der Akkumulator hält das höchstwertige Byte. Die gesetzte Zeroflag zeigt an, dass das höherwertige Byte Null ist.

DSKSIZ.MAC
DSKSIZ B: Berechnung der freien Kapazität einer Diskette
  I: Der Akku hält das Laufwerk : 0 -> A ... 15 -> P
  O: Die Carryflag ist gesetzt bei Laufwerksfehler und der Akku hält im Extended Error Mode den Fehlerkode, eine Verzweigung in die Fehlerroutine ist möglich. Im Normalfall hält der eingestellte DMA Puffer die Anzahl freier Rekords, DMA+0 hält das niederwertige und DMA+2 das höchstwertige Byte

DRVFRE.MAC
DRVFRE B: Berechnung der freien Kapazität einer Diskette
  I: Der Akku hält das Laufwerk : 0 -> A ... 15 -> P
  O: Die Carryflag ist gesetzt bei Laufwerksfehler und der Akku hält im Extended Error Mode den Fehlerkode, eine Verzweigung in die Fehlerroutine ist möglich. Im Normalfall hält das Registerpaar HL den freien Platz in kByte.

FCBFRE.MAC
FCBFRE B: Berechnung der freien Kapazität einer Diskette
  I: Das Registerpaar DE zeigt auf einen File Control Block
  O: Die Carryflag ist gesetzt bei Laufwerksfehler und der Akku hält im Extended Error Mode den Fehlerkode, eine Verzweigung in die Fehlerroutine ist möglich. Im Normalfall hält das Registerpaar HL den freien Platz in kByte.

CURSEC.MAC, (CURSCT.MAC)
CURSEC B: Ermitteln der Anzahl Mehrfach-Rekords für File Transfer
(alt: CURSCT) I: ---
  O: Der Akku hält die aktuelle Anzahl Rekords 1..128

MULSEC.MAC
MULSEC B: Setzen von Mehrfach-Rekords für File Transfer
  I: Der Akku hält die neue Anzahl Rekords 1..128
  O: Die Carryflag ist gesetzt bei fehlerhafter Anzahl Rekords

CURDRV.MAC
CURDRV B: Bestimmen des eingestellten Laufwerkes
  I: ---
  O: Akku hält Laufwerk : 0 -> A .. 15 -> P

SELDRV.MAC
SELDRV B: Auswahl eines Laufwerkes
  I: Akku hält Laufwerk : 0 -> A .. 15 -> P
  O: Die Carryflag ist gesetzt bei nicht existierendem Laufwerk und der Akku hält den Fehlerkode im Extended Error Mode

RESDRV.MAC
RESDRV B: Rücksetzen eines oder aller Laufwerke
  I: Akku hält Laufwerk:
0 .. 15->A: .. P:
>15->Alle Laufwerke
  O: entfällt bei Einzellaufwerk. Beim Rücksetzen aller Laufwerke wird als aktuelles Laufwerk A: und der DMA Puffer auf 0080H eingestellt

INIDSK.MAC
INIDSK B: Rücksetzen aller Laufwerke
  I: ---
  O: Als aktuelles Laufwerk wird A: und der DMA Puffer auf 0080H eingestellt

USRSET.MAC
USRSET B: Setzen des Userbereiches
USRGET B: Holen des Userbereiches
  I: Beim Setzen hält Akku Userbereich von 0 .. 15
  O: Beim Holen hält Akku den aktuellen Userbereich

SETATT.MAC
SETATT B: Setzen von Dateiattributen
  I: Das Registerpaar DE hält Adresse des FCB
  O: Die Carryflag ist gesetzt falls Datei nicht gefunden wurde und Akku hält Fehlerkode im Extended Error Mode. Fehlerverzweigung ist möglich

DIRMAX.MAC
DIRMAX B: Ermitteln der maximalen Anzahl Directory Einträge
  I: Akku hält Laufwerk : 0 -> A .. 15 -> P
  O: Registerpaar HL hält die maximale Anzahl von Einträgen. Die Carryflag ist gesetzt bei nicht existierendem Laufwerk und der Akku hält den Fehlerkode im Extended Error Mode

FILES.MAC
FILES B: Einlesen einer Directory in den Speicher
  I: Register BC hält die maximale Anzahl zu lesender Einträge. Register HL weist auf den Start des Speicherbereiches. Register DE hält die Adresse des FCB, in dem Wildcards („?") benutzt werden können. Auch das Laufwerk wird hier definiert. (0 für aktuelles Laufwerk, 1 .. 16 für A .. P)
  O: Die Carryflag ist gesetzt bei nicht gefundener Datei. Das Register BC hält die tatsächliche Anzahl gefundener Einträge, Register HL weist auf den Start des Speicherbereiches und Register DE weist auf die erste freie Speicherstelle nach der Liste. Die nicht sortierte Liste ist gefüllt mit jeweils 12 Byte langen Einträgen. Das erste Byte ist hierbei die gefundene Benutzernummer und muss vor dem Gebrauch in einer FCB gegen ein Laufwerk getauscht werden.

SORT.MAC
SORT B: Sortieren einer Liste von Dateien
  I: Register BC hält Anzahl zu sortierender Dateien, Register HL zeigt auf den Anfang der Liste, wie sie von der Funktion FILES erzeugt wurde, mit einer Dateilänge von jeweils 12 Zeichen (Länge kann verändert werden in SORT-2)
  O: Register unverändert

DIRGET.MAC
DIRGET B: Einlesen und Sortieren einer Directory in den Speicher
  I: Register C hält den Userbereich 0 .. 15. Register HL weist auf den Start des Speicherbereiches. Register DE hält die maximale Anzahl zu lesender Einträge. Der Akku hält die zu suchenden Dateiattribute in den Bits 7 (SYS), 6 (RO) und 5 (Ist Bit 5 gesetzt, werden Gruppen selektiert). Ist Bit 4 gesetzt, so werden die Dateiattribute so belassen, bei nicht gesetztem Bit 4 werden die Attribute gelöscht.
76.5<-Bits76.5<-Bits
00.0DIR01.1Alle SYS
01.0SYS10.1Alle RO
10.0ROxx.1Alle Dateien
11.0SYS und RO
Der Standard File Control Block (FCB) in Adresse 005CH hält die Dateimaske der zu suchenden Dateien. Hier können Wildcards („?") benutzt werden. Auch das Laufwerk wird hier definiert. (0 für aktuelles Laufwerk, 1 .. 16 für A .. P)
  O: Die Carryflag ist gesetzt bei nicht existierendem Laufwerk und der Akku hält den Fehlerkode im Extended Error Mode, ebenfalls bei einem fehlerhaften Userbereich. Das Register HL hält die tatsächliche Anzahl gefundener Einträge und Register DE weist auf die erste freie Speicherstelle nach der Liste. Die sortierte Liste ist gefüllt mit jeweils 12 Byte langen Einträgen gefolgt von einer 16 Bit Adresse als Referenz auf das nächste Element. Das Feld SRFBUF muss die Adresse eines 128 Byte Puffers halten, die Voreinstellung ist der Standard DMA Puffer ab 0080H

DIRSTA.MAC
DIRSTA B: Umwandlung einer in den Speicher gelesenen Directory
  I: Register HL weist auf die Directory Liste, wie sie von DIRGET erzeugt wurde. Register DE weist auf die Startadresse für die Wandlung
  O: Register HL weist auf die erste freie Speicherstelle nach der neuen Liste, Register DE ist unverändert. Die Eintragsliste besteht aus Elementen mit je 12 Zeichen, die mit einer Null abgeschlossen sind. Das letzte Element beginnt mit einer Null.

CHAIN.MAC
CHAIN B: Verzweigen auf eine andere .COM Datei
  I: Das Register E hält die Einstellungsflag für den CCP. Der eingestellte DMA Puffer muss die aufrufende Kommandozeile enthalten, die mit einer Null beendet wird
  O: ---

BIOSCL.MAC
BIOSCL BIOSPB B: Direkter BIOS Aufruf
  I: Der erste Parameter in Feld BIOSPB hält die BIOS Funktionsnummer, Voreinstellung ist Warmstart. Die nächsten Parameter sind Akku, Registerpaare BC, DE und HL
  O: Akku und Registerpaar HL wie bei den entsprechenden Aufrufen beschrieben, Registerpaar DE in BIOSPB+4

SCBFUN.MAC
SCBFUN SCBPB B: Holen oder Setzen von System Control Block Werten
  I: Der erste Parameter im Feld SCBPB hält den Offset im SCB im Bereich von 0 .. 63H. Der nächste Parameter gibt den Modus an (00 = Holen, FF = Wort setzen, FE = Byte setzen). Der letzte Parameter ist das zu setzende Byte oder Wort
  O: Beim Holen hält Akku das Byte und Register HL das Wort

GETVER.MAC
GETVER VERNUM B: Holen der CP/M Versionsnummer
  I: VERNUM - Voreingestellt ist CP/M PLUS (Hex 31)
  O: Die Carryflag ist nicht gesetzt bei Übereinstimmender CP/M Version, gesetzt bei anderen CP/M Versionen. Der Akku hält die erwartete, Register B und HL die gelesene Versionsnummer

GETAMS.MAC
GETAMS AMSTRA B: Testen der CP/M PLUS und der speziellen AMSTRAD Version
  I: AMSTRA - Voreingestellt ist die Maschine JOYCE (1) bzw. PCW 8xxxx.
  O: Die Carryflag ist nicht gesetzt bei CP/M PLUS und der Maschine JOYCE, gesetzt bei anderer CP/M Version oder anderer Maschine

USERF.MAC
USERF B: Aufruf einer Extended BIOS (XBIOS) Funktion
  I: Dem Aufruf muss der XBIOS Vektor unmittelbar folgen und die Register müssen entsprechend der gewählten Funktion gesetzt sein
  O: Hängt ab von XBIOS Funktion