1990-Club80-34, S.25-34 ## Club-80 Terminal auf Basis der Hercules-Karte des PC Helmut Bernhardt, Stefan Nitschke 22.05.91 Nun ist es schon wieder 1 Jahr her, daß auf dem Club-Treffen 1990 der Bau einer Terminalkarte, die sich des günstigen Leistungs/PreisVerhältnisses der Herculeskarte für den PC bedient, beschlossen wurde. Nachdem ein erfolgsversprechendes Konzept stand, der Hardware-Koordinator noch schriftlich um Stellungnahme gebeten wurde (die bislang immer noch nicht vorliegt), auf diese Stellungnahme artig ein paar Wochen gewartet wurde, haben wir das damalige Konzept an Jens Neueder abgeschickt. Wahrscheinlich erscheint es zusammen mit diesen Beiträgen irgendwann in den nächsten Jahren mal in einem Info. oben: Layout (von der Bestückungsseite gesehen) unten: Drahtbrücken (von der Lötseite gesehen) Da wir nicht warten wollten, bis eventuell mal ein Info erscheint und dann eventuell doch noch mehr Mitstreiter bei dem Projekt helfen, haben wir schon mal angefangen und eine lauffähige erste Version fertiggestellt. An dem ursprünglichen Hardwarekonzept hat sich inzwischen nichts geändert und auch das, was als Software bislang läuft, entspricht dem TVI950-Standard (mit den paar zusätzlichen und sehr nützlichen Features wie z.B. Program-Download). Da bleibt noch die Einbindung der Tektronix 4014 Grafikbefehle, des Druckertreibers, eines Hardcopy-Befehls und einiger zusätzlicher Befehle (u.a. Snapshot: Abspeichern des Bildschirminhalts auf Disk). Diese recht umfangreichen Aufgaben stehen immer noch an. Zusätzlich haben wir uns überlegt, daß man die 8 Text-Pages der Herculeskarte dazu benutzen kann, um damit Window-Technik zu realisieren. Durch einen Befehl werden dem Terminal die Kordinaten des oberen linken Punktes sowie die Anzahl Zeilen und Spalten im Fenster mitgeteilt. Das Terminal kopiert daraufhin die derzeitige Textseite in die nächste, löscht darin den angegebenen Fensterbereich und positioniert den Cursor in der oberen linken Ecke des neuen Fensters. Der Befehl 'Fensterlöschen' schaltet einfach wieder zurück auf die vorherige Textseite. Nötige Statusinformationen werden in Window Control Blocks für jede Fensterebene geführt, so daß nach dem Entfernen eines Fensters der vorherige Bildschirm mit allen Einstellungen (Attribut, Cursor) wieder restauriert wird. Das ist aber zur Zeit noch im Entstehen. Das Terminal ist ein Z80-Computer mit 32k Arbeitsspeicher und 32K Hercules-Video-RAM. Nach dem Einschalten besteht der Arbeitsspeicher beim Lesen aus EPROM und beim Schreiben aus RAM. Durch ein LDIR wird der EPROM-Inhalt bei der Initialisierung ins RAM kopiert. Danach wird das EPROM abgeschaltet und beim Lesen und Schreiben in den unteren 32K erreicht der Z80 das RAM. Die oberen 32K des Z80 sind dem Video-RAM der Hercules vorbehalten. Hier können die beiden 32K HRG-Pages der Hercules bzw. das Text-/Attribut-Video-RAM eingeblendet werden. Im Textmodus bietet die Hercules-Karte 8 linear hintereinander liegende Seiten mit je 4K Text-/Attribut-Speicher. Innerhalb einer Textseite stehen die gradzahligen Adressen als Textspeicher und die ungradzahligen Adressen als Speicher für die zugehörigen Attribute zur Verfügung. Jeweils zwei Speicheradressen stehen für eine Druckposition auf dem Bildschirm. Die Bits eines Attributbytes haben folgende Funktion: (siehe D5 des Display Mode Control Ports B8h)
D7 = 0 | nicht blinkend bzw. normaler Hintergrund
D7 = 1 | blinkend bzw. halbheller Hintergrund
D6-D4 = 0, D2-D0 = 1 | normale Darstellung
D6-D4 = 1, D2-D0 = 0 | inverse Darstellung
Das gilt aus der Sicht des Z80, der den Speicher der Hercules mit Zeichen und Attributen zu befüllen hat. Der CRTC6845 auf der Hercules hat während der Darstellung eines Zeichens (bzw. der Dotzeile eines Zeichens) gleichzeitig das Zeichen und Attribut auszulesen und während des Shiftens der Bits zum Videosignal die Informationen des Attributs auf das Videosignal wirken zu lassen. Für den 6845 ist eine Textseite in 2K Worten organisiert - das ist bei der Berechnung des Inhalts des Scan-Offset-Registers des 6845 zu berücksichtigen. Im I/O-Adreßraum des Terminal-Z80 sind die Hercules-internen Ports, das Interface zum Host-Computer, ein Latch zur Einstellung der Konfiguration des Terminals und ein Tastatur-Interface unterzubringen; als da wären:
00H | Status-Register des Interface zum Host-Computer
01H | Daten-Register des Interface zum Host-Computer
02H | Konfigurations-Latch
03H | Tastatur-Datenregister
B0H-BFH | interne Ports der Hercules-Karte
B4H | Adreßregister des CRTC-6845
B5H | Datenregister des CRTC-6845
B8H | Display-Mode-Control-Port der Hercules
| D1 = 0 | Text-Video-Mode enabled, HRG disabled
| D1 = 1 | HRG enabled, Text-Video disabled
| D3 = 0 | die Hercules gibt kein Video-Signal an den Monitor
| D3 = 1 | das Video-Signal der Karte gelangt zum Monitor
| D5 = 0 | D7=1 des Attribut-Bytes bedeutet "heller Hintergrund"
| D5 = 1 | D7=1 des Attribut-Bytes bedeutet "Blinken"
| D7 = 0 | HRG: Page 0 selectet
| D7 = 1 | HRG: Page 1 selected
B9H | Display-Status-Kanal (nach mc)
BAH | Display-Statusport (nach Computer 2000)
| D0 = 1 | horizontaler Zeilenrücklauf
| D3 = 1 | Video-Echo, Signal zum Monitor
| D7 = 0 | vertikaler Strahlrücklauf
BBH | Light-Pen Flip Flop zurücksetzen (wird kaum noch in Hardware ermöglicht)
BCH | Drucker-Datenport (Schreiben)
BDH | Drucker Statusport (Lesen)
| D3 = 0 | Error
| D4 = 1 | Selected & Ready
| D6 = 0 | (für 5 Microsecs) /ACK low aktiv
| D7 = 1 | Ready high aktiv
BEH | Drucker-Steuerkanal
| D0 = 0 | /STROBE, mindestens 5 Microsecs
| D1 = 1 | Linefeed
| D2 = 0 | Reset Printer, mindestens 50 Microsecs
| D3 = 1 | Select, Drucker freigeben
| D4 = 1 | IRQ7 (high aktiver Interrupt) freigeben, wenn der Drucker ein Byte übernommen hat
BFH | Konfigurations-Schalter
| D0 = 1 | HRG erlaubt, gilt nur für Page 0
| D1 = 1 | auch HRG-Page 1 erlaubt
Das Konfigurations-Latch (Port 02h) unterstützt bislang die Befehle:
OUT | (02H),0 | Einschalten des Text-/Attribut-Speiches im Texmodus bzw. der HRG-Seite 0 im Grafik-Modus
OUT | (02H),1 | Einschalten der HRG-Seite 1; im Text-Modus ist der Text-Speicher nicht verfügbar
OUT | (02H),2 | im Bereich 0-32K ist bei Leseoperationen das EPROM eingeblendet
OUT | (02H),3 | Sowohl beim Lesen als auch beim Schreiben liegt im Bereich 0-32K RAM vor
OUT | (02H),5 | und danach...
OUT | (02H),4 | Zurücksetzen des Interface der PC-Tastatur
Die Ausgabe der Werte 6-15 kann für weitere Konfigurations-Einstellungen benutzt werden. D0 gibt dabei jeweils den Pegel einer entsprechenden Steuerleitung wieder (Q3-Q7 des 74LS259-Latch) und D1-D3 geben vor, welche Steuerleitung geschaltet werden soll. Auf der Karte ist noch ein Lochrasterfeld frei, in dem entsprechende Hardware-Erweiterungen untergebracht werden können. U. a. erscheint es zweckmäßig zu sein, Rabatz-I/O-Hardware unterzubringen, die über Q3 (mit den Steuercodes 06H/07H) zu löblichem Tun angeregt wird. Zur Vereinfachung der Kommunikation zwischen Host und Terminal wird am Terminal-Z80 ein Interrupt erzeugt, wenn der Host ein neues Datum ausgegeben hat. Diese Technik erfordert in der Software-Entwicklung zwar etwas mehr Sorgfalt, sie ermöglicht aber auch, daß der Z80 des Terminals bei Konjunkturflauten mit anderen sinvollen Aufgaben beschäftigt werden kann und zwischendurch mal eben ein Byte vom Host übernehmen und ins Fernsehen schicken kann. Als Tastatur kann wahlweise eine 8Bit-ASCII-Paralleltastatur oder eine serielle PC-Tastatur verwendet werden. Für den Anschluß einer 8Bit-ASCII-Paralleltastatur besteht ein 74LS244 Lesetreiber. Der /STROBE-Eingang der Tastatur ist direkt an den /NMI-Pin des Z80 angeschlossen. Die Übernahme von Tastaturdaten erfolgt in Echtzeit im Hintergrund. Alle Tastaturdaten werden in einem 32Byte-Ringpuffer zwischengespeichert. Der Ringpuffer wird in der Hauptprogrammschleife ständig überwacht und bei Bedarf werden die Tastatureingaben an den Host entsorgt. Danach ist gewährleistet, daß keine Tastatureingaben verlorengehen, und daß bei der Übertragung sonstiger Daten (z.B. Bildschirmdump) an den Host nicht Tastaturdaten dazwischengeraten. Während solcher Jobs befindet sich der Z80 nicht in der Hauptprogrammschleife. Alternativ kann auch eine PC-Tastatur angeschlossen werden. Diese Teile geben keine ASCII-Daten sondern Scancodes aus. Solch ein Scancode wird gesendet, wenn eine Taste gedrückt und auch wenn eine Taste losgelassen wird. Make- und Break-Codes einer Taste unterscheiden sich dabei nur durch D7 des übertragenen Bytes. Die Codes der PC-Tastatur werden seriell mit TTL-Pegeln übertragen. Zur Synchronisation liefert die Tastatur auch ein CLK-Signal. Auf der Terminal-Karte besteht ein Seriell/Parallel-Wandler, der selbständig die 8Bit der Tastatur sammelt und nach dem achten Bit einen /NMI erzeugt. Der Z80 kann dann über den Port 03H den Scancode der Tastatur als 8Bit-Wort auslesen und durch aufeinanderfolgende Ausgabe der Werte 4 und 5 an Port 02H den Seriell/Parallel-Wandler für die nächste Tastatureingabe zurücksetzen. Die /NMI-Serviceroutine führt Buch über den Zustand der Tasten mit Umschaltfunktionen und erzeugt mit diesen Informationen aus den Scancodes der normalen Tasten ASCII-Codes, die im Ringpuffer abgelegt werden. Wenn eine PC-Tastatur angeschlossen wird, braucht der 74LS244 nicht bestückt zu werden, und wenn eine Paralleltastatur zum Einsatz kommt, ist kein 74LS322 nötig. Durch den Jumper JP2 wird vorgegeben, welcher Baustein aktiv sein soll.
JP2
1-2 gebrückt: Interface für eine PC-Tastatur
2-3 gebrückt: Interface für eine Paralleltastatur

