Video-Controller-Design

Ich entwerfe meinen eigenen Computer basierend auf dem Zilog Z80. Es verfügt über 256 KB statischen RAM mit Paging sowie einige Megabyte Flash-Speicher. Alles läuft ziemlich gut, bis * BAM * ich in eine Sackgasse geriet.

Das Problem, das ich habe, ist das Entwerfen eines Videocontrollers. Ich dachte an eine Art Terminal oder Display. Ein 24x80 oder 25x80 Terminal wäre wunderbar. Aber selbst ein VGA-Display mit 640 x 480 Pixeln würde enorm viel Speicherplatz beanspruchen.

640 * 480 = 307.2 Kbits

Das ist sogar mehr als die Menge an Speicher, die vom Z80 gleichzeitig adressiert werden kann!

Wenn ich Farbe möchte, sagen wir, ein Bit pro Farbe, würde ich 3 Bits pro Pixel benötigen.

307.2 Kbits * 3 = 921.6 Kbits

Müsste es nicht außerdem zwei Ports haben, um den Zugriff von Z80 und dem Monitor zu ermöglichen?

Da dies extrem schwierig in Software und Hardware zu implementieren ist, wäre es eine gute Entscheidung, ein Zeichen-ROM zu verwenden? Es wäre sehr schwierig für mich, Fuse-Link-PROMs oder UV-EEPROMs zu bekommen. Was soll ich machen? Kann ich ein Zeichen-ROM im Flash-Speicher ablegen? Wie würde ich es in der Steuerung implementieren? Wie sage ich dem Charakter-ROM, welchen Charakter er ausspucken soll? Sollte ich überhaupt VGA verwenden? Wäre Component-Video (NTSC oder PAL) einfacher als VGA?

Wenn ein gutes System entworfen werden kann, können wir es vielleicht sogar für Mikrocontroller verwenden! Gib mir alles, was du hast, ich brauche so viele Ideen wie möglich.

Sie können die Videohardware des ZX80/81 überprüfen, Details können durch Googeln gefunden werden. Oder betrügen Sie einen modernen Mikrocontroller als videoerzeugendes Subsystem.
@WoutervanOoijen: Der ZX81 verwendete einen ASIC zur Unterstützung der Videogenerierung, IIRC, und der ZX80 konnte nichts tun, während er eine stabile Anzeige aufrechterhielt. Es gab jedoch ein Buch Dirt Cheap Video Handbook, das einige clevere Ideen hatte. Es sollte ohne allzu viel Logik möglich sein, ein System zu bauen, das einen Interrupt verwendet, um die Anzeigeerzeugung zu starten, aber die CPU während des Vertical Blank und Retrace anderen Code ausführen lässt.
@WoutervanOoijen: Es ist schade, dass Schieberegister-Chips mit anständiger Größe nicht mehr verfügbar sind (die im Apple I verwendeten 1024-Bit-Schieberegister-Chips waren im Vergleich zu den Kosten von z. B. einem 7400 wahrscheinlich billiger als jeder Chip, der dienen könnte heute eine solche Funktion). Andernfalls würde das Hinzufügen einiger Schieberegisterchips wahrscheinlich dazu führen, dass der CPU-Overhead der Anzeigeverarbeitung erheblich gesenkt wird.

Antworten (4)

Aus diesem Grund gab es VGA-Displays erst lange nach dem Z80.

Blockgrafiken mit Sprites oder monochrome Grafiken mit 1 Bit pro Pixel oder auf Zeichen-ROM basierende Anzeigemodi waren an der Tagesordnung. Manchmal konnte man den Modus zwischen ihnen wechseln.

Unter Verwendung von Zeichen-ROMs lieferte der ASCII-Zeichencode den größten Teil der Adresse in das ROM, wobei (Scan Line Mod 10) 4 LSBs der Adresse bereitstellte. Sie haben also ASCII-Zeichencodes in einem kleinen (vielleicht 2 kByte) RAM gespeichert, und die Hardware des Videocontrollers hat eine Zeichenfolge von 80 aus diesem RAM gelesen (10 Mal hintereinander für 10 aufeinanderfolgende Abtastzeilen), um 80 Bytes (640 Bits) pro Zeile zu liefern .

