Mikroprozessortechnik 01/90

 

Farbgrafikadapter für K1520-Systeme - klein und vielseitig

Kathrin Lajow, Wolfram Kammer, Wolfgang Spindler
VEB Elektronische Bauelemente Teltow

Grafische Darstellungen in Farbe auf dem Bildschirm gehören wohl zu den nobelsten Arten der Kommunikation zwischen Computer und Bediener. Wenn es nicht gerade ein hochauflösendes Gerät für die CAD-Welt sein soll, dann bleibt der Aufwand für die dazu notwendige Hardware recht gering, wie dieser Artikel zeigt.

Bevor es richtig losgeht, muß hier gesagt werden, daß dieser Farbgrafikadapter nicht ohne weiteres an jeder x-beliebigen K1520-Konfiguration betreibbar ist. Der Adapter liefert nämlich einen Systemtakt von 3,5 MHz auf den Systembus, und alle übrigen Baugruppen des Rechners müssen mit eben diesem Takt arbeiten - sonst geht nichts. Wenn diese Bedingung (es ist glücklicherweise die einzige, die etwas aus dem gewohnten Rahmen fällt) erfüllt ist, dann steht den farbenprächtigen Bildern auf dem Monitor nichts mehr im Wege. Der Adapter erzeugt ein normgerechtes Fernsehbild mit 15,625 kHz Zeilenfrequenz und 50 Hz Bildfrequenz ohne Zeilensprung. Er liefert an seinem Monitorausgang die vier digitalen Signale ROT, GRÜN, BLAU und EXTRAHELL sowie ein Synchronsignal (alles mit TTL-Pegel) und zusätzlich ein analoges BAS-Signal, bei dem die Farben in Grauwerte gewandelt sind. Notfalls kann man also auch einen Schwarzweiß-Fernseher anschließen.

Die technischen Daten

Das Bildfeld, welches der Adapter auf den Bildschirm schreibt, ist in horizontaler Richtung 256 Pixel und in vertikaler Richtung 192 Pixel groß. Jedes Pixel ist separat schreib und lesbar. Das Bildfeld füllt nicht den gesamten Bildschirm aus. Bis zu den Bildschirmrändern ist es mit einem etwa 20 Pixel breiten Rand umgeben, da erfahrungsgemäß die Bildschärfe in den Ecken zu wünschen übrig läßt. Die Pixel des Bildfeldes schalten zwischen dem sogenannten Vordergrund (Pixel gesetzt) und dem Hintergrund (Pixel gelöscht) um. Die Farben von Vordergrund, Hintergrund und Rand sind unabhängig voneinander einstellbar. Einen Alphanumerikmodus mit Zeichengenerator usw. gibt es bei diesem Adapter nicht. Wer auf diesem Bildschirm Text anzeigen will, muß deshalb im Gegensatz zu alphanumerischen Bildschirmen jedes Zeichen aus einzelnen Pixeln zusammensetzen. Das ist aber gar nicht so schwierig, denn durch eine ausgeklügelte Adressierung der Pixel ist für diesen Fall vorgesorgt.
Der Adapter braucht außer einem anfänglichen Bildschirmlöschen keinerlei Initialisierung oder laufende Bedienung durch die CPU. Er arbeitet völlig autonom und bremst die CPU nicht durch irgendwelche Busrequests und dergleichen. Lediglich dann, wenn die CPU auf den Bildwiederholspeicher zugreift, wird sie um durchschnittlich 2 CPU-Takte mittels WAIT-Signal verzögert. Das entspricht dem Zeitbedarf eines halben NOP-Befehls und dient der Synchronisation der drei Zugriffsarten auf den Bildwiederholspeicher (Attribute lesen und Pixel lesen durch die Displaysteuerung sowie CPU-Zugriffe). Dadurch wird vermieden, daß CPU-Zugriffe sichtbare Störungen auf dem Bildschirm erzeugen. Diese "Schneeverhinderungs"-Schaltung ist auch der Grund dafür, daß der übrige Rechner mit dem aus dem Pixeltakt von 7 MHz abgeleiteten Systemtakt arbeiten muß.
Da die Pixel byteweise im Bildwiederholspeicher stehen, muß die Displaysteuerung im Zyklus von 8 Pixeln sowohl die Attribute als auch die Pixel lesen. Dieser Zyklus besteht aus 8 Pixelzeiten (d.h. 8 elementare Zeitabschnitte von je 143 ns, in denen jeweils ein Pixel auf den Bildschirm geschrieben wird) und ist in drei Abschnitte eingeteilt. Die Zeit von Pixel 1 bis Pixel 4 steht für CPU-Zugriffe zur Verfügung. Während der Pixelzeiten 5 und 6 werden die Attribute gelesen und in einen Zwischenspeicher übernommen, und während der Pixelzeiten 7 und 8 werden die Pixel gelesen und mit dem Ende des Zyklus in ein Schieberegister übernommen, wo sie mit den nächsten 8 Takten seriell herausgeschoben werden. Mit der Übernahme der Pixel in das Schieberegister werden auch die Attribute vom Zwischenspeicher in das eigentliche Attributregister geladen. Versucht die CPU zu irgendeinem Zeitpunkt, auf den Bildwiederholspeicher zuzugreifen, so wird sie erst einmal mit WAIT angehalten. Am Beginn eines neuen Displayzyklus schaltet die Displaysteuerung das WAIT-Signal wieder ab, und die CPU kann nun während der folgenden 4 Pixelzeiten (gleich 2 Systemtakten) ihren Zugriff ausführen.
192 mal 256 Pixel, das sind genau 6 KByte Bildwiederholspeicher, der im Hauptspeichervolumen des Rechners angeordnet ist. Um den Aufwand gering zu halten, wurde jeweils ein Farbattribut-Byte einem Quadrat von 8 mal 8 Pixeln zugeordnet. Das gesamte Bildfeld ist in 768 solche Quadrate eingeteilt (32 horizontal, 24 vertikal). Im Hauptspeichervolumen des Rechners ist direkt nach dem 6 KByte umfassenden Pixelspeicher der 768 Byte umfassende Farbattribut-Speicher angeordnet. Beide können zusammen durch Lötbrücken auf der Leiterplatte in 8-K-Schritten im Hauptspeicher verschoben werden. Die Vorzugsadresse ist 4000H. Sie ist durch einen Leiterzug vorverdrahtet. In diesem Fall liegt der Speicherbereich für die Pixel im Bereich von 4000H bis 57FFH und für die Attribute von 5800H bis 5AFFH. Wie die Farbinformationen im Attribut-Byte codiert sind, zeigt Tafel 1. Für je ein Quadrat von 8 mal 8 Pixeln kann eine von 8 Hintergrundfarben, eine von 16 Vordergrundfarben (8 Farben in 2 Helligkeitsstufen) und Blinken/Nichtblinken gewählt werden.
Die Attribut-Bytes stehen im Speicher zeilenweise in natürlicher Reihenfolge, also zum Beispiel:

