1987-BHV-03 s.13-18 / 1987-Club80-08 Nr.20 S.65-70 ## Auslesen des Graphikspeiches ### GDP64-Karte des NDR-Klein-Computers im TRS80 und GENIE Helmut Bernhardt, Jörg Seelmann-Eggebert Zwischen der in den Computern TRS80 und GENIE wohl am weitesten verbreiteten HRG 1B und der GDP64 des NDR-Klein-Computers bestehen folgende gravierenden Unterschiede:
Feature | HRG 1B | GDP64
Bildformat | 192x384 | 256x512
Mischbareit des Video- signals mit dem des Text- Bildschirms | ja | nein
Geschwindigkeit der Gra- phikausgabe | langsam | sehr schnell
Auslesbarkeit des Graphik- speichers | ja | nein
Anzahl Bildschirmseiten | 1 | 4
Programmierbarkeit | umständlich | komfortabel
Anschluß an den Computer | beide frei verdrahtet
BASIC-Treiber vorhanden | ja | ja
Verschleiß an Portadressen | 128 | 32
Die wesentlichsten Nachteile der GDP64 bestehen in der nicht vorhandenen Auslesbareit des Grafik-Speichers, wodurch ein Abspeichern von Bildern auf Diskette ein Ausdrucken der Graphik ein Spiegeln und Invertieren des Bildes und die Implementation eines Graphik-Cursors nicht möglich sind. Die nicht vorhandene Mischbarkeit des Videsignals mit dem des normalen Textbildschirms kann dadurch umgangen werden, daß entweder ein zweiter Monitor benutzt wird oder eine einfache softgesteuerte (und/oder handgesteuerte) Umschaltung des Videosignals für den Monitor dazugestrickt wird. Ein möglicher Schaltungsvorschlag wird zum Schluß noch vorgestellt. Zunächst aber soll das Hauptproblem, das Auslesen des Graphikspeichers gelöst werden. Dazu sei vorweg bemerkt, daß wegen des kritischen Timings des EF9396-Graphikprozessors nicht garantiert werden kann, daß jeder Chip dabei funktioniert. Mit einem Pulldown-Widerstand kann der abfallenden Flanke des entsprechenden Signals zwar etwas Dampf gemacht werden, ob das bei dem jeweiligen Exemplar des 9366 dann ausreicht, muß probiert werden. Durch Verringern des Widerstandswertes läßt sich wahrscheinlich auch noch was rausholen. Für das Auslesen des Graphik-Speichers der GDP64 benötigt man 2 zusätzliche ICs und einen 2k2-Widerstand. Hauptbetandteil ist ein 74LS374-Latch, in das der EF9366 den Inhalt der ihm benannten 8 Bits des Bildwiederholspeichers einträgt und aus dem sich die CPU dieses Datum abholen kann. Außerdem sind noch zwei OR-Gatter zur Ansteuerung des Latch nötig. ### Und was muß gemacht werden? Nicht viel. Bei dem zusätzlichen 74L374 werden außer den Pins 10 und 20 alle Pins um 45 Grad hochgebogen. Dann wird IC 20,74LS245 der GDP64-Karte aus der Fassung gezogen und das 74LS374 mit den Pins 10 und 20 auf den 74LS245 an dessen Pins 10 und 20 angelötet. Dann wird IC 19, 74LS273 aus der Fassung genommen und auf dem Tisch so neben den eben gebauten Doppeldecker gelegt, wie die ICs 19 und 20 nebeneinander auf der Karte gesteckt haben. Mit möglichst kurzen isolierten Drahtstücken werden dann alle in der folgenden Tabelle aufgeführten Verbindungen zwischen Huckepack-LS374 und 74LS273 hergestellt. Beim 74LS273 sollten die Drahtenden möglichst weit oben am Pin angelötet werden, damit die Pins nachher auch wieder in die Fassung passen. Danach kann das Verbundsystem wieder in die Fassungen gesteckt werden. Nun werden die Verbindungen des Doppeldecker-74L374 mit den Pins des 74LS166 entsprechend der rechten Hälfte der Tabelle hergestellt, wobei dann der 74LS166 aus der Fassung zu ziehen und locker auf diese zu stellen ist (damit sich die Drahtlängen richtig bemessen lassen und andererseits beim Anlöten keine dauerhafte Verbindung zwischen IC und Fassung hergestellt wird; das entspräche dann auch nicht mehr dem Sinn einer Fassung). Verbindungen zwischen dem Huckepack-LS374 und IC 19 sowie IC 4 Signal IC19, Huckepack IC4, LS273 LS374 LS166 Pin Pin Pin Pin
D1 | 3 ------------- 2 | 3 -------------- 3
D3 | 4 ------------- 5 | 4 -------------- 5
D5 | 7 ------------- 6 | 7 ------------ 11
D7 | 8 ------------- 9 | 8 ------------ 14
D6 | 13 ----------- 12 | 13 ------------ 12
D4 | 14 ----------- 15 | 14 ------------ 10
D2 | 17 ----------- 16 | 17 -------------- 4
D0 | 18 ----------- 19 | 18 -------------- 2
Nun wird ein zusätzliches 74LS32 genommen und dessen Pins 1-4, 6 und 8-13 ebenfalls um 45 Grad hochgebogen. Mit den Pins 5, 7 und 1 wird es auf dem aus der Fassung genommenen IC8, 74LS32 an dessen Pins 5, 7 und 14 angelötet. Nun kann auch dieser Doppeldecker wieder in seine Fassung gesteckt werden. Eventuell müssen die abgespreitzten Pins der beiden Huckepack-ICs noch etwas zurechtgebogen werden, damit sie sich nicht gegenseitig berühren und auch keinen Kontakt mit ihren Träger-ICs haben. Dann werden folgende Verbindungen hergestellt: Huckepack-LS32 Verbinden mit
Pin 1 | IC2, 74LS00, Pin1
Pin 2 | IC2, 74LS00, Pin8
Pin 3 | Huckepack-LS374, Pin11
Pin 4 | IC20, 74LS245, Pin1
Pin 6 | Huckepack-LS374, Pin1
Und schließlich werden noch die Pins 1 und 7 des IC2 74LS00 über einen 2k2-Widerstand verbunden (Pulldown des MFREE-Signals des EF9366). Damit ist alles getan, um die dem EF9366 vorgegebene Speicherstelle auslesen zu können. Wenn danach das Auslesen des HRG-Speichers nicht funktioniert, ist das nicht verwunderlich, weil man zunächst etwas falsch gemacht hat; zumindest ich (Helmut) bin das so gewohnt. Dieser Fehler kann aber durch Vergleich des Strippengewirrs mit der Einbauanleitung schnell gefunden werden. Möglicherweise treten dann beim Auslesen immer noch Fehler auf. Die Ursache liegt dann beim oben beschriebenen Timing des EF9366 mit seinem MFREE-Signal. Man kann dann noch mit einem kleineren Widerstand als 2k2 Versuche machen oder eventuell einen anderen EF9366 ausprobieren. Letztere Variante kann natürlich recht kostspielig werden, bis man ein funktionierndes Exemplar gefunden hat. Alternativ kann man sich damit abfinden, daß es nicht funktioniert und alle Umbauten wieder abreißen (weniger erstrebenswert). ### Und was bringt die GDP64 gegenüber der HRG 1B mehr? An Software-Unterstützung gibt es dank der Bemühungen von Christof Ueberschaar ein 4K-Byte großes BASIC-Treiberprogramm, das ins HIMEM geladen wird und nach Einbinden in das Disk-BASIC sehr komfortable Graphik-Befehle bereitstellt. Gegenüber der Variante des Treibers für die HRG 1B wo die Graphik-Befehle durch ein # eingeleitet werden und daher der BASIC-Interpreter bei jedem Befehl erst prüfen muß, ob ein # vorliegt, ist hier der CMD-Vektor verbogen worden. Es wird dann nur noch bei Auftauchen des CMD-Tokens im Programmtext eine zusätzliche Abfrage gemacht, ob das nach CMD obligatatorische (") folgt und nur dann, wenn das nicht der Fall ist, weiter untersucht, ob das Byte ein gültiger Graphik-Befehl ist, der dann abgearbeitet wird. Diese Philosophie hat zwar den Nachteil, daß man anstelle des einfachen # jedesmal 3 Zeichen eintippen muß, bevor der eigentliche Graphik-Befehl kommt, andererseits wird dadurch nicht die Abarbeitung der normalen BASIC- Befehle verlangsamt womit ein Teil des Geschwindigeitsvorteils der GDP64 verschenkt wäre. Außerdem ist die Punktadressierung der GDP64 bedeutend einfacher als die der HRG 1B. Es werden dem EF9366 einfach die X- und Y-Koordinaten des Punktes als 16-Bit-Wörter in entsprechende Register geschrieben und dann einer der Befehle "Punkt setzen", "Punkt löschen" oder "Punkt abfragen" ausgeführt. Bei der HRG 1B bedeutet das ein umständliches Berechnen der Speicheradresse und der entsprechenden Bits im Byte. Noch gravierender ist die Eleganz beim Zeichnen von Linien über Vektorbefehle. Hier werden die Punktkoordinaten (X1/Y1) für den Ausgangspunkt einer Linie in die entsprechenden Register eingetragen und in zwei weitere Register werden die Werte Delta X und Delta Y eigetragen. Es sind dies die Differenzen X2-X1 und Y2-Y1 (Koordinaten von Anfangs- und Endpunkt einer Linie). Diese Differenzen müssen stets positive Zahlen sein. Das Vorzeichen (Vektorrichtung) wird durch entsprechende Bits in den Vektorbefehlen vorgegeben. Es läßt sich auch noch festlegen, ob die Linie durchgezogen, gepunktet oder punktstrichliert ausgegeben werden soll oder ob die Linie überhaupt gezeichnet werden soll oder eine vorher hier gezeichnete Linie wieder gelöscht werden soll. Wenn die Line dann mit einer Geschwindigkeit von 1,5 Mio Punkten pro Sekunde gezeichnet ist, stehen automatisch in den X- und Y-Koordinatenregistern die Koordinaten X2 und Y2 der eben gezeichneten Linie, so daß von deren Endpunkt durch Vorgabe neuer Werte für Delta X und Delta Y gleich ein weiterer Vektor gezeichnet werden kann, ohne daß die Endpunktskoordinaten der vorherigen Linie noch als Anfangskoordinaten der neuen Linie ausgegeben werden müssen. Dann hat der EF9366 noch einen eingebauten Zeichengenerator (der aber leider nur die amerikanischen Zeichen kennt:), mit dem ein komfortables Einbinden von Texten in die Graphik möglich ist. Außer Aufrecht- und Schrägschrift sowie in Breite und Höhe voneinander unabhängig in 16 Stufen in der Größe variierbaren Zeichen läßt sich vorgeben, ob normal von links nach rechts, auf dem Kopf stehend von rechts nach links oder um 90 Grad gedreht von unten nach oben oder von oben nach unten geschrieben werden soll. Für die Textausgabe ist vor der Ausgabe der Textzeichen neben dem Festlegen dieser Modi auch noch der Fußpunkt des ersten Zeichens in die Koordinatenregister einzutragen. Nach der Ausgabe eines Zeichens erhöht sich der Pointer auf den Fußpunkt des dahinter auszugebenden Zeichens, wobei die oben beschriebenen Modi natürlich berücksichtigt werden. Diese Bemerkungen sollen keinesfalls als erschöpfende Beschreibung der Leistung der GDP64 zu werten sein. Für die Programmierung des EF9366 kommt man ohne Datenblatt nicht aus. Es sollte hier nur ein ungefährer Eindruck vermittelt werden, wofür der Aufwand überhaupt getrieben wurde, bei der unsicheren Erfolgsaussicht, den Hardware-Patch überhaupt anzufangen. ### Das Umschalten der Video-Signale Da die Video-Signale des Text/Bauklötzchen-Graphik-Interface des Computers und der GDP64-Karte nicht direkt miteinander mischbar sind, muß mit einer Umschaltung zwischen den Signalen gearbeitet werden. Für Experimentierzecke reicht dazu ein einfacher Umschalter, mit dem abwechselnd eines der beiden Video-Signale durchgeschaltet werden kann. Die Bezugsmassen der beiden Signale sind miteinander und mit der Abschirmung des Kabels zum Monitor zu verbinden. Als Dauerlösung ist aber eine Softumschaltung wesentlich eleganter. Dafür kann das Bit 0 des unter Port 60H decodierten Latch (IC19, LS273) mit dem auch die HRG-Speicherbanks angewählt werden, mißbraucht werden. Es ist dann noch ein Inverter nötig, den IC9, 7404, Pins 13 und 12 liefert. Dabei ist zu beachten, daß mit einem OUT-Befehl an Port 60H dann sowohl die für Auslesen und Schreiben einzustellenden Banks als auch die Selektion des Video-Signals gesteuert werden. Da dieses Latch sich nicht auslesen läßt, muß über dessen Inhalt im RAM Buch geführt werden, damit beim Ändern der Bankanwahl nicht das Video-Signal umgeschaltet wird und umgekehrt. Außerdem sollte der Pin 1 des IC 19, 74LS273 nicht mit +5V sondern mit RESET* oder einem aus RESET* und NMI* erzeugten SYSRES* verbunden werden, damit durch Löschen des Latch beim Einschalten bzw. Drücken des RESET-Knopfes, wodurch ein NMI* erzeugt wird) ein definierter Zustand vorliegt. In Abb. 2 ist oben eine prinzipielle Schaltung zur Umschaltung der Video-Sinale (Video1 und Video2) gezeigt, deren Steuersignale A und B entgegengesetzte logische Pegel haben müssen. Wenn anstelle von -12V nur -5V zur Verfügung stehen, kann auch -5V verwendet werden, wenn anstelle der beiden 1k8-Widerstände solche von 7k5 genommen werden. Unten in Abb.2 sind zwei Möglichkeiten für die Beschaltung der Steuereingänge A und B gezeigt, womit sich entweder durch Hand- oder durch Softumschaltung das gewünschte Video-Signal selektieren läßt. Und schließlich ist noch die Umschaltung der Umschaltungsvarianten per Hand gezeigt, wofür dann noch ein 2fach-Umschalter nöig ist.