*************************************************************
* *
* Druckertreiber für S 3004 am Z 1013 *
* *
*************************************************************
1. Ziel
Ausgehend vom Druckertreiber für die S 3004 von Herrn Bernd
Michael, Tannenberg, wurden alle Zeichen des ASCII-Zeichensat-
zes außer Linksschrägstrich (jetzt ß) implementiert, darunter
neu: []{}~ , wobei diese Zeichen wie ursprünglich als Umlaute
verwendet werden können. Zusätzlich sind Unterstreichung,
Halbfett- und Fettdruck möglich; NUL und ETX werden als
Stopsignal interpretiert.
Darauf aufbauend arbeiten die Testprogramme DIRekt, EINgabe und
A-Zdruck, die Programme zum direkten Ausdruck eines RAM-Berei-
ches, zum Druck eines RAM-Bereiches während laufender Terminal-
arbeit und zum Umlenken der Druckdaten von ZEIDR (s. Sprungver-
teiler) in ein logisches File.
2. Anschlußbedingungen
Die S 3004 wird ohne Interfacebox mit minimal 3 Leitungen (Masse
- a13, Empfangsdaten - a11, Acknowledge - a12) des Interface-
steckverbinders an den Rechner angeschlossen. An einem wählba-
ren PIO-Port des Z 1013 werden damit Masse, Portleitung 0 und
eine wählbare Portleitung (in dieser Reihenfolge) verbunden.
In Adr. 0E419H wird das Bit für die Acknowledge-Ltg. gesetzt
(nicht Bit 0!), in Adr. 0E418H die Portadresse eingetragen
(jetzt PIO-Port A der Grundplatine = 00). Es ist günstig,
eine galvanische Trennung zwischen Rechner und S 3004 durchzu-
führen, zumindest beim Ein- und Ausschalten, da trotz TTL-
Pegel Spitzenspannungen auftreten können (geschirmte Ltg.!).
3. Funktionen der Ausgaberoutine
Folgende Zeichen werden gesondert interpretiert:
00 Führt zu Druckstop und Piepton der Maschine, bis ^B (STX -
02H - weiterdrucken) eingegeben wird. Jede andere Taste
führt zu Zeilenvorschub. Es werden alle Sonderfunktionen
außer 06H zurückgesetzt.
01 Schaltet Unterstreichung ein oder aus; keine Druckausgabe
03 Außer Abbruch für MUL keine Reaktion.
04 Schaltet Halbfettdruck ein oder aus; " "
05 Schaltet Fettdruck ein oder aus; " "
06 Schaltet alle Sonderfunktionen außer sich selbst aus, d. h.
dann wirken [|] als ÄÖÜ, {ß} als äöü, ~ als ß, < und >
fehlen, können aber durch ),08,- und (,08,- nachgebildet wer-
den, ^ wird auf der Stelle gedruckt (Leerzeichen einfügen).
07 Beep über Maschine
0E ^ auf der Stelle
0F SPC auf der Stelle (vor aou wird zu äöü)
3C kleiner als
3E größer als
5B [ oder Ä
5C ß oder Ö
5D ] oder Ü
7B { oder ä
7C | oder ö
7D } oder ü
7E ~ oder ß
4. Sprungverteiler und RAM-Zellen
Ab E400 befindet sich ein Sprungverteiler in folgender Form:
00 JMP MUL Aadr Eadr Zuweisung eines Druckfiles
03 JMP LOG Aadr Eadr Zuweisung eines logischen Files für ZEI
06 JMP PRT Aadr Eadr Druck eines RAM-Bereiches
(Vorsicht Ignoriert MUL-Aktivität !)
09 JMP END Abbruch für MUL
0C JMP ZEI Druck eines Zeichens im Akku
0F JMP AZZ Druck aller ASCII-Zeichen von 20H bis 7FH
12 JMP EIN Eingabe HEX-Zahl (ASCII-Code); Ende mit Zahl > 0FFH,
das letzte Zeichen wird noch ausgegeben.
15 JMP DIR Direkte Ausgabe aller Zeichen von 00H bis 68H
18 PIO Datenadresse für PIO-Port, danach E/A-Maske für
Portleitung
An das Ende des Programm schließen sich folgende RAM-Zellen an:
REM Zustandszeiger: Bit 0 Unterstreichung
1 Halbfettdruck
2 Fettdruck
3 Rückdruck
4 Druckstop bei MUL
5 Logicfile kann beschrieben
werden
6 nächstes Zeichen ESCAPE
7 Sonderfunktionen ignorieren
LAA Anfangsadresse Logicfile
LZA Zwischenadresse Logicfile
LEA Endadresse Logicfile
BSS Adresse für das Einklinken in das Betriebssystem
JMP RUE Sprung zu dem durch BSS adressierten UP des Betriebs-
AAD Anfangsadresse Druckfile für MUL und PRT
EAD Endadresse Druckfile für MUL und PRT
Bemerkung: Der Sprungverteiler sollte in Lage und Form nicht
verändert werden,da MUL und LOG darin Änderungen
vornehmen.
5. Tabellen
Adr Inhalt
E44B Umcodiertabelle in Reihenfolge der ASCII-Zeichen; manche
Programme erfordern es, in Adr. E458H statt 77H (CRLF)
78H (CR) einzusetzen.
E4CB Umcodiertabelle für ESC-Funktion
E500 Vergleichstabelle für Sonderfunktionen
E510 Adreßtabelle
6. Programme
Das System ist down up aufgebaut, d.h. "höhere" Programme
rufen nur unterhalb stehende Unterprogramme auf. Es besteht in
dieser Reihenfolge aus:
- Sprungverteiler
AUS - UP Ausgabe (direkte Ausgabe auf Drucker)
- Tabellen
ZEI - UP Zeichenausgabe (Übergabe in Akku)
DIR - Direktausgabe aller Zeichen auf Drucker
EIN - Eingabe HEX-Zahl (ASCII) und Druck
RAM - UP Ausgabe eines Zeichens entspr. AAD und incrementieren;
wenn AAD > EAD --) Rückkehr mit CY = 0
PRT - Ubergabe des zu druckenden RAM-Bereichs in ARG2 und ARG3,
keine Adreßkontrolle bezüglich MUL und LOG;
MUP - UP druckt Zeichen entsprechen AAD, wenn AAD < EAD (s. RAM)
und ACKN = L; wenn AAD > EAD wird die Adresse RUE nach
(BSS) zurückgeschrieben und kann damit nicht mehr aufge-
rufen werden.
MUL - Wenn LOG aktiviert ist, wird vor Start dieses Programmes
eine Kontrolle durchgeführt, daß sich die angegebenen
Adressen nicht mit denen des Logicfile überschneiden.
Zweck von MUL ist es, während des Druckens eines Files in
einem beliebigen System, z.B. Microword, OCE etc., weiter-
arbeiten zu können, also quasi Multitaskbetrieb.
Dazu versucht MUL, in der Eingaberoutine des Monitors ab
F130H einen UP-Aufruf zu finden; ist das erfolgreich, wird
getestet, ob sich dort die Adresse von MUP einschreiben
läßt, was natürlich nur geht, wenn der Monitor in den
RAM umgeladen wurde (am Ende der Beschreibung ist ein
kleines Programm dafür aufgeführt).
Steht der Monitor im ROM bzw. ist kein Einschreiben
möglich, wird dafür der RST 20 genutzt.
Das funktioniert aber nur bei Programmen gut, die mit INKEY
(RST 20, DB 4) direkt arbeiten, wie z.B. OCE, während bei
Programmen, die mit INCH (RST 20, DB 1) arbeiten, nur pro
Tastendruck ein Zeichen gedruckt wird, wie z.B. bei
MicroWORD. In diesem Fall kann in dessen Sprungverteiler
ein UP eingetragen werden, welches INCH nachbildet
(Beispielprogramm am Ende).
LUP - Beschreibt, anstelle ein Zeichen über ZEI zu drucken,
ein logisches File entsprechend LZA und LEA; wenn LZA >
LEA oder wenn bei 0DH oder 1EH weniger als 50H Speicherzellen
zur Verfügung stehen erfolgt eine Ausschrift auf den
Bildschirm (diese Ausschriften gelangen nicht in das log.
File) mit den Optionen:
1 Ignorieren - File wird von vorn beschrieben,
ohne es zu retten
2 File wird gerettet und anschliessend von vorn
beschrieben
3 File wird gerettet, anschliessend wird der Direktaus-
gabezustand für ZEI wiederhergestellt.
LOG - Zweck dieses Programmes ist es, Druckdaten erstmal in ein
File zu speichern (um es evtl. noch zu bearbeiten),
während möglicherweise etwas anderes, wichtigeres
mit MUL gedruckt wird. Anstelle von ZEI wird im Sprungver-
teiler LUP eingetragen,was für das aufrufende Programm
keinerlei Änderung bringt. Die angegebenen Adressen für
das logische File werden hinsichtlich ihrer Überschneidung
mit MUL getestet und dürfen nicht über E000H hinausgehen.
Wenn beim Start von LOG bereits ein log. File existiert,
wird abgefragt, ob es allgemein geschlossen und ob es
gelöscht oder der bisherige Inhalt gerettet werden soll.
Adressenangabe für MUL und LOG:
Entweder mit J .... Aadr Eadr oder bei Aufruf als UP (nur bei
LOG: dazu kann das UP verwendet werden, was eigentlich bei LOG-
Start aufgerufen wird) Übergabe in ARG2 und ARG3. Ist eine
dieser Adressen kleiner als 100H, werden die bisher aktuellen
Adressen beibehalten. Wenn die Anfangsadresse kleiner als die
Endadresse ist, dann Ende.
Bei MUL führt z.B. die Eingabe J E400 0200 0100 zum Stop des
laufenden Druckes. Mit J END kann MUL abgebrochen werden, die
aktuellen Addressen für MUL bzw. PRT bleiben erhalten (Weiter-
drucken ohne Adreßangabe).
Monitorumladeprogramm:
UML: LD HL,F000H
LD BC,1000H
UM1: OUT ROM ; I/O Adresse für Umschalten auf ROM ab F000H
LD A,(HL)
OUT RAM ; I/O Adresse für Umschalten auf 64k RAM
LD (HL),A
INC HL
DEC BC
LD A,B
OR C
JRNZ UM1
JMP F000H
Nachbildung INCH
INCH: RST 20H
DB 04H ; INKEY
LD A,(04H) ; Letztes Zeichen
OR A
JRZ INCH
RET
Bei Verbesserungswünschen, Auftreten von Fehlern,
Implementierungswünschen auf andere Adressen o. ä. bitte ich,
direkt an mich zu schreiben.
Leipzig, 28. Febr. 1989 Falko Trojahn