1.  Zeile: 5800H...581FH (5800H = links oben, 581FH = rechts oben)
2.  Zeile: 5820H...583FH
usw. bis
24. Zeile: 5AE0H...5AFFH

Im Gegensatz zu dieser einfachen Zuordnung ist die Adressierung der Pixel etwas komplizierter. Angenommen, man beschreibt die Lage der Pixel durch Koordinaten auf dem Bildschirm so, daß der Nullpunkt sich links oben befindet, die Spaltenadressen sich nach rechts und die Zeilenadressen sich nach unten erstrecken. Für die Zeilenadresse werden 8 Adreßbits benötigt, wobei sich die Adresse von 0 bis 0BFH erstrecken kann. Für die Spaltenadressen werden 5 Adreßbits benötigt, da die Stellung eines Pixels im Byte den drei niederwertigsten Bits entspricht.
Das höchstwertige Bit im Byte gelangt zuerst auf den Bildschirm und steht demzufolge am weitesten links. Wie die verschiedenen Bits der Zeilen- und Spaltenadressen aus Sicht der CPU angeordnet sind, zeigt Tafel 2. Wie man sehen kann, sind die Zeilenadreßbits R0...R7 ineinander verschachtelt. Bei den Attributadressen sind einfach die Bits R0, R1 und R2 aus der Zeilenadresse herausgeschnitten. Auf diese Weise ist es sehr einfach, das für ein Pixel zuständige Attributbyte zu finden. Folgende kurze Programmsequenz erledigt dies:
(angenommen, HL enthält die Pixeladresse nach Tafel 2)

  LD       A,H   ;Pixeladreßteil high laden
  RRCA           ;um 3 Bit nach rechts
  RRCA           ;verschieben
  RRCA
  AND    3       ;Grundadresse wegschneiden
  OR       58H  ;Anfang Attributadresse dazu
  LD        H,A  ;Adresse wieder zurück in HL

Wenn man sich darauf beschränkt, Textzeichen nicht an beliebige Stellen, sondern nur so auf den Bildschirm zu schreiben, daß ein Zeichen genau in eines der 768 Quadrate gelangt, dann ist es dank der Verschachtelung der Zeilenadreßbits auch recht leicht, Texte auf diesen Farbgrafikadapter zu schreiben. Angenommen, DE zeigt auf den Anfang eines der 768 Quadrate, in welches das Zeichen F geschrieben werden soll und HL zeigt auf den Anfang einer Bitmustertabelle für dieses Zeichen. Dann erledigt folgendes kleine Unterprogramm das Einschreiben des Bitmusters für das Zeichen F in den Bildwiederholspeicher:

  WCHAR: LD  B,8
  ZYKL:      LD A,(HL) ;Pixel holen
                   LD (DE),A ;Pixel in BWSP schreiben
                   INC HL     ;nächstes Pixelbyte
                   INC D       ;Pixeladresse weiterstellen
                   DJNZ ZYKL - # ;8 mal insgesamt
                   RET

