Warum hatten Computer früher eine so niedrige Grafikauflösung?

Heute spielt die Auflösung die eine Grafikkarte bietet keine Rolle mehr, zumindest bei der Kaufentscheidung. Die neueste Version der HDMI-Spezifikationen definiert Formate bis 10K, also über 10.000 Pixel in der Horizontalen, Standardkarten beherrschen schon 8 K und Monitore in der Größe gibt es auch, z.B. von Dell (allerdings braucht man dann Adleraugen, denn bei 100 % Sehfähigkeit muss man, um diese Auflösung bei 32 Zoll Diagonale auch würdigen zu können, bis auf 30 cm an den Monitor heranrücken). Erstaunlicherweise entwickelte sich die Grafikauflösung relativ langsam, sprich Prozessoren hatten viel größere Zuwachsraten in Sachen Geschwindigkeit, selbst der Arbeitsspeicher stieg schneller an. Nun gibt es bei einem Monitor eine physikalische Einschränkung – die Pixel muss man ja auch erkennen können. So wuchs in den Neunziger die Bildschirmdiagonale. Bis VGA nutzte man nur die Auflösung aus, die man auf einem 12-Zoll-Monitor nutzen konnte. Der reichte also für ein ganzes Jahrzehnt als Ausgabegerät. Die Auflösung 800 x 600 führte zur Einführung des 14 Zoll Multisync Bildschirms, 1.024 x 768 dann zu 17 Zoll Diagonale und 1.280 x 1.204 zum 19 oder 20 Zöller und der war dann echt schwer. Größer ging es dann nicht, sonst passt das Ding nicht mehr auf den Schreibtisch. Trotzdem war ein Pixel auf einem 19 Zöller bei der „1,2, K Auflösung“ 30 Prozent kleiner als auf einem 12 Zöller bei VGA-Auflösung. Seit etwa zehn Jahren steigt die Auflösung wieder rapide an, die Bildschirmdiagonalen aber kaum. Ein 10 K Monitor hat zwar eine 40 % größere Diagonale als ein 24 Zöller, aber die 5-fache Zahl an Pixeln in jeder Achse.

Für mich selbst sind die digitalen Displays ein Segen. Seit dem 17 Zöller empfinde ich die Auflösung als zu klein. Ich sehe weit unterhalb 100 %. Die Vergrößerungsfunktion von Windows ist nicht wirklich hilfreich, weil Windows nicht, wie man vermuten würde, die Elemente wie Menübars würden dann größer gezeichnet, bei Schriften ist das ja sowieso möglich. Stattdessen rendert Windows in einer kleineren Auflösung wer „125 %“ wählt, hat auf einem 1.920 x 1.080 Monitor tatsächlich eine Darstellung mit 1.600 x 864. Das ist bei digitalen Displays mit festen Pixelgrößen natürlich suboptimal. Aber seit Fernseher auch digital sind, stehen bei mir eben zwei 32 Zoll Full-HD Fernseher auf dem Schreibtisch. Man muss sich nur angewöhnen, die immer mit der Fernbedienung ein/auszuschalten.

Doch nach dem historischen Rückblick nun mal zum Kern des Problems. In den Achtzigern stieg die grafische Auflösung nur langsam an, warum? Nehmen wir mal die Heimcomputer aus. Sie wurden an einen Fernseher angeschlossen, was die Auflösung limitierte, vor allem aber war ihr Arbeitsspeicher zu klein um größere Auflösungen zu ermöglichen. Hier mal eine Übersicht der wesentlichen Sprünge auf der PC Plattform in den Achtzigern.

Jahr Auflösung Typischer Speicher eines PC Geschwindigkeit (IBM PC=1)
1981 CGA: 640 x 200 x 2 16 – 64 KB 1
1984 EGA: 640 x 350 x 4 512 KB 2,5
1987 VGA: 640 x 480 x 4 1024 KB 9

