Motorola 6845 - Motorola 6845

Motorola 6845 CRT-Controller

Der Motorola 6845 oder MC6845 war ein Display-Controller , der in den 1980er Jahren in 8-Bit-Computern weit verbreitet war . Ursprünglich für Designs auf Basis der Motorola 6800- CPU gedacht und mit einer entsprechenden Teilenummer versehen, wurde es neben verschiedenen anderen Prozessoren häufiger verwendet und war am häufigsten in Maschinen auf Basis des Zilog Z80 und MOS 6502 zu finden .

Der 6845 ist keine vollständige Display-Lösung für sich allein; Die Hauptfunktion des Chips besteht darin, den Zugriff auf den Anzeigespeicher zeitlich richtig zu steuern und die Speicheradresse des nächsten zu zeichnenden Abschnitts zu berechnen. Andere Schaltungen in der Maschine verwenden dann die vom 6845 bereitgestellte Adresse, um das Muster abzurufen und es dann zu zeichnen. Die Implementierung dieser Hardware liegt ganz im Ermessen des Designers und variiert stark zwischen den Maschinen. Der 6845 ist für Zeichenanzeigen gedacht, könnte aber mit etwas geschickter Programmierung auch für pixelbasierte Grafiken verwendet werden.

Zu seinen bekannteren Anwendungen gehören die BBC Micro- , Amstrad CPC- und Videx VideoTerm-Grafikkarten für den Apple II . Es ist auch Teil vieler früher Grafikkarten für den IBM PC , einschließlich MDA , Hercules Graphics Card (HGC) und Color Graphics Adapter (CGA). Seine Funktionalität wurde dupliziert und durch benutzerdefinierte Schaltungen in den EGA- und VGA- PC-Videoadaptern erweitert.

Ursprünglich von Hitachi als HD46505 entwickelt , befinden sich Hitachi-gebaute Versionen in einer Vielzahl japanischer Computer von Sony, Sharp, Panasonic und Casio. Es ist auch als 6845 CRTC oder CRTC6845 bekannt , was " Kathodenstrahlröhren- Controller" bedeutet. Diese Version wurde auf dem Apricot-PC und Victor 9000 verwendet , um ein monochromes Display mit einer Auflösung von 800 x 400 bereitzustellen.

Ein üblicher Klon dieses CRT-Controllers ist der UM6845E- CRT-Controller der United Microelectronics Corporation (UMC) .

Während der Zeit des Kalten Krieges wurde die 6845 in Bulgarien unter der Bezeichnung CM607 geklont .

Überblick

Der Chip erzeugt die notwendigen Signale mit einer Raster - zu - Schnittstelle - Anzeige , aber nicht die tatsächlichen erzeugt Pixel , obwohl es Cursor und Signale Video-Blanking - Informationen an das Pixelvideo (Intensität) beiträgt. Es wird verwendet, um eine zeitrichtige horizontale und vertikale Synchronisation zu erzeugen und die Adresse im Speicher bereitzustellen, von der das nächste Pixel oder der nächste Pixelsatz gelesen werden soll. Das Lesen dieses Wertes, das Umwandeln in Pixel und das Senden an eine CRT wird anderen Schaltungen überlassen. Aus diesem Grund können Systeme, die den 6845 verwenden, sehr unterschiedliche Zahlen und Werte von Farben aufweisen oder Farben überhaupt nicht unterstützen.