Diese 80 Byte können aus einem 128-Byte-Abschnitt des 2K-RAM stammen, um die Videoadressierung zu vereinfachen. Ebenso stammen die 10 Abtastzeilen aus einem 16-Byte-Abschnitt des Zeichen-ROM, um die Adressierung zu vereinfachen. Mit einem geeigneten Design können Sie mit nur geringfügigen Änderungen an der Videohardware eine andere Zeichen-ROM-Seite mit 14 oder 16 Bytes pro Zeichen für eine hübschere Schriftart (und weniger Textzeilen auf dem Bildschirm!) auswählen.

Der 6845-Videocontroller war ein beliebtes Gerät, das mit dieser Art der Adressierung und einfachen Bitmap-Grafiken umgehen konnte. Es sollte immer noch einfach sein, viele Informationen darüber zu finden.

Vielleicht entscheiden Sie sich für ein serielles LCD-Display: -

serielles LCD

Ich habe das Bit rot eingekreist, das über die serielle Schnittstelle spricht. Dies ist nur eine Idee - es gibt viele LCDs, die passen könnten. Sie können den Z80 UART oder DART verwenden (wenn sie ihn noch herstellen und Ihre Informationen an das Modul senden.

Ich weiß, das ist eine alte Frage, aber ich mache eigentlich so ziemlich dasselbe. Ich entwerfe eine Konsole im Stil der 80er Jahre, die auf der Z80.

Wofür ich mich entschieden habe, ist der PropellerMikrocontroller von Parallax. https://www.parallax.com

Der Propeller (manchmal auch „Prop“ genannt) hat 8 Kerne, die gleichzeitig laufen. Jeder Kern ist in der Lage, NTSC/PAL- und VGA-Video mit wenig Programmierung anzuzeigen. Es ist ein sehr leistungsfähiger Chip, und obwohl ihm einige der integrierten Hardwarefunktionen von Atmel fehlen, gleicht er dies in den 8 Kernen mit jeweils 20 MIPS (160 MIPS) aus.

Außerdem ist die Community fantastisch und es wurden viele Audio-/Video-Emulatoren dafür geschrieben. Tatsächlich glaube ich, dass ein kompletter Z80 auf einem Kern laufen kann, sodass 7 andere andere Dinge wie Video und Audio erledigen können.

Ich kann sie nicht genug empfehlen. Besonders für alles, was mit VGA- oder NTSC/PAL-Video zu tun hat.

Was sagst du also, dass du nichts wie das OP machst, du machst einen Emulator? Was würden die anderen 7 Kerne aus dem Video machen? Klingt in diesem Fall etwas verschwenderisch. Und wie löst es das Problem mit der enormen Menge an Video-RAM des Z80?
@pipe Nein, das sage ich überhaupt nicht. Ich habe einfach empfohlen, den Propeller auszuprobieren, da er in VIELEN Homebrew-Computern für die Text- und Grafikausgabe verwendet wird. Und das OP ist mit der Mathematik ein wenig daneben, weil ein VGA (TEXTBASIERT) nicht so viel RAM benötigt. Vor allem, wenn Sie einen Terminaltreiber verwenden. Sie senden einfach Zeichen an den Propeller. Die 7 anderen Kerne werden nicht verschwendet, es sei denn, Sie verschwenden sie. Normalerweise werden sie für Steuerung, Audio usw. verwendet. Für 8 US-Dollar haben Sie einen Chip, der 2-4 verschiedene VGA-Signale wiedergeben kann, wenn Sie möchten. Kein schlechter Deal.
@pipe Schauen Sie sich dieses Beispiel eines Z80-basierten Computers an, der den Propeller verwendet, um VGA zu generieren und gleichzeitig Festplattenlaufwerke zu emulieren. shaels.net/index.php/mini80/mini80-general/119-mini8o-overview

Sie können etwas wie Tellymate , AVR VGA Generator , AVR-VGA oder Simple VGA/Video Adapter verwenden .