Während der Speicher um das 64-fache größer wurde, der Prozessor 9-mal schneller, stieg die Anzahl der Bildpunkte nur um den Faktor 2,5 an. Dabei braucht man nicht mal einen neuen Monitor. Auch wenn die Ansteuerung anders ist, wurde die Röhre auf den Fertigungsstraßen der TV-Bildschirme gefertigt und selbst VGA lag noch unterhalb der Auflösung des PAL-Standards. Natürlich stieg auch der Speicherplatzverbrauch. Weil EGA und VGA mehr Farben haben, belegt ein VGA-Bild 153,6 KB Speicher, während es bei EGA noch 16 KB sind. Das ist dann also nicht ganz so extrem. Aber es ist doch auffällig, das die Steigerung nicht so extrem ist wie beim Arbeitsspeicher und als Laie meint man ja auch der verbaute Grafikspeicher ist der Hauptkostenpunkt einer Karte.

Ich selbst kam auf die dahinterliegende Problematik, als ich mich für einen Aufsatz (der wohl niemand außer mir interessiert, nämlich den idealen Z80 Heimcomputer) mit der Problematik Auflösungen, Bildschirmspeicher und Zugriff beschäftigte. Ich ging von dem Rechner aus, den ich gut kannte, den CPC. Daher als Einleitung mal die Beschreibung wie dort die Grafik funktionierte.

Der CPC hatte 16 KB seines Arbeitsspeichers als Grafikspeicher. Der Videocontroller war der 6845, der gleiche den IBM in der CGA Karte hatte. Wie bei dieser Karte betrug die maximale Auflösung 640 x 200 Punkte. Für das Folgende wichtig ist das der 6845 ein Videocontroller ist der auf Textdarstellung ausgerichtet. Man übergibt ihm daher alle horizontalen Koordinaten als Zeichenindex, nur in der Vertikalen arbeitet er mit Zeilen, wobei er eine Zeile stellvertretend für die Zeilenposition des Zeichens überträgt und einen Index, der das Bitmuster innerhalb der Zeichenmatrix übergibt. Als Videokontroller generiert er alle Signale, die ein Monitor für den Bildschirmaufbau braucht, wie horizontale und vertikale Synchronisation und er sagt dem Computersystem über seinen Bus, welche Adresse gerade auf dem Bildschirm gezeichnet werden sollte, aber er überträgt nicht die Bytes zum Monitor, das muss man selbst erledigen. Beim CPC erfolgte das durch ein Video Gate Array. Es muss synchron zur Bewegung des Elektronenstrahls die Information bitweise an den Monitor übertragen, wo sie dann zum Aufleuchten oder eben Nichtaufleuchten von Pixels führte. Das geschah damals komplett digital, das heißt es gab meist drei Leitungen für die Grundfarben und noch eine für die Helligkeit mit diesen vier Leitungen konnte man acht Grundfarben in zwei Helligkeitsabstufungen, das ergab die oft eingesetzt 16 Farben darstellen. Analoge Übertragung – in diesem Fall ein Fortschritt zog mit der VGA-Karte ein, das war damals ein Fortschritt, denn es ermöglichte mehr Farben indem nun auch der Signalpegel ausgewertet wurde. Heute ist diese analoge Übertragung bei digitalen Displays aber unangebracht und das Bild unscharf.

Nun zum Ablauf. Ein Grundproblem war, das der Speicher nicht separat war, CPU und Gate Array mussten also sich absprechen, damit sie nicht gleichzeitig auf den Speicher zugriffen, denn bei der damals üblichen Architektur aus 8 Bausteinen mit je 1 Bit breitem Datenbus war es immer so, dass bei jedem Zugriff sich jeder RAM-Baustein angesprochen fühlte, egal ob der Zugriff in den Bildschirmspeicher ging oder nicht. Man nutzte den Maschinenzyklus des Z80 aus. Der hatte immer 4 Takte und Speicherzugriffe gab es immer in der ersten Hälfte. In der zwoten Hälfte konnte das Gate Array dann zugreifen. Einziger Nachteil: So wurden alle Befehle auf ein Vielfaches von 4 Takten gestreckt, denn beim letzten Zyklus konnte ein Befehl auch weniger als vier Takte benötigen. Das verlangsamte den Z80 so, dass er bei 4 MHz so schnell war wie ein Z80 mit 3,2 MHz ohne diese Bremse.