Interlaced- und Non-Interlaced-Ausgabemodi werden ebenso unterstützt wie ein Hardware-Textcursor. Die Sync-Erzeugung umfasst die Erzeugung von horizontalen und vertikalen Video-Austastsignalen, die verwendet werden, um die externen Pixelerzeugungsschaltungen zu konditionieren. Außerdem ist ein interner Zwischenspeicher vorgesehen, der, wenn er ausgelöst wird, eine Kopie der Videoadresse dupliziert und behält, damit sie später von der CPU zurückgelesen werden kann. Dies ist nützlich für Lichtstifte und Lichtpistolen, die funktionieren können, indem sie beim Passieren des Elektronenstrahls einen Impuls an den 6845 senden, sodass ein laufendes Programm die Position zurücklesen kann, auf die gezeigt wurde. Aufgrund dieser Funktion enthielten die meisten Computer-Videoadapter, die einen 6845 verwenden, eine Lichtstift-Schnittstelle, obwohl es sich normalerweise um einen internen Anschluss auf der Platine selbst und nicht auf der Außenseite des Computers handelte und in der Bedienungsanleitung normalerweise nicht dokumentiert war.

Da alle Aspekte des Video-Timings programmierbar sind, kann eine einzelne Maschine softwaremäßig zwischen NTSC- und PAL- Timing umschalten . Der 6845 kann zum Ansteuern von Monitoren oder anderen Rasterdisplays verwendet werden.

Einbauten

MC6845-Pinbelegung.

Der Chip verfügt über insgesamt 18 8-Bit- Register, die alle Aspekte des Video-Timings steuern. Nur zwei Adressen sind externen Komponenten ausgesetzt - eine, um auszuwählen, welches interne Register gelesen oder geschrieben werden soll, und eine andere, um auf dieses Register zuzugreifen.

Der 6845 ist für zeichenbasierte Displays vorgesehen. Jede erzeugte Adresse besteht aus zwei Teilen - einer 14-Bit-Zeichenadresse und einer 5-Bit-Reihenadresse. Unter Verwendung des vollen Adressbereichs RA0-RA4:CA0-CA13 kann der 6845 2 14+5 = 524.288 Speicherwörter adressieren, wobei ein Wort eine beliebige Anzahl von Bits sein kann, die vom Systemdesigner als Speicherbreite gewählt wurden. Bei einer Wortgröße von einem Byte, wie es oft der Fall ist, kann der 6845 512 KiB adressieren . Beträgt die Wortgröße 32 Bit, zB für 32-Bit-Farbgrafiken mit einem Pixel pro Wort, dann kann der 6845 2048 kiB adressieren; für 64-Bit-Wörter kann es doppelt so viel adressieren. Diese Grenzen ergeben sich aus der Kombination des 6845 und der Gestaltung des daran angeschlossenen externen Speichers, nicht allein aus dem 6845. Obwohl die Anzahl der eindeutigen Adressen, die der 6845 adressieren kann, auf 524.288 begrenzt ist , kann die Speichermenge, die der 6845 adressieren kann, erheblich größer sein, als angenommen werden könnte, da der 6845 der Größe jeder Speicherstelle, die er adressiert, keine Begrenzung auferlegt.

Wichtig ist auch, dass nicht jedes vom 6845 adressierte Wort einem Pixel oder einem Zeichen entsprechen muss. Betrachten Sie als Beispiel die Verwendung des 6845 im IBM CGA, bei dem die Wortgröße ein Byte beträgt und jedes Wort vier oder acht Pixel im Grafikmodus mittlerer bzw. hoher Auflösung oder ein halbes Zeichen darstellt. Im alphanumerischen CGA-Modus (Text) gibt es zwei Bytes pro Zeichen, auf die der 6845 sequentiell zugreift – das erste Byte ist ein Zeichencode-Byte und das zweite Byte ist ein Zeichenattribut-Byte.

