Routinen für kanalorientierte Diskettenoperationen

Die hier vorgestellten Routinen sind solche für zur Zeichen Ein-/Ausgabe bei Diskettenoperationen. Die Auswahl der Dateien erfolgt hier über logische Kanäle, so wie es auch von BASIC bekannt ist:

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

CHNINI.MAC
CHNINI B: Initialisierung eines Diskettenkanals
  I: Register C hält Kanal in Bereich 0 bis 15
Register B hält Mode Byte wie folgt:
0 :Öffnen einer Datei zum Lesen
1 :Öffnen einer neuen Datei
2 :Datei löschen vor neuer Öffnung
3 :Öffnen einer Datei zum Schreiben
Bei gesetztem MSB kann eine Re-ininitialisierung eines bereits geöffneten Kanals erfolgen. Registerpaar DE hält Parameter Block Adresse:
PB+0,1die 16 Bit DMA Puffer Adresse
PB+2der 8 Bit relative Puffer Zeiger
PB+3,4die 16 Bit FCB Adresse
PB+5der Userbereich (-1 eingestellter)
  O: Die Carryflag ist bei einem Fehler gesetzt - Kanal außerhalb des Bereiches oder bereits geöffnet, Datei ist nicht auf Diskette oder kann nicht neu eingerichtet werden

CHNTAB.MAC
@CHACC B: Überprüfen eines Diskettenkanals
  I: Register C hält Kanal im Bereich 0 bis 15
  O: Die Carryflag ist gesetzt im Fehlerfall - Kanal außerhalb des Bereiches. Bei nichtgesetzter Carryflag zeigt die gesetzte Zeroflag an, dass der Kanal geöffnet ist, sonst nicht geöffnet. Registerpaar HL zeigt auf den zugehörigen Kanal Kontroll Block

CHNXFR.MAC
CHNXFR B: Durchführen eines Kanaltransfers. Lesen oder Schreiben ergibt sich aus der Initialisierung
  I: Register C hält Kanal im Bereich 0 bis 15 und Akku hält Byte, falls auf Diskette geschrieben werden soll
  O: Die Carryflag ist gesetzt im Fehlerfall - Kanal außerhalb des Bereiches oder Dateifehler. Bei nicht gesetzter Carryflag hält der Akku das Byte, falls von Diskette gelesen wurde

CHNIN.MAC
CHNIN B: Lesen eines Bytes vom Diskettenkanal
  I: Register C hält Kanal im Bereich 0 bis 15
  O: Die Carryflag ist gesetzt im Fehlerfall - Kanal außerhalb des Bereiches oder Dateifehler, sonst nicht gesetzt und der Akku hält das gelesene Byte

CHNOUT.MAC
CHNOUT B: Schreiben eines Bytes auf Diskettenkanal
  I: Register C hält Kanal im Bereich 0 bis 15 und der Akku hält das zu schreibende Byte
  O: Die Carryflag ist gesetzt im Fehlerfall - Kanal außerhalb des Bereiches oder Dateifehler

CHNEOF.MAC
CHNEOF B: Lesen eines Zeichens vom Diskettenkanal und testen EOF
  I: Register C hält Kanal im Bereich 0 bis 15
  O: Die Carryflag ist gesetzt im Fehlerfall - Kanal außerhalb des Bereiches oder Dateifehler - oder beim Zeichen EOF (Hex 1A - Ctrl-Z). Der Akku hält das gelesene Zeichen

CHNCLS.MAC
CHNCLS B: Schließen eines oder aller Diskettenkanäle
  I: Register C hält Kanal im Bereich 0 bis 15 oder -1 falls alle Kanäle geschlossen werden sollen
  O: Die Carryflag ist gesetzt im Fehlerfall - Kanal außerhalb des Bereiches oder Dateifehler

CHNUSR.MAC
@CHUSR B: Auswählen eines Userbereiches und Diskettenoperation ausführen
  I: Registerpaar BC hält die Adresse der auszuführenden Diskettenoperation.
Registerpaar HL hält die Definitionsadresse-1 des Userbereiches. Userbereich -1 bedeutet keine Änderung des Bereiches
  O: Die Carryflag ist gesetzt im Fehlerfall

CHNTST.MAC
@CHTST B: Test ob der aufgerufene Kanal geöffnet ist
  I: Register C hält Kanal im Bereich 0 bis 15
  O: Die Carryflag ist gesetzt im Fehlerfall - Kanal außerhalb des Bereiches oder nicht geöffnet. Bei nicht gesetzter Carryflag zeigt die gesetzte Zeroflag einen Schreibkanal, eine nicht gesetzte Zeroflag einen Lesekanal an