Bei Anschluß der PC-Tastatur muß außerdem JP3 gesteckt werden, damit am Z80 ein /NMI ankommen kann.

Das Terminal ist mit dem Host über eine bidirektionale parallele Schnittstelle verbunden. Für den Z80 des Terminals liegen die Adressen des Ports des Interface fest (00H = Statusregister; 01H = Datenregister) Durch Lesen des Statusregisters kann der Terminal-Z80 feststellen, ob er Daten entgegennehmen kann/muß bzw. ausgeben kann bzw. muß:

D0 = 0 | es kann/muß ein weiteres Byte an den Host ausgegeben werden (der Host hat das letzte Byte abgeholt)
D0 = 1 | es darf noch kein weiteres Byte an den Host ausgegeben werden.
D7 = 0 | es liegt kein neues Byte vom Host vor
D7 = 1 | der Host hat ein neues Byte ausgegeben, das abgeholt werden muß

Die Portadressen, unter denen das Terminal für den Host-Computer erreichbar sein soll, lassen sich über Jumper in Schritten von 4 beliebig einstellen. Die Basisadresse X+0 ist das Statusregister.

D6 des Statusregisters zeigt an, ob das Terminal ein weiteres Byte annehmen kann:

D6 = 1 | das Terminal kann ein weiteres Byte annehmen
D6 = 0 | es darf noch kein weiteres Byte an das Terminal ausgegeben werden