;BEISPIEL FÜR BITMUSTER "F"
  DEFB 00000000B;
  DEFB 11111110B;  *******
  DEFB 01100010B;    **      *
  DEFB 01101000B;    **  *
  DEFB 01111000B;    ****
  DEFB 01101000B;    **  *
  DEFB 01100000B;    **
  DEFB 11110000B;  ****

Wie man sieht, ist diese Programmsequenz recht kurz und schnell, denn zum WeitersteIlen der Pixeladressse genügt ein einfacher und schneller Inkrementierbefehl.

Üblicherweise enthalten Bildschirmadapter für richtige PCs zumindest noch einen Druckeranschluß, um den Platz, den der Adapter belegt, möglichst intensiv nutzen zu können. Auch bei dem hier vorgestellten Farbgrafikadapter findet sich etwas Derartiges. Allerdings ist es kein Druckeranschluß, sondern ein kombiniertes Bedienerinterface mit folgenden Anschlußmöglichkeiten:

- Tastaturanschluß für ein 8 x 5 Tastenfeld
- Lautsprecheranschluß fürTastenklick usw.
- Anschluß für Recorder oder optischen Lesestift.

Diese Zusatzanschlüsse belegen einige Adressen im I/O-Adreßraum des Rechners, vorzugsweise auf der Adresse 0FEH. Leider war auf der Leiterplatte nicht mehr genügend Platz, um den Port vollständig zu dekodieren. Er belegt deshalb einige Adressen mehr, als eigentlich erforderlich wäre. Die Konfiguration des I/O-Ports zeigt Tafel 3.

Zu erwähnen ist noch, daß der Farbgrafikadapter zu Beginn jedes Bildsynchronimpulses einen Interrupt erzeugen kann. Damit kann man sich in einfachen Konfigurationen auch ohne speziellen Zeitgeberschaltkreis eine Software-Uhr einrichten oder auch zyklisch die Tastatur abfragen. Allerdings kann der Adapter keinen Interruptvektor liefern, weswegen die CPU im Interruptmodus 1 betrieben werden muß. Bei größeren Systemen kann man natürlich auf diese einfache Interruptquelle verzichten, indem man R 37 entfernt und C 10 durch eine Brücke ersetzt.

Der Aufbau des Farbgrafikadapters

Das Layout des Adapters wurde auf dem üblichen K1520-Leiterplattenmaß von 215 mm mal 170 mm entworfen. Viele Geräteentwickler sind allerdings seit einiger Zeit mit diesem Maß nicht mehr recht zufrieden, da es durch die übliche senkrechte Einbauweise im EGS-Gehäuse zu recht klobig wirkenden Geräten führt. Deshalb sind inzwischen auch Weiterentwicklungen des K1520-Sortiments wie NANOS von der IHS Warnemünde recht beliebt geworden, die als Leiterplattengrundmaß 95 mm mal 170 mm verwenden, womit wesentlich kleinere und dem Fortschritt des Bauelementesortiments besser entsprechende Geräte herstellbar sind. Auch ein eventueller Übergang auf das Format 100 mm mal 160 mm ist damit leichter. Dieser Tendenz haben wir uns angeschlossen. Ein Blick auf das Layout des Farbgrafikadapters zeigt, daß man bei Bedarf die Leiterplatte teilen kann, womit man zwei Platten im Maß von 95 mm mal 170 mm erhält, die dann über Litze verbunden werden müssen. Damit ist der Adapter sowohl in klassischen K1520-Systemen als auch in neueren kleinformatigen Konfigurationen verwendbar. Der Adapter benötigt als Versorgungsspannung lediglich +5 V bei etwa 630 mA, wenn man zur Versorgung des Operationsverstärkers der Recorder-/Leseschaltung einen DC-DCWandler U 7660 DC einsetzt. Wenn man die Leseschaltung nicht benötigt oder bereits -5 Volt im Rechner zur Verfügung hat, kann man den DC-DC-Wandler natürlich auch weglassen.

Auf eine ausführliche Schaltungsbeschreibung soll hier verzichtet werden, da bekanntlich ein Stromlaufplan mehr sagt als tausend Worte. Für die TTL-Schaltkreise kommen (soweit möglich) LS-Typen zum Einsatz. Die Schaltkreisbezeichnungen wurden auf die charakteristische Nummer verkürzt, das heißt, man lese 374 als DL 374, 8205 als DS 8205, 6516 als U 6516 D 15 usw. Der Einsatz von HCT-Schaltkreisen bringt bis auf den Ersatz der drei DS 8205 durch stromsparende U 74 HCT 138 kaum Vorteile. Kritische Stellen und Abgleichpunkte gibt es nicht, so daß bei sorgfältigem Aufbau der Farbgrafikadapter auf Anhieb funktionieren wird.


28 KByte 59 KByte 58 KByte
Tafel 1 Tafel 2 Tafel 3

573 KByte 760 KByte 749 KByte
Bild 1 Bild 2 Bild 3
Bestückungsplan Schaltplan, Teil 1 Layout, Lötseite

761 KByte 742 KByte
Bild 4 Bild 5
Layout, Bestückungsseite Schaltplan, Teil 2