Das Treibersystem von ZAS 1.3
von Mario Leubner
Damit das Treibersystem von ZAS 1.3 funktioniert, muß ZAS 1.3 zunächst geladen werden. Dazu gibt es mehrere Möglichkeiten:
- Boot-EPROM V3.0 (Wechsel des D004-EPROM's)
- Installation in den Systemspuren einer ML-DOS-Diskette oder der Festplatte mit SYSGEN.COM (V1.1)
- Nachladen mit LADE.COM bzw. DRIVER.COM
Den schnellsten Weg, ZAS 1.3 zu laden, bietet der BOOT-EPROM, damit wird ZAS direkt aus dem EPROM in den RAM kopiert und ist sofort mit JUMP FC aktiv. Wer den BOOT-EPROM im D004 nicht wechseln will, kann jedoch auch die beiden anderen Möglichkeiten wählen. Dieser Ladevorgang dauert deswegen etwas länger, da die gesamte Steuerschleife byteweise über den Koppel-RAM übertragen werden muß.
Wenn ZAS 1.3 seine Arbeit aufgenommen hat, können nun weitere Treiber geladen werden. Bisher war das nur mit speziellen Programmen möglich, welche die Laderoutine enthalten. Es handelt sich hier um DRUCK.COM, HPKC.COM und FADEN.COM. Jetzt will ich ein universelles Programm zum Laden der Treiber vorstellen. Auf dem Clubtreffen in Radebeul war es ja bereits zu sehen: DRIVER.COM.
Mit DRIVER.COM wird das bisherige LADE.COM ersetzt, welches ich für MicroDOS geschrieben hatte. Alle Funktionen von LADE.COM stehen auch in DRIVER.COM zur Verfügung. Dazu kommen neue Möglichkeiten im Zusammenhang mit der Speicherverwaltung von ZAS 1.3, zunächst aber einmal einen Blick auf den Speicher im Grundgerät, einige Bereiche sind ja während der CP/M-Betriebsart schon belegt:

Druckertreiber *.LST, Koppeltreiber *.KOP und Terminaltreiber *.ZAS haben fest vorgegebene Speicherbereiche. Die 31 freien Pages im RAM-0 und die 64 Pages im RAM-4 stehen den universellen Treibern *.DRV zur Verfügung und werden von ZAS 1.3 verwaltet. Die Treiber *.DRV sind dazu relocatibel, können also auf beliebigen Adressen laufen. Ermöglicht wird dies durch das PRL-Dateiformat, das den Treibern zugrunde liegt und einen speziellen Programmkopf (Header) im Treiber.
Das Laden der Treiber erfolgt mit DRIVER.COM ganz einfach aus der Kommandozeile oder einem SUBMIT-Script (z.B. INITIAL.SUB) beim Starten des Systems. Die Bedienung von DRIVER.COM ist relativ einfach und so ausgelegt, daß zum Laden der Standardtreiber die Angabe weiterer Parameter entfallen kann. Für die möglichen Eingaben gibt es eine kurze online-Hilfe, die bei der Eingabe DRIVER // angezeigt wird:
DRIVER V1.0 (c) by ML-Soft 1998 Aufruf: DRIVER [DIR:NAME.LBR] [NAME.TYP] - alle Angaben sind optional. - Standardbibliothek = DRIVER.LBR - mögliche Dateitypen sind: LST, KOP, ZAS, DRV.
Um einen einzelnen Treiber zu laden gibt man z.B. an:
DRIVER LX400.LST
und der Druckertreiber LX400.LST wird geladen und aktiviert. Es kann zusätzlich noch das Laufwerk angegeben werden:
- unter MicroDOS mit dem Laufwerksbuchstaben,
- unter ML-DOS zusätzlich mit einem USER-Bereich,
- unter NZ-COM alternativ auch mit dem Verzeichnisnamen.
Neben dem Laden der Einzeltreiber kann auch ein Paket aus mehreren Treibern geladen werden. Dazu sind alle gewünschten Treiber in einer Treiberbibliothek (Library) zusammenzustellen. Ohne zusätzliche Angabe wird die Standardbibliothek DRIVER.LBR vom aktuellen Laufwerk geladen, es kann aber auch ein anderer Dateiname (z.B. UNI.LBR) in der Kommandozeile angegeben werden:
DRIVER UNI.LBR
Schließlich kann man noch einzelne Treiber aus einer Library laden. Dazu gibt man nach dem LBR-Namen noch den Namen des zu ladenden Treibers an. Im LBR-Modus arbeitet DRIVER.COM so, daß als erstes der ZAS-Treiber geladen wird. Danach folgen Drucker- und Koppeltreiber. Erst wenn ein verschieblicher Treiber *.DRV geladen werden soll, erfolgt ein Test, ob ZAS 1.3 aktiv ist. Damit hat man die Möglichkeit, den ZAS-Treiber mit in die Treiberbibliothek zu packen und der Ladevorgang funktioniert auch, wenn vorher eine ältere ZAS- Version läuft. Als Nebeneffekt werden beim Laden von ZAS vorher aktive Treiber deaktiviert.
WICHTIG ist bei der Arbeit mit DRIVER.COM, daß stets der Dateityp angegeben werden muß, denn DRIVER.COM erkennt daran den Treibertyp und entscheidet auf welche Adresse der Treiber zu laden ist. Die Angabe von Jokerzeichen (? oder *) ist nicht zulässig. Generell erhält man die Hilfeseite wenn in der Kommandozeile ein Fehler vorliegt.
Während DRIVER.COM nun versucht, die Treiber zu laden, laufen verschiedene Schritte ab. Erst müssen die Treiber gelesen werden, dann wird bei ZAS Speicher beantragt, die Abhängigkeiten aufgelöst und die Treiber zum Grundgerät übertragen. Dabei werden die Namen der Treiber und die belegten Adressen am Bildschirm angezeigt. Folgende Fehlermeldungen können auftreten:
- KC85/4 erforderlich.
- ZAS 1.3 läuft nur auf dem KC85/4 (KC85/5) und DRIVER.COM ist deshalb nur auf diesen Rechnern lauffähig.
- Für verschiebliche Treiber bitte ZAS ab Version 1.3 benutzen!
- Sollen verschiebliche Treiber (*.DRV) geladen werden, muß ZAS 1.3 vorhanden sein.
- Datei nicht vorhanden.
- Die zu angegebene Datei ist nicht vorhanden.
- DRIVER.LBR enthält keine Treiber.
- In der angegebenen LBR-Datei sind keine Treiber (LST, KOP, ZAS oder DRV) vorhanden. DRIVER.COM kann nichts laden.
- Formatfehler.
- Dieser Fehler kann zwei Ursachen haben:
- Das LBR-Format ist fehlerhaft.
- Ein DRV-Treiber enthält keinen PRL-Vorblock.
- Laufwerkangabe fehlerhaft.
- Laufwerk, Userbereich oder DIR-Name existiert nicht oder wird vom laufenden System nicht unterstützt.
- Mehrdeutiger Dateiname.
- Jokerzeichen (? und *) sind nicht erlaubt.
- Dateiende überschritten.
- Die Treiberdatei oder LBR ist fehlerhaft.
- Treiber fehlt mit ID = ...
- Der zu ladende Treiber benötigt für seine Arbeit einen weiteren (Sub-) Treiber. Dieser Treiber ist noch nicht im Speicher und auch in der gerade zu ladenden Library nicht vorhanden. Zur Kontrolle wird der gesuchte ID-Code angezeigt.
- ID-Tabelle voll.
- Es können maximal 20 verschiedene Treiber geladen werden.
- Zu wenig Speicher frei.
- Für den zu ladenden Treiber ist nicht mehr genügend Speicher am Stück vorhanden.
- Treiber ist bereits im Speicher.
- Es wurde versucht, einen Treiber zu laden, der bereits aktiv ist. Ein Überschreiben ist nicht möglich. Soll ein Treiber mit der gleichen ID geladen werden, ist der alte vorher zu deaktivieren.
-
Die Treiber *.KOP, *.LST und *.ZAS werden auf eine fest vorgegebene Adresse geladen. Für die verschieblichen Treiber gilt dies nicht, diese werden auf eine freie Adresse geladen. Allerdings gibt es dabei Einschränkungen: Z.B. kann der Bildschirmschoner nur im RAM-0 laufen, andere Treiber laufen dagegen auch im RAM-4 oder nur dort. Dann entscheidet die Ladereihenfolge über die Adresse wo der Treiber läuft. Die Treiber einer Library werden stets in der Reihenfolge geladen, wie sie im LBR-Verzeichnis stehen, also genau in der Reihenfolge, in der sie in der Library aufgenommen wurden. Deshalb empfiehlt es sich, zuerst die Treiber zu laden, die nur in einem Bereich laufen und zum Schluß die Treiber, die beide Bereiche akzeptieren. So ist die Wahrscheinlichkeit höher, daß alle Treiber geladen werden können.
Soviel zu DRIVER.COM. Um sich ein Bild von der Speicherbelegung im Grundgerät zu machen, die ZAS-Speicherverwaltung zu testen und nicht mehr benötigte Treiber wieder zu löschen, eignet sich ZASTEST.COM. Ich habe das Programm noch etwas erweitert, damit auch der Aufruf von Treiberfunktionen getestet werden kann. Außerdem erfolgt jetzt die Ausgabe der aktiven Treiber am oberen Bildschirmrand, so daß man bei der Frage nach der ID-Nummer diese auf dem Bildschirm sieht. Für Interessierte ist der Quelltext ZASTEST.PAS wieder mit dabei.
Wie erstellt man eine Treiberbibliothek?
Zunächst muß man alle benötigten Treiber als Einzeldateien vorliegen haben. Die von MicroDOS bekannten Treiber *.LST und *.KOP gehören dazu, außerdem ZAS4V13.ZAS und natürlich die neuen verschieblichen Treiber *.DRV. Dazu zählen FADEN.DRV, HPKC.DRV und IRMBUF.DRV, welche auf der heutigen Diskette vorliegen. Zum Laden der Treiber könnte man jeden Treiber einzeln laden:
A0>DRIVER ZAS4V13.ZAS A0>DRIVER LQ100.LST A0>DRIVER V24H12A.KOP A0>DRIVER FADEN97.DRV A0>DRIVER IRMBUF.DRV A0>DRIVER HPKC11.DRV
Eine Vereinfachung erreicht man, indem man statt jedesmal DRIVER.COM aufzurufen alle weiteren Aufrufe durch das GO-Kommando ersetzt. Noch einfacher und schneller geht es, wenn man die Treiber aus einer Library lädt. Am einfachsten geht das Anlegen einer Bibliothek unter NZCOM, dort stehen genügend Werkzeuge zur Verfügung. Neben dem Universaltool VLU gibt es die Programme LPUT, LGET, LDIR, CL und andere. Unter normalen CP/M-Umgebungen sieht es dagegen etwas schlechter aus. Doch ein Test zeigte, daß die von mir benutzten Programme LPUT, LBREXT und LDIR auch ohne Z-System funktionieren. Deshalb beschränke ich meine Ausführungen auf diese Programme. LPUT (Version 2.2) erzeugt bzw. erweitert eine Bibliothek. Dazu kopiert man alle gewünschten Treiber am besten in ein leeres Verzeichnis. Die Syntax ist recht einfach:
LPUT lbrname file1,file2,... +nn
Anzugeben ist als erstes der Name der Bibliothek, danach folgt eine Liste der aufzunehmenden Dateien. Beim Anlegen einer Bibliotheksdatei muß festgelegt werden, wieviele Dateien maximal aufgenommen werden sollen. Deshalb kann mit der Angabe +nn zusätzlicher Platz reserviert werden, später ist eine Erweiterung nicht möglich und es muß eine neue Library erzeugt werden wenn mehr Dateien aufgenommen werden sollen. Also besser ein paar Einträge freihalten, dann gibt es nicht so schnell Probleme bei der Erweiterung (jeder Eintrag belegt übrigens 32 Byte, das ist also durchaus zu verkraften). Um eine Treiberbibliothek zu erstellen, könnte das Kommando so aussehen:
LPUT DRIVER.LBR ZAS4V13.ZAS,LQ101.LST,HPKC11.DRV,IRMBUF.DRV +6
oder:
LPUT DRIVER.LBR *.*
Die zweite Form setzt natürlich voraus, daß sich NUR die gewünschten Treiber in dem Verzeichnis befinden. Vom Ergebnis kann man sich leicht überzeugen, indem man sich das LBR-Directory anzeigen läßt und damit sind wir schon beim zweiten Hilfsprogramm LDIR (eigentlich LD, Version 1.4):
LDIR DRIVER.LBR Library: C5:DRIVER .LBr Created: 01.11.97 16:46 Member Name Size Mth Created Modified ============ ====-======= === ============== ============== DRUCK11 .DRV 27r 3.37k --- 25.01.98 15:32 01.02.98 11:29 FADEN97 .DRV 14r 1.75k --- 19.09.97 22:03 19.09.97 22:03 HPKC11 .DRV 22r 2.75k --- 04.02.98 21:55 07.02.98 14:56 IRMBUF .DRV 5r 0.62k --- 04.02.98 21:56 04.02.98 21:56 LQ100 .LST 2r 0.25k --- 17.10.96 19:52 17.10.96 19:52 ZAS4V13 .ZAS 45r 5.62k --- 26.10.97 9:17 26.10.97 9:17 ============ ====-======= === ============== ============== DRIVER .LBr members: 6 matched, 6 active, 5 free, 0 deleted, 11 total
Wie zu sehen ist, unterstützen die verwendeten Programme das ZSDOS-Datumsformat, so gehen diese Informationen auch in der LBR nicht verloren und man kann jederzeit kontrollieren, ob ein Treiber noch aktuell ist. Übrigens kann man das LBR-Verzeichnis auch mit QL41.COM oder ML.COM anzeigen lassen. Will man die einzelnen Dateien wieder herauslösen, benutzt man LGET (eigentlich LBREXT, Version 3.5) und gibt ein:
LGET DRIVER.LBR A:
und alle enthaltenen Dateien werden einzeln nach Laufwerk A: geschrieben. Auch hier bleiben die Datestamps erhalten - vorausgesetzt man hat Laufwerk A: mit PUTDS.COM dafür vorbereitet.
Damit wäre es an der Zeit, die beschriebenen Programme auszuprobieren. In der mitgelieferten Datei DRIVER.LBR sind ein paar Treiber als Beispiel zusammengestellt - das soll jedoch nur als Anregung dienen. Für die Programmierer habe ich noch den Quelltext der DUDEL-Treiber vorbereitet. Diese Treiber sind zwar nicht sehr sinnvoll, können aber als Vorlage für eigene Entwicklungen benutzt werden. Die dazugehörigen fertigen Treiber gebe ich nicht mit, diese kann sich jeder selbst erzeugen. Dabei soll verdeutlicht werden, daß die Erzeugung von verschieblichen Treibern nicht schwieriger als jedes andere Assemblerprogramm ist. Es reichen zwei Kommandozeilen:
A0>ASM DUDEL=DUDEL (erzeugt DUDEL.REL) A0>LINK131 DUDEL.DRV=DUDEL [OP] (erzeugt DUDEL.DRV)
Die REL-Datei wird wie gewohnt vom Assembler erzeugt. Beim Linken sorgt die Option OP für das richtige PRL-Format, der Dateityp kann sofort mit angegeben werden. Zur Treiberprogrammierung verweise ich auf die KC-News 4/97, ab Seite 20. Wer eigene Treiber fertig hat, kann sich bei mir melden und dafür offizielle ID-Codes beantragen. Damit kann der Treiber dann allgemein zur Verfügung gestellt werden.