D7 gibt an, ob das Terminal bei der Ausgabe von Daten an den Host ein neues Byte bereitgestellt hat:

D7 = 1 | es steht kein neues Byte des Terminals bereit
D7 = 0 | das Terminal hat ein neues Byte ausgegeben

Je nach Zustand der Bits 6 und 7 des Statusports kann der Host an den Datenport X+1 ein weiteres Byte ausgeben bzw. von dort ein weiteres Byte abholen.

Über das Jumperfeld JP1 wird die Portadresse des Terminals eingestellt. Die Jumper haben folgende Funktion:

1 - 2 | offen: | A7 der Portadresse ist high
| gesteckt: | A7 der Portadresse ist low
3 - 4 | offen: | A6 der Portadresse ist high
| gesteckt: | A6 der Portadresse ist low
5 - 6 | offen: | A5 der Portadresse ist high
| gesteckt: | A5 der Portadresse ist low
7 - 8 | offen: | A4 der Portadresse ist high
| gesteckt: | A4 der Portadresse ist low
11 - 9 | gesteckt, 11 -13 offen | A3 der Portadresse ist high
11 -13 | gesteckt, 11 - 9 offen: | A3 der Portadresse ist low
12 -10 | gesteckt, 12 -14 offen: | A2 der Portadresse ist high
12 -14 | gesteckt, 12 -10 offen: | A2 der Portadresse ist low

