NZCOM-Tip: Nutzung des IOP

von Mario Leubner

Wer hat sich nicht schon einmal gefragt, wozu das meist ungenutzte IOP-Segment von NZCOM gut ist? Im NZCOM-Handbuch steht nur:

 

,,IOP (Input/Output Package): Es gestattet das bedarfsweise Laden von I/O-Treibern, um solche Möglichkeiten wie Tastaturmakros oder Device-Umleitung von Bildschirm- oder Druckerausgabe in eine Datei ... [bereitzustellen.]``

Lange habe ich nach fertigen Modulen gesucht, aber nichts passendes finden können. Am brauchbarsten war noch die Beschreibung der IOP-Schnittstellen in der Datei IOP.LBR (befindet sich auf der V-Disk Nummer 25). Diese ist natürlich in englisch und ich erspare mir an dieser Stelle eine Übersetzung. Meine wichtigste Erkenntnis war, daß es sich meist um hardwarespezifische Treiber mit ganz speziellen Systemeigenschaften handelt. Das erschwert eine Nachnutzung auf anderen Systemen.

Das Prinzip des IOP ist eine Erweiterung der BIOS-Funktionen. Das IOP enthält wie das BIOS einen Sprungverteiler. Ist im Z-System ein IOP vorhanden, dann werden die BIOS-Rufe für Konsole, Drucker und Zusatzkanäle umgeleitet. Im IOP erfolgt dann eine Weiterleitung an das eigentliche E/A-Gerät. Außer dieser Umleitung der BIOS-Funktionen sind noch Status- und Steuerfunktionen integriert. Die Tabelle zeigt eine Übersicht der verfügbaren Funtionen.

Daran ist zu sehen, daß die Routinen zur Steuerung vorhanden sind. Im IOP gibt es aber (im Gegensatz zum RCP/FCP/CPR) keine eigenen Kommandos. Es sind deshalb noch zum IOP passende Programme erforderlich, die auf die IOP-Schnittstelle zugreifen. Das zu den Grundlagen, wer tiefer einsteigen will, dem empfehle ich das Studium der oben erwähnten IOP.LBR.

 

Gruppe Offset Name Beschreibung
hex. dez.
IOP 00 0 STATUS IOP Statusabfrage
Status 03 3 SELECT IOP Geräteauswahl
und 06 6 NAMER IOP Gerätenamen abfragen
Steuerung 09 9 INIT IOP Initialisierung
0C 12 CONST Status Konsoleneingabe
0F 15 CONIN Konsoleneingabe
BIOS 12 18 CONOUT Konsolenausgabe
Schnitt- 15 21 LIST Druckerausgabe
stelle 18 24 PUNCH Zusatzausgabe
1B 27 READER Zusatzeingabe
1E 30 LISTST Status Druckerausgabe
IOP Patch 21 33 PATCH Konsole patchen
24 36 COPEN Mitschnitt Konsole starten
IOP 27 39 CCLOSE Mitschnitt Konsole beenden
Recorder 2A 42 LOPEN Mitschnitt Drucker starten
2D 45 LCLOSE Mitschnitt Drucker beenden
IOP ID 30 48 ID Identifizierung ,,Z3IOP``

Aufgrund der fehlenden Möglichkeiten in ML-DOS, die Bildschirm- oder Druckerausgabe in eine Datei umzulenken, habe ich selbst einen IOP geschrieben. Realisiert wurden folgende Möglichkeiten:

  • Umlenken der Druckerausgabe in eine Datei
  • Umlenken der Konsolenausgabe in eine Datei
  • Druckprotokoll der Bildschirmausgabe

Ich nutze dabei nur die ,,echten`` BIOS-Funktionen ohne Zugriff auf gerätespezifische Schnittstellen. Damit dürfte mein IOP auch auf anderen Rechnern laufen, Voraussetzung ist allerdings ZSDOS/ZDDOS als BDOS-Version und mindestens 7 Sektoren im IOP-Segment.

Wie installiere ich nun einen IOP in NZCOM?

