Mikroprozessortechnik 01/90 |
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.
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.
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 |