A1 wird nicht decodiert; die Ports X+0 und X+1 sind in den Adressen x+2 und X+3 gespiegelt.

Um kompatibel zur GRIP von Conitec zu sein, müssen die Portadressen C0h und C1h decodiert werden, dafür sind folgende Jumper zu setzen: 5-6, 7-8, 11-13, 12-14.

### Der Aufbau der Karte

Bestückungs-Plan

ist wie bei allen Bastlerlösungen etwas komplizierter als bei industriell gefertigten, durchkontaktierten Karten. Wer schon mal eine doppelseitig geätzte Karte selbst durchkontaktieren mußte, weiß ein Lied davon zu singen. Da kann es durchaus einfacher sein, auf einem einseitigen Board die nötigen Querverbindungen in Drahtbrücken anzulegen. Bei dieser Karte ist beides möglich (auch gemischt). Entweder verwendet man die Leiterbahnen auf der Bestückungsseite direkt und legt die nötigen Durchkontaktierungen an, oder man benutzt sie nur als Hinweise dafür, wo Drahtbrücken gezogen werden müssen. Das Layout der Bestückungsseite weist keine sich überkreuzenden Drahtbrücken auf (was im Layout auch schlecht ohne Kurzschlüsse möglich ist); wo die Leiterbahnen nicht zu eng beieinander liegen, kann auch unisoloierter Draht verwendet werden. Bei den etwas dicker geätzten Leiterbahnen sollte als Brücke Klingeldraht und bei den dünnen Leiterbahnen dünner Kupferlackdraht verwendet werden (wenn man lieber Drahtbrücken legen möchte).