Zunächst muß man sich eine neue Speicheraufteilung erstellen. Das geht am besten mit MKZCM.COM. Dort gebe ich unter Punkt 4 die 7 benötigten Sektoren an und speichere das Ergebnis ab. Als nächstes muß ZSIOP7.ZRL in NZIOP.ZRL umbenannt und in die Bibliotheksdatei NZCOM.LBR gepackt werden. Ist das geschafft, kann man NZCOM neu starten. Die Anwesenheit des IOP kann man mit SHOW.COM kontrollieren: Unter Menüpunkt ,,I`` müssen die Gerätenamen der I/O-Treiber angezeigt werden. Besser ist noch das Anlegen einer neuen Datei statt NZCOM.LBR, denn man will ja nicht immer mit dem IOP-Paket arbeiten. Ich habe mir vom laufenden NZCOM mit IOP ein System ,,geblitzt`` das ganz einfach mit dem Namen aufgerufen wird.

Wie bereits gesagt, braucht man noch Kommandos, um die IOP-Steuerung auszulösen. Eines habe ich schon erwähnt, es ist SHOW.COM, damit kann man sich zumindest die möglichen Gerätenamen anzeigen lassen. Zur Umschaltung der Geräte eignet sich DEV.COM bzw. DEVICE.COM von den Disketten der Z3COM's. Interessant ist dies ja nur für die Bildschirmausgabe, die gleichzeitig zum Drucker geschickt werden soll. Das Kommando dafür lautet:

A0>DEV CON:=PROT

Zum Abschalten des Druckers gibt man ein:

A0>DEV CON:=CRT

DEVICE.COM realisiert den gleichen Funktionsumfang, jedoch nicht aus der Kommandozeile, sondern menügesteuert.

Zum Starten/Stoppen der Protokollierung in einer Datei dient RECORD.COM. Dieses habe ich selbst etwas umgeschrieben, um die von mir gewünschten Eigenschaften zu realisieren. Meine Version 3.2 von RECORD.COM ist speziell an das IOP-Modul ZSIOP7 angepaßt. Die Verwendung mit anderen IOP's kann Probleme bereiten. Der Aufruf mit RECORD // zeigt eine Hilfeseite, die eigentlich keine weitere Erläuterung erfordert. Um die Druckerausgabe beim Backup mit BU.COM statt auf dem Drucker in eine Datei BU.LST zu schreiben, gibt man an:

A0>RECORD PRINTER ON C0:BU.LST;BU;RECORD PRINTER OFF

Ich habe alle Dateien zu diesem IOP in ein Archiv gepackt, soweit vorhanden, sind auch HELP's und die Quelltexte dabei. Bei den COM's gibt es teilweise Typ3- und Typ4-Programme, diese heißen dann *.3OM und *.4OM und sind bei Bedarf in *.COM umzubenennen.

Anmerkung:

Das Programm CAPTURE.COM - vorgestellt in den letzten KC-News - war mir zum Zeitpunkt der Programmierung von ZSIOP+RECORD noch nicht bekannt. Es werden von beiden Programmen ähnliche Funktionen realisiert, wobei es Gemeinsamkeiten und Unterschiede gibt: Beide Programme können Ein- und Ausgaben umleiten, beide Programme greifen in die BIOS-Schnittstelle ein und beide Programme reduzieren den TPA. CAPTURE.COM läuft unter normalem CP/M, also auch unter ML-DOS, ZSIOP benötigt das Z-System und ZSDOS. CAPTURE.COM bietet etwas mehr Möglichkeiten, so können z.B. auch Tastatureingaben umgeleitet werden. ZSIOP verbraucht dagegen nur 7 Records an TPA, während der residente Teil von CAPTURE.COM den TPA um mindestens 30 Records reduziert. Je nach System und Anwendungsfall muß jeder also selbst entscheiden, welches Programm er nutzt. Für die meisten Fälle reicht mir das speicherplatzsparende ZSIOP aus. Wer aber kein NZCOM hat, kann mit CAPTURE.COM auch die Umleitungen nutzen.