Auf die eigentliche Problematik kam ich, als ich die Auflösung verdoppeln wollte und eine Z80H mit 8 MHz einsetzen wollte. Beim CPC gab es in 1 Mikrosekunde maximal drei Zugriffe: einen von der CPU und zwei vom Gate Array. Das zeigt schon die Problematik. Pro Mikrosekunde mussten für die Bildschirmdarstellung zwei Bytes übertragen werden, die zuerst in einem Schieberegister landeten, denn der Elektronenstrahl übertrug ja einzelne Punkte. Zwei Bytes übertragen (also lesen und schreiben) in einem halben Taktzyklus – das ist eine Ansage. Die Z80 schafft maximal ein Zehntel der geforderten Datenrate, selbst eine Z80 DMA bei 4 MHz nur die Hälfte. Damit dies ging, war das Gate Array mit 16 MHz getaktet – viermal höher als die CPU. Wie sich zeigte, reichte das denn auch gerade aus, denn das ergab 2 MByte/s Datenrate und die geforderte Datenrate betrug:

63 Zeichen pro Zeile x 2 Bytes pro Zeile x 310 Zeilen x 50 Hz = 1,9553 MByte pro Sekunde. Geht man nun auf die doppelte Auflösung so verdoppelt sich auch die Datenrate. Ebenso greift eine Z80 CPU mit 8 MHz doppelt so oft auf den Speicher zu. Pro Mikrosekunde sind es also dann 6 Zugriffe. Als Spitze vier Zugriffe in den 500 ns der zweiten Hälfte der Mikrosekunde. Und das lässt dann nur noch 125 ns für einen Zyklus eines Speicherchips zu. Schaut man sich die Datenblätter an, so sieht das so aus:

Typ Zugriffszeit Zykluszeit
4164-120 / 41256-120 120 220
4164-150 / 41256-150 150 280 / 260
4164-200 200 330
41256-100 100 200
6264 100, 120, 150 100, 120, 150

Die „41“ Typen sind die damals gängigen dynamischen RAM mit 1 Bit Datenbreite (4164: 64 Kbit x 1 Bit). Das 6264 ist kein dynamisches RAM, sondern ein statisches RAM und organisiert in 8 kbit x 8. Man stellt sofort fest, das kein dynamisches RAM eine Zykluszeit von 125 ns erreicht. Es reicht nicht die Zugriffszeit, die bei reinem Z80 Betrieb der ausschlaggebende Wert ist (da nach einem Speicherzugriff immer mindestens zwei Takte intern in der CPU abgearbeitet werden), sondern die Zykluszeit ist der wesentliche Wert: Nach dem Auslesen von Daten müssen diese bei dynamischen RAMs wieder aufgefrischt werden. Bei statischen RAMs gibt es diese Notwendigkeit nicht, deswegen ist die Zykluszeit dort gleich lang wie die Zugriffszeit.

Statische RAM wären also eine Lösung. Nur sind die ziemlich teuer. Anfang 1986 kostete ein 4164 RAM 2,80 DM, ein 6264 mit derselben Kapazität 10,30 DM. Eine zweite Lösung sind Multiport-RAM aus denen später auch GRAM also RAM für Grafikkarten entstanden. 1983 gab es das Erste von Texas Instruments. Dieses RAM hat neben dem normalen Port für Schreiben und Lesen einen zweiten nur für das Auslesen. Der ist verbunden mit einem Buffer, in dem die 256 Bits einer Spalte des RAM Chips landen. Diese 256 Bits können dann sehr viel schneller ausgelesen werden als beim normalen wahlfreien Zugriff. Das ist ideal für den Bildschirmaufbau, bei dem ja sequenziell der ganze Bildschirmspeicher 50 bis 60 mal pro Sekunde übertragen wird. Die dritte Lösung, nutzbar aber erst bei größerem Speicher auf der Grafikkarte ist es, die Zugriffe auf mehrere Banks zu verteilen. Hat man zwei Bänke, so halbiert sich die Zykluszeit und nun wird wieder die Zugriffszeit zum bestimmenden Maße. Dann greift die Ausleseelektronik z.B. bei geraden RAM-Adressen immer auf Bank 1 zu und bei ungeraden auf Bank 2. Die EGA-Karte hatte z.B. acht Bausteine des Typs TMS 4416-15, Speicherchips organisiert in 16K x 4 Bit. Daraus wurden vier Bänke konstruiert, bei jedem Byte Zugriff wurden zwei Bausteine angesprochen. So kam man mit den langsamen RAM Bausteinen (minimale Zykluszeit bei einem Lese/Schreibzugriff 330 ns) aus.