Erweiterung des ECB-Interface des Hercules-Terminals auf 4 Portadressen für die gesonderte Druckerausgabe

Für die gleichzeitige Ausgabe von Daten für die Console und den Drucker über das gleiche Interface ohne besondere Unterscheidungsmöglichkeiten des Terminals anhand irgendwelcher Statusbits lassen sich grundsätzlich Probleme erwarten.

Es wäre möglich (wie bei der GRIP) durch ein gesetztes D7 im Datum dem Terminal zu signalisieren, daß dieses Byte für den Drucker gedacht ist. Damit ist aber die Möglichkeit verbaut, einen Drucker mit IBM-Zeichen- satz 2 voll zu nutzen.

Hier soll aus der Not eine Tugend gemacht werden und die unvollständige Decodierung des ECB-Interface auf 4 Portadressen für unterschiedliche Ausgabeports für Console und Drucker genutzt werden. Die Ausgabe an die Console erfolgt nach wie vor über die Adressen

Basis + 0: Consolen-Status (Lesen)
Basis + 1: Console Daten (Lesen und Schreiben)

und der Drucker ist über die Adressen

Basis + 2: Drucker-Status D7=0: Ready (Lesen)
Basis + 3: Drucker Daten (Schreiben)

erreichbar. Physikalisch bleiben die Latches für Consolen- und Drucker-Datenport identisch. Das Terminal kann nur anhand von D6 im Statusport des Interface erkennen, ob das Datum an die Console oder an den Drucker ausgegeben wurde.

D6 in Port 00h ist 0: Datum geht an die Console
D6 in Port 00h ist 1: Datum geht an den Drucker

Dafür muß der Pegel von A1 des ECB-Bus bei der Ausgabe des Host an das Terminal in einem Flip Flop gespeichert werden und der Z80 des Terminals muß diesen Wert über einen Treiber auslesen können.

Interface zum ECB-Bus und zur Hercules-Karte
oben: Takterzeugung; rechts: Tastatur-Interface

ist auf IC3, 74LS74 ein weiteres 74LS74 mit den Pins 7 und 14 huckepacks aufzulöten und auf IC4 ist ein weiteres 74LS125 mit den Pins 7(GND), 10(/IN0) und 14(+5V) huckepacks aufzulöten.

Die Pins 9 dieser beiden aufgelöteten ICs sind miteinander zu verbinden.

An Pin 12 des 74LS74 wird A1 des ECB-Bus (Pin 7c) gelegt.
Pin 11 des 74LS74 wird mit Pin 10 von IC11, 74LS138 (/WRDATA) verbunden.
Pin 8 des 74LS125 wird mit Pin 4 von IC2, 74LS374 verbunden (D6).

In Software

ist in das Betriebsprogramm des Terminals in der Interrupt-Service-Routine bei Ausgaben vom Host nach der Ermittlung des Status des ECB-Interface anhand des Pegels von D6 in Port 00h festzustellen, ob das Byte in Port 01h an die Console (D6=0) oder an den Drucker (D6=1) ausgegeben werden soll.

Die Befehle des Terminals Grip 5.x

Um irgendwo anzufangen, habe ich mir die Leistungen der GRIP 5.X von Conitec als Vorlage für das Hercules-Terminal herangezogen. Dort wer- den ebenfalls ein TVI 950 Textterminal und ein Tektronix 4014 Grafik- terminal unterstützt, eine Tastatur und ein Drucker angeschlossen und ähnliche Zusatzleistungen bereitgestellt.

