DEV-TRONIC.de

Z80Ardu – Displayadapter (mit MC6847)

Parallel zum eigentlichen Z80Ardu-Rechner wollte ich so etwas wie eine Grafikkarte bauen. Basis für den Displayadapter sollte der MC6847 sein. Dieser Chip wurde in den 80ern häufig in Heimcomputern verwendet. Der Chip hat folgende Eckdaten:

  • Textmodus mit 16 Zeilen á 32 Zeichen
  • Blockgrafik im Textmodus in 8 Farben
  • Diverse Grafikmodi, max. 4 Farben, maximale Auflösung 256 x 192 Pixel

Sicher handelt es sich um kein Grafikwunder. Aber dafür ist dieser Chip recht einfach zu handhaben. Einzig das Timing für den Zugriff auf den Videospeicher durch den Prozessor kann eine Herausforderung werden, wenn man keine Bildstörungen verursachen möchte.

Zunächst habe ich meine Idee mal auf ein Breadboard gesteckt. Auf der kleinen Zusatzplatine befindet sich der Signalverstärker für die Composite-Signale:

Die Breadboard-Grafikkarte
Das Ergebnis (Schwarz-Weiß)

Nachdem die Breadboard-Version ja gut funktioniert hat, habe ich das Ganze als PCB bestellt und mir eine „Grafikkarte“ zusammengebaut. Die Version, die auf dem nachfolgenden Bild zu sehen ist, ist nicht die aktuellste Version. Ich habe noch ein wenig am Platinenlayout gearbeitet und auch auf zwei Potis verzichtet.

Eine frühe Version der Grafikkarte. Inzwischen überholt.

Aktuell verfügt die Karte über 32 KB Videoram. Der MC6847 benötigt für die Darstellung der vollen Auflösung allerdings nur 6144 Bytes. Es würde also ein 8 KB Baustein vollkommen ausreichen. Die 32 KB werden auf der Karte jedoch in 4 Bänke aufgeteilt. Es können also 4 unabhängige Bildschirme aufgerufen werden. Die Umschaltung erfolgt über ein Latch. Der Bildschirminhalt bleibt beim Umschalten natürlich erhalten.

Übrigens: Der MC6847 kann auch mit einem externen Character ROM (oder RAM) ausgestattet werden. Man kann dann zwischen dem eingebauten Zeichensatz und einem selbst definierten Zeichensatz umschalten. Die Beschaltung des Chips sieht dann allerdings um einiges anders aus, und wird vermutlich als Erweiterung irgendwann hier augeführt.

Die aktuelle Version der Grafikkarte, wie ich sie zurzeit (Juni 2022) nutze, sieht wie folgt aus:

Noch die „kurze“ Version für die alte Basisplatine. Ohne externen Zeichensatz

Übrigens: Bei der Programmierung einiger Routinen zur Erzeugung von Grafik konnte ich feststellen, dass Daten nicht sauber übertragen werden. Bei 4 MHz des Z80Ardu und einer schnellen Plotroutine erscheinen auf dem Bildschirm Artefakte oder es fehlen Punkte. Der Austausch des Speicherbausteins (auf meiner aktuellen Version noch ein 32 KB SRAM Baustein von Alliance in 600 mil Breite und einer Zugriffszeit von 70 ns) gegen andere Hersteller, jeweils mit unterschiedlichen Zugriffszeiten, hat nichts gebracht. Auch der Austausch des MC6847 gegen einen anderen MC6847 bringt nichts. Diese Erkenntnis erlangte ich im Juni 2022.

Zugegeben, die Trennung des Adressbusses mit Widerständen ist eine günstige, aber nicht unbedingt eine gute Lösung. Eine neue Version ist schon in Arbeit (ebenfalls Juni 2022).

Dezember 2022

Im Dezember 2022 habe ich die Arbeit, die ich im Juni begann, fortgesetzt. Es ist eine neue, „lange“ Version des Displayadapters entstanden. Die Maße wurden an die Größe der Karte des Z80Ardu angepasst. Außerdem habe ich de Umstand Rechnung getragen, dass die Trennung vom Adressbus mit Widerständen nicht optimal ist. Statt Widerstände zu nutzen, werden jetzt Bustranceiver (74HCT245) genutzt. Jetzt funktionieren meine Grafikroutinen prima. Es erscheinen keine Artefakte mehr.

Download:

Die Datei enthält den Schaltplan in unterschiedlichen Formaten, die Gerberfiles für die PCB-Produktion und eine Bauteileliste. Die bereitgestellte Version ist die „kurze“ Version, allerdings mit einem schmalen Videoram-Chip (300 mil) und geändertem Layout. Das sollte funktionieren, da sich an der Schaltung an sich nichts geändert hat (Ich habe die Version allerdings noch NICHT getestet). Die Karte ist ansonsten kompatibel mit der neuen Basisplatine und kann dort uneingeschränkt genutzt werden.

Schreibe einen Kommentar

Cookie Consent mit Real Cookie Banner