Nebenbei musste diese Ausleseelektronik auch recht fix sein. Der im IBM PC/AT eingebaute DMA Kontroller vom Typ 8237 schaffte maximal 600 kbyte/s. Eine EGA-Karte benötigte dagegen bei 60 Hz und nicht sichtbaren Rändern von 33 % mindestens 4,5 MByte/s. Schon auf meinem CPC der nur 2 MByte/s als Bandbreite erforderte, hatte sie daher eine Taktrate von 16 MHz.

Trotzdem lähmte die nur langsame Steigerung der Zugriffszeit die Leistungssteigerung von Grafikkarten. 1986 waren minimal 100 ns Zugriffzeit möglich. 1995 sank das auf 60 ns ab – nur der Faktor 1,6 in fast zehn Jahren. Erst ab 1992 ging die Entwicklung von Grafikkarten mit der Einführung von VRAM, also speziellem Videoram wieder schneller. Zuerst musste man dafür noch einen happigen Aufpreis zahlen, später wurde es zum Standard.

Speziell beim AT-Bus gab es aber eine andere Einschränkung – dessen Busgeschwindigkeit. Sie betrug beim AT-Bus maximal 5,33 MByte/s. Die meisten Grafikkarten wurden aber als 8-Bit Karten vertrieben, da sie so auch ein einen Rechner mit 8088/8085 Prozessor verbaut wurden. Dann sank die Datenrate auf minimal 0,96 MByte/s. Sie war nicht wesentlich für den Bildschirmaufbau, da der Bildschirm direkt an die Karte angeschlossen wurde, aber durchaus für den Datentransfer der CPU in den Grafikspeicher. In der Praxis waren die Einschränkungen noch größer, da um Störungen beim Bildaufbau zu vermeiden alle Veränderungen des Bildschirminhalts nur erfolgten, wenn beim Bildaufbau gerade die nicht sichtbaren Teile dran waren, also die Ränder links und rechts und oben und unten. Das führte schließlich auch zu neuen Bussystemen, zuerst als Vesa Local Bus, im Prinzip eine Speziallösung für den 486-Prozessor und später als genormter Standard der PCI Bus.

Zuletzt noch eine Bemerkung zu monochromer Textdarstellung und Grafik. Sie war schon früher in hoher Auflösung möglich. Das scheint ja ein Widerspruch zu dem gesagten sein, denn nimmt man die reine Pixelzahl, dann erreichte monochrome Textdarstellung schon früh hohe Datenrate. Der MDA Adapter bot 1981 schon 80 x 25 Zeichen in einer 9 x 14 Punktmatrix mithin 720 x 350 Pixel, dasselbe Auflösung erreichte die Hercules Grafikkarte 1993, die auch grafikfähig war, ebenfalls in monochrom. Das entspricht und übertrifft den EGA Standard was die Punkte abgeht. Allerdings war es monochrom, also viermal weniger Information, die übertragen werden musste. Vor allem aber waren Monochrommonitore nachleuchtend. Es machte bei diesen keinen Unterschied ob man das Bild mit 60 Hz oder 25 Hz übertrug, das Nachleuchten war erheblich länger als ein Bildschirmvollaufbau dauerte. Bei 25 Hz entsprechen 720 x 350 Pixel aber dann nur noch 0,7875 MByte/s netto, etwa 1 Mbyte/s mit den nicht sichtbaren Rändern und das lag dann sogar noch unterhalb der Datenrate, die selbst ein 8 Bitter schaffte.

5 thoughts on “Warum hatten Computer früher eine so niedrige Grafikauflösung?

  1. Der C64 verwendet da das gleiche Prinzip wie der CPC. Der Videocontroller kann sogar zusätzlich zum Ausnutzen der Prozessortaktlücken den Prozessor in den Wartemodus setzen, wenn er zuviel Bedarf an Speicherzugriffen hat. Das passiert vermutlich wenn Sprites angezeigt werden, sicherheitshalber haben aber praktisch alle Fastloader den Bildschirm abgeschaltet und höchstens die Hintergrund-/Randfarbe geändert. Bei den Fastloadern waren nämlich die Taktzyklen für die Kommunikation mit dem Diskettenlaufwerk genau ausgezählt, und ein Aussetzer der CPU hätte die Kommunikation aus dem Tritt gebracht.

  2. Beim Atari ST und den ersten Amiga (1000/500/2000) war die Bildschirmgröße auch mehr oder weniger durch die Bandbreite zum RAM beschränkt. Der mc68000 wurde mit 8MHz bzw. etwas weniger betrieben, und jeder zweite RAM Zugriff war für den Video Controller. Die Befehle wurden auf Vielfache von 4 Takten verlängert.
    Das gab dann jeweils Probleme mit den späteren Upgrades auf schnellere CPUs. 12MHz mc68000 waren recht bald verfügbar, konnten aber anfangs nicht genutzt werden. Die späteren Amigas (und Atari TT/Falcon) haben dann zwei RAM Systeme gehabt:
    – FastRAM nur für die CPU
    – ChipRAM (ST-RAM) für CPU und Videodarstellung
    Es gab dann später 16MHz/32Mhz CPU Aufrüstkarten bei denen das ROM und z.T. eigenes FastRAM eingebaut waren.

    Der Atari ST ist dann daran gestorben, daß die schnelleren Systeme (TT/Falcon) zu spät kamen. Die haben wohl zu viel Arbeit in den MegaST gesteckt, der ein deutlich schöneres Gehäuse mit abgesetzter Tastatur hatte, aber technisch nur um die Echtzeituhr und den Blitter (Video) verbessert waren. Und das was der Blitter konnte, haben einige wenige Programmierer bis zu dessen Erscheinen mit handkodiertem Assembler in der selben Zeit geschafft.

  3. Auf Grafikterminals und Workstations gab es deutlich früher höhere Auflösungen, aber die waren durch die Röhrenmonitore begrenzt.
    Typische Auflösungen waren:
    1024×768 (Sun 3)
    1162×864 (Sun 4)
    1280×1024 (SGI, spätere Suns)
    Die größten Röhrenmonitore hatten dann bis zu 1440 oder 1600 Punkte horizontale Auflösung.
    Die Schwarzweiß und Graustufendarstellung war unkritisch, und die Auflösung war nur nur von der Qualität der Analogelektronik des Monitors limitiert. Farbmonitore mußten in der durch die Maske vorgegebenen nativen Auflösung betrieben werden, ansonsten wurde das Bild matschig (unscharf).

    Bei der Bilderzeugung wurde bei den Workstations mit austauschbaren Grafikkarten mit eigenem RAM gearbeitet, so daß die erforderliche Videobandbreite über entsprechend viele RAM Bänke (oder VRAM) implementiert werden konnte. Monochrome (1Bit/Pixel) Grafikkarten waren deutlich preiswerter als die Farbkarten.

  4. bl> Ich selbst kam auf die dahinterliegende Problematik, als ich mich für einen Aufsatz (der wohl niemand außer mir interessiert, nämlich den idealen Z80 Heimcomputer) …
    Falls Sie den Artikel veröffentlicht haben, könnten Sie darauf einen Link geben?
    Mich würden insbesondere Ihre Begründungen zu den Details interessieren.
    (Für mich war der Z80 die kleinste CPU, die ich überhaupt in Assembler angefasst habe, und gegen die IBM360 deutlich kleiner, aber immer noch so vollständig, daß selbstmodifizierender Code nicht erforderlich war.)

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.