Die mit dem Hercules-Terminal möglichen Befehle der GRIP seien im Folgenden mit knapper Beschreibung zusammengestellt. Alle Features der GRIP, die sich bei derselben als unschön erwiesen haben, sind hier garnicht erst aufgeführt.

    ESC ESC  'A'	1BH 1BH 41H	TVI 950 Textmodus einschalten
    				(Einstellung nach RESET)
    TVI 950 Steuercodes:
    ^H	08H	Cursor nach links
    ^I	09H	Cursor nach rechts (mit Scroll)
    ^K	0BH	Cursor eine Zeile hoch
    ^V	16H	Cursor eine Zeile runter (mit Scroll)
    ^J	0AH	Line Feed (wie ^V)
    ^M	0DH	Carriage Return, Cursor an den Zeilenanfang
    ^_	0FH	Neue Zeile (= Carriage Return + Line Feed)
    ^^	1EH	Cursor Home (Zeile 0, Spalte 0)  ohne ClrScr
    ^Z	1AH	Bildschirm löschen
    ^L	0CH	Form Feed (:= Clear Screen + Cursor Home)
    ^G      07H	Rabatz auslösen (muß außerhalb des Terminals
    		erzeugt wedden)

    TVI 950 Escape-Sequenzen:
    ESC '+'		Form Feed (wie ^L)
    ESC ';'		Form Feed (wie ^L)
    ESC '.' a	Cursor Attribut setzen
    	a = '0'	unsichtbarer Cursor
                '1'	Blinkender Block  (nach Reset)
    	    '2' stehender Block
    	    '3' blinkender Unterstrich
    	    '4' stehender Unterstrich
    	    '5' '6' '7' diverse User Cursor
    ESC '=' y x	Cursorposition setzen
    ESC '?'		Corsorposition abfragen
    		Antwort:  y  x
    	y	Zeilennummer + 20H
    	x	Spaltennummer + 20H
    		bei Antwort auf die Abfrage ist in (y, x, cr)
    		das Bit 7 gesetzt
    ESC '1'		Bildschirm um 1 Zeile hochscrollen
    ESC '2'		Bildschirm um 1 Spalte nach rechts scrollen
    ESC '3'		Bildschirm um 1 Zeile runterscrollen
    ESC '4'		Bildschirm um 1 Spalte nach links scrollen
    	der Cursor bewegt sich mit dem Text bis zum Rand
    ESC 'E'		Leerzeile an der Cursorposition einfügen
    ESC 'R'		Zeile an Cursorposition löschen
    	die nachfolgenden Zeilen werden entsprechend bewegt
    ESC 'T'		Zeile ab Cursor bis Ende löschen
    ESC 'Y'		Zeile ab Cursor bis Ende löschen
    ESC 'G' x	Zeichenattribute setzen
    	x: D0=1: Zeichen unsichtbar		möglich
    	   D1=1: Zeichen durchgestrichen	nicht möglich
    	   D2=1: Zeichen invers dargestellt	möglich
    	   D3=1: Zeichen unterstichen		nicht möglich
    	   D4,D5 = 0,0: Subscript		nicht möglich
    		   0,1: Indexschrift		nicht möglich
    		   1,0: Superscript		nicht möglich
    		   1,1: normale Schrift default	möglich
    	D6=1:   Breitschrift			nicht möglich
    	D7      ist immer low auszugeben
    ESC ')'		Invertieren einschalten
    ESC '('		Invertieren ausschalten
    ESC 'n'		Bildschirm eingeschaltet
    ESC 'o'		Bildschirm dunkel
    ESC '$'		Strichgraphik ein	Multiplan-kompatibel
    ESC '%'		Strichgraphik aus	Zeichen anstelle der
    					Großbuchstaben

    ESC ESC 'T'	Tektronix-Grundmodus einschalten

    Tektronix-Control-Codes

    ^M	0DH	Alphamodus ein, Cursor an den Anfang der Zeile,
    		Zeile der letzten Grafikposition setzen
    ^_	1FH	Alphamodus ein, Inkrementalmodus aus Curdor auf
    		die letzten Grafik-Koordinaten setzen
    ^Ö	1CH	Punktmodus aus
    ^U	1DH	Vektormodus ein; der erste Vektor wird
    		nicht gezeichnet, die Koordinaten werden
    		als neuer Anfangspunkt übernommen
    ^G	07H	Sonderfunktion (nach ^U): der Vektor wird
    		doch gezeichnet
    ^^	1EH	Inkrementalmodus ein
    ^Q	11H	lösche mit Schwarz (Hintergrundfarbe)
    ^R	12H	zeichne invers (Vordergrund schwarz<=>weiß)
    ^S	13H	zeichne mit weiß(=> Vordergrundfarbe)
    		die letzten drei Steuercodes sind nicht Bestandteil
    		des Tektronix-Befehlssatzes sondern Erweiterungen
    		der GRIP

    Tektronix-ESC-Sequenzen

    ESC '^L'	Clear Screen, Alphamodus ein, Cursor
    ESC '1' 	Bildschirm um 1 Zeile hochscrollen
    E5c '2'		Bildschirm um 1 Spalte nach rechts scrollen
    ESC '3'		Bildschirm um 1 Zeile runterscrollen
    ESC '4'		Bildschirm um 1 Spalte nach links scrollen
    	die letzte Grafik-Koordinate scrollt mit, die Posi-
    	tion relativ zum Nullpunkt ändert sich also
    ESC 'G' X	Zeichenattribute für Alpamodus setzen
    		Attribute sind die gleichen wie bei TVI 950
    ESC '~'		Vektortyp := durchgehende Linie (default)
    ESC 'a'		Vektortyp := gepunktete Linie
    ESC 'b'		Vektortyp := Strichpunk Linie
    ESC 'c'		Vektortyp := kurz gestichelte Linie
    ESC 'd'		Vektortyp := lang gestichelte Linie
    ESC 'F'		Fülle Fläche, in der der Grafik-Cursor steht
    		mit Muster des Zeichens 7FH

    Der Vektormodus (mit ^U einschalten)

    Bei der Hercules beträgt die Grafikauflösung 720 (x) * 348 (y) Punkte.
    Der Ursprung (0,0) liegt unten links. Eine Koordinate wird durch 2
    10Bit-Werte angegeben, die als 4 Bytes mit 5 signifikanten Bits
    (D4-D0) an das Terminal übertragen werden. Welche Funktion das jeweil-
    ige Byte hat, wird durch D5-D7 codiert:

    	0,0,1	obere 3 Bit der Y-Koordinate
    	0,1,1	untere 3 Bit der Y-Koordinate
    	0,0,1	obere 3 Bit der X-Koordinate
    	0,1,0	untere 3 Bit der X-Koordinate

    Die Übertragung erfolgt in der Reihenfolge: Yhigh, Ylow, Xhigh, Xlow
    Folgende Formate zur Datenübergabe sind erlaubt:
    	Yhigh,Xlow		für die nicht übergebene Anteile
    	Yhigh,Xhigh,Xlow	der Koordinaten werden die zuletzt
    	Ylow,Xlow		übergebenen Werte wieder verwandt
    	Xlow

    Mit dem Empfang des Xlow-Bytes ist die Übertragung eines Koordinaten-
    Wertepaares abgeschlossen, das Terminal zeichnet dann einen Vektor
    vom letzten Koordinatenpunkt zum neu angegebenen Punkt.

    Der Inkrementalmodus

    zeichnet von der letzten Grafik-Koordinate in 1-Punkt-Schritten
    weiter, die Werte (X,Y) des Grafik-Cursors laufen mit. Die Richtung
    wird durch die folgenden Zeichen vorgegeben:

    	F    D    E		'F' nach oben links
    				'D' nach oben
    	B    *    A		'E' nach oben rechts
    				'B' nach links
    	J    H    I		'A' nach rechts   u.s.w.

    Durch 'P' 'Q' 'R' 'T' werden die Zeichenmodi eingestellt. Ein
    Modus ist so lange wirksam, bis ein neuer eingeschaltet wird. Nach
    dem Einschalten des Inkrementalmodus muß einer dieser Befehle folgen:

    ' '	Punkte nicht zeichnen, nur Grafik-Cursor bewegen
    'P'	Punkte zeichnen (weiß, wie ^S)
    'Q'	Punkte löschen (schwarz, wie ^Q)
    'R'	Punkte invertieren (wie ^R)