Die Zeichenadresse steigt linear an. Wenn der Chip horizontales Sync signalisiert, erhöht er die Zeilenadresse. Wenn die Zeilenadresse nicht der programmgesteuert eingestellten Anzahl von Zeilen pro Zeichen entspricht, wird die Zeichenadresse auf den Wert zurückgesetzt, den sie am Anfang der gerade abgeschlossenen Abtastzeile hatte. Andernfalls wird die Zeilenadresse auf Null zurückgesetzt und die Speicheradresse steigt weiter linear an. Dies bewirkt, dass dieselbe Folge von Zeichenwerten für jede Rasterzeile jeder Zeichenzeile erneut aus dem Speicher gelesen wird, bevor der 6845 die Speicheradresse zur nächsten Zeichenzeile vorrückt und dasselbe Muster wiederholt. Wenn daher ein Zeichen ein "Wort" im Videopuffer belegt, erfordert eine Anzeige von l Zeilen und c Spalten von Zeichen mit s Abtastzeilen pro Zeichen l × c Speicherwörter, um einen vollständigen Zeichenbildschirm darzustellen, dauert jedoch s- mal so lange viele Speicherzugriffe, um einen Auffrischzyklus abzuschließen: Jede Zeile von Zeichenwörtern wird s- mal wiederholt gelesen, bevor die nächste Zeile gelesen wird. Dies bedeutet, dass Zeichendisplays, die den 6845 verwenden, im Vergleich zu all-point-adressierbaren Grafikdisplays derselben Auflösung viel weniger Speicher benötigen, aber dennoch eine hohe Speicherbandbreite in der Größenordnung der für Grafiken erforderlichen Bandbreite benötigen. Ein anderer Video-Display-Controller, der eine ganze Zeichendatenzeile intern puffert, kann dieses wiederholte Lesen jeder Zeichenzeile aus dem Anzeigepuffer-RAM vermeiden, wodurch die erforderliche Speicherbandbreite reduziert wird und entweder langsamere, kostengünstigere Speicherchips verwendet werden können, mehr Zeit für eine System-CPU, um auf den Speicher zuzugreifen, oder eine Kombination von beiden.

In den 1970er, 1980er und in geringerem Maße auch in den 1990er Jahren war Speicher teuer, besonders schneller Speicher, und dies war ein wichtiges Anliegen. In den 1970er und Anfang bis Mitte der 1980er Jahre war die Dichte der Chip-Schaltkreise auch nicht sehr hoch, und das Einsetzen eines 80-Byte- oder größeren Zeichenpuffers in einen Chip wie den 6845 hätte den Chip-Die um 50-100% vergrößert, was wiederum dazu führte, dass es ist um ein Vielfaches teurer aufgrund des exponentiellen Anstiegs der Chip-Defektraten und der daraus resultierenden Abnahme der Produktionsausbeute mit der Größe der Chips. Daher war das Hinzufügen eines solchen Zeichenpuffers zum 6845 kein kosteneffektiver Ansatz, als der Chip eingeführt wurde. Da Speicher jetzt sehr kostengünstig ist, schnelle Speicher eingeschlossen, gibt es wenig Motivation, die von einem Videoanzeigecontroller benötigte Speicherbandbreite zu reduzieren, so dass dies keine wichtige technische Überlegung mehr ist. Gleichzeitig sind die Chipdichten in die Höhe geschossen – was eigentlich der Hauptgrund für die heute niedrigen Speicherpreise ist – und viele in Computern verwendete Chips haben große Puffer und Caches; ein Chip wie der heute entwickelte 6845 könnte leicht einen Zeichenzeilen-Cache verwenden, um das Lesen und erneute Lesen von Zeichen für jede Videoabtastzeile innerhalb einer Zeichenzeile zu vermeiden. Bei Handheld-Geräten mit geringem Stromverbrauch, die derzeit wahrscheinlich am häufigsten Zeichenanzeigen verwenden, wäre der Stromverbrauch für den Speicherzugriff mit hoher Bandbreite ein guter Grund, die Speicherbandbreite für die Anzeigeaktualisierung durch die Verwendung eines Zeilen-Cache im Display-Controller.

Wenn die Zeichenadresse verwendet wird, um eine Zeichenreferenz im RAM nachzuschlagen, und die Zeilenadresse verwendet wird, um eine Tabelle von Zeichengraphiken im ROM zu indizieren, wird eine gewöhnliche Textmodusanzeige aufgebaut. Die aus dem Speicher gelesene Zeichenreferenz muss mit der Zeilenadresse kombiniert werden, um die Adresse für das Zeichengrafik-ROM zu bilden, wobei die Zeichenreferenz einen Satz von Abtastzeilenmustern auswählt, die ein Zeichen bilden, und die Zeilenadresse in diesen Satz indiziert, um einen Abtastvorgang auszuwählen Linie. Mit anderen Worten, die ROM-Adresse wird in zwei Teile geteilt, um den ROM als zweidimensionales Array zu verwenden: die erste Dimension wählt ein Zeichen aus und die zweite wählt eine Reihe des grafischen Musters dieses Zeichens aus.

Lineare Framebuffer

Wie oben beschrieben, ist der 6845 normalerweise nicht in der Lage, große lineare Framebuffer bereitzustellen. Ein Entwurf könnte nur die 14-Bit- Zeichenadresse verwenden und die Anzahl der Zeilen pro Zeichen auf 1 setzen, aber er wäre auf 16 kB adressierbaren Speicher beschränkt.

Eine Lösung wird in der Amstrad CPC gefunden , die die Zeilenadresse und die Zeichenadresse kombiniert, um lineare Abtastzeilen innerhalb eines nichtlinearen Puffers bereitzustellen. Er bildet die Zeilenadresse RA0-RA2 auf die Speicheradresse MA11-MA13 und die Zeichenadresse CA0-CA10 auf die Speicheradresse MA0-MA10 ab. Dies hat die Vorteile einer einfacheren Programmierung für die Anzeige ohne Zeichen und eines einfachen reibungslosen horizontalen Scrollens, kann jedoch ein reibungsloses vertikales Scrollen behindern.

Unterschiede zum 6545

Obwohl überwältigend kompatibel, gibt es zwischen 6845 und 6545 eine Reihe kleiner Variationen.

Der größte Unterschied besteht darin, dass der 6545 so konfiguriert werden kann, dass er alleinigen Zugriff auf den Adressbus für den Videospeicher hat. Zwei zusätzliche Register sind enthalten, um jede Adresse einzustellen, die die CPU lesen möchte, und der Chip wechselt zwischen der Ausgabe von Adressen für die Anzeigeerzeugung und dem Anzeigesatz für den CPU-Zugriff.

Kleinere Änderungen sind, dass die MOS-Technologie und eine Variante des Rockwell 6545 keine Interlaced-Ausgabeunterstützung haben und alle 6545 einen optionalen Adressversatz enthalten, der die Anzeigeaktivierung um einen Zeichenzyklus verzögert, falls eingestellt. Diese zweite Funktion wurde in spätere Variationen des Motorola 6845 integriert.

Der 6545 kann unter Verwendung eines Statusbits so eingestellt werden, dass er im linearen 14-Bit-Modus arbeitet. Beim 6845 erfordert das gleiche eine Anpassung der Zeichenhöhe.

Tricks

Der 6845 liest einmal pro Frame die Startadresse für seine Anzeige . Wenn jedoch die internen Timing-Werte auf dem Chip zum richtigen Zeitpunkt geändert werden, kann er für einen neuen Frame vorbereitet werden, ohne den aktuellen Frame zu beenden - wodurch eine nicht kontinuierliche Unterbrechung in den generierten Adressen mitten in der Anzeige entsteht. Dies wird häufig von Demos und viel seltener von Spielen verwendet , um einen beweglichen Bereich des Displays (normalerweise das Spielfeld) und einen statischen Bereich (normalerweise eine Statusanzeige) bereitzustellen.

Vertikales Scrollen erscheint eingeschränkt, da nur die Zeichenanfangsadresse eingestellt werden kann und die Zeilenadresse beim Frame-Start immer auf Null gesetzt wird . Durch das Zeichnen von leeren Pixeln an den Bildschirmrändern kann dies für den Benutzer unsichtbar gemacht werden, wodurch nur die Illusion eines glatten vertikalen Scrollens erzeugt wird.

Siehe auch

Externe Links