{"id":85,"date":"2022-12-24T13:34:00","date_gmt":"2022-12-24T12:34:00","guid":{"rendered":"https:\/\/www.dev-tronic.de\/?p=85"},"modified":"2022-12-24T16:52:50","modified_gmt":"2022-12-24T15:52:50","slug":"z80ardu-displayadapter","status":"publish","type":"post","link":"https:\/\/www.dev-tronic.de\/?p=85","title":{"rendered":"Z80Ardu &#8211; Displayadapter (mit MC6847)"},"content":{"rendered":"\n<p>Parallel zum eigentlichen Z80Ardu-Rechner wollte ich so etwas wie eine Grafikkarte bauen. Basis f\u00fcr den Displayadapter sollte der MC6847 sein. Dieser Chip wurde in den 80ern h\u00e4ufig in Heimcomputern verwendet. Der Chip hat folgende Eckdaten:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Textmodus mit 16 Zeilen \u00e1 32 Zeichen<\/li>\n\n\n\n<li>Blockgrafik im Textmodus in 8 Farben<\/li>\n\n\n\n<li>Diverse Grafikmodi, max. 4 Farben, maximale Aufl\u00f6sung 256 x 192 Pixel<\/li>\n<\/ul>\n\n\n\n<p>Sicher handelt es sich um kein Grafikwunder. Aber daf\u00fcr ist dieser Chip recht einfach zu handhaben. Einzig das Timing f\u00fcr den Zugriff auf den Videospeicher durch den Prozessor kann eine Herausforderung werden, wenn man keine Bildst\u00f6rungen verursachen m\u00f6chte.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Zun\u00e4chst habe ich meine Idee mal auf ein Breadboard gesteckt. Auf der kleinen Zusatzplatine befindet sich der Signalverst\u00e4rker f\u00fcr die Composite-Signale:<\/p>\n\n\n\n<div class=\"wp-block-columns is-layout-flex wp-container-core-columns-is-layout-9d6595d7 wp-block-columns-is-layout-flex\">\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1008\" height=\"756\" src=\"https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2021\/01\/MC6847_Breadboard-rotated.jpg\" alt=\"\" class=\"wp-image-131\" srcset=\"https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2021\/01\/MC6847_Breadboard-rotated.jpg 1008w, https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2021\/01\/MC6847_Breadboard-300x225.jpg 300w, https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2021\/01\/MC6847_Breadboard-768x576.jpg 768w\" sizes=\"auto, (max-width: 1008px) 100vw, 1008px\" \/><figcaption class=\"wp-element-caption\">Die Breadboard-Grafikkarte<\/figcaption><\/figure>\n<\/div>\n\n\n\n<div class=\"wp-block-column is-layout-flow wp-block-column-is-layout-flow\">\n<figure class=\"wp-block-image size-large\"><img loading=\"lazy\" decoding=\"async\" width=\"1008\" height=\"756\" src=\"https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2021\/01\/MC6847_Erstes_Bild.jpg\" alt=\"\" class=\"wp-image-133\" srcset=\"https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2021\/01\/MC6847_Erstes_Bild.jpg 1008w, https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2021\/01\/MC6847_Erstes_Bild-300x225.jpg 300w, https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2021\/01\/MC6847_Erstes_Bild-768x576.jpg 768w\" sizes=\"auto, (max-width: 1008px) 100vw, 1008px\" \/><figcaption class=\"wp-element-caption\">Das Ergebnis (Schwarz-Wei\u00df)<\/figcaption><\/figure>\n<\/div>\n<\/div>\n\n\n\n<p>Nachdem die Breadboard-Version ja gut funktioniert hat, habe ich das Ganze als PCB bestellt und mir eine &#8222;Grafikkarte&#8220; 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.<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2021\/01\/Z80Ardu_Displayinterface.jpg\" alt=\"\" class=\"wp-image-138\" width=\"320\" srcset=\"https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2021\/01\/Z80Ardu_Displayinterface.jpg 745w, https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2021\/01\/Z80Ardu_Displayinterface-300x230.jpg 300w\" sizes=\"(max-width: 745px) 100vw, 745px\" \/><figcaption class=\"wp-element-caption\">Eine fr\u00fche Version der Grafikkarte. Inzwischen \u00fcberholt.<\/figcaption><\/figure>\n\n\n<p>Aktuell verf\u00fcgt die Karte \u00fcber 32 KB Videoram. Der MC6847 ben\u00f6tigt f\u00fcr die Darstellung der vollen Aufl\u00f6sung allerdings nur 6144 Bytes. Es w\u00fcrde also ein 8 KB Baustein vollkommen ausreichen. Die 32 KB werden auf der Karte jedoch in 4 B\u00e4nke aufgeteilt. Es k\u00f6nnen also 4 unabh\u00e4ngige Bildschirme aufgerufen werden. Die Umschaltung erfolgt \u00fcber ein Latch. Der Bildschirminhalt bleibt beim Umschalten nat\u00fcrlich erhalten.<\/p>\n\n\n<p><a href=\"https:\/\/www.dev-tronic.de\/wp-admin\/edit.php?post_type=post\"><\/a><\/p>\n\n\n\n<p style=\"font-size:14px\"><mark style=\"background-color:rgba(0, 0, 0, 0)\" class=\"has-inline-color has-accent-color\"><strong>\u00dcbrigens<\/strong>: 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, <\/mark>und wird vermutlich als Erweiterung irgendwann hier augef\u00fchrt.<\/p>\n\n\n\n<p><\/p>\n\n\n\n<p>Die aktuelle Version der Grafikkarte, wie ich sie zurzeit (Juni 2022) nutze, sieht wie folgt aus:<\/p>\n\n\n\n<figure class=\"wp-block-image size-large is-resized\"><img decoding=\"async\" src=\"https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2022\/06\/Z80Ardu_MC6847_Graka-1024x724.jpeg\" alt=\"\" class=\"wp-image-458\" width=\"640\" srcset=\"https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2022\/06\/Z80Ardu_MC6847_Graka-1024x724.jpeg 1024w, https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2022\/06\/Z80Ardu_MC6847_Graka-300x212.jpeg 300w, https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2022\/06\/Z80Ardu_MC6847_Graka-768x543.jpeg 768w, https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2022\/06\/Z80Ardu_MC6847_Graka-100x70.jpeg 100w, https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2022\/06\/Z80Ardu_MC6847_Graka-rotated.jpeg 1446w\" sizes=\"(max-width: 1024px) 100vw, 1024px\" \/><figcaption class=\"wp-element-caption\">Noch die &#8222;kurze&#8220; Version f\u00fcr die alte Basisplatine. Ohne externen Zeichensatz<\/figcaption><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<p><strong>\u00dcbrigens:<\/strong> Bei der Programmierung einiger Routinen zur Erzeugung von Grafik konnte ich feststellen, dass Daten nicht sauber \u00fcbertragen 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.<\/p>\n\n\n\n<p>Zugegeben, die Trennung des Adressbusses mit Widerst\u00e4nden ist eine g\u00fcnstige, aber nicht unbedingt eine gute L\u00f6sung. Eine neue Version ist schon in Arbeit (ebenfalls Juni 2022).<\/p>\n\n\n\n<p><strong>Dezember 2022<\/strong><\/p>\n\n\n\n<p>Im Dezember 2022 habe ich die Arbeit, die ich im Juni begann, fortgesetzt. Es ist eine neue, &#8222;lange&#8220; Version des Displayadapters entstanden. Die Ma\u00dfe wurden an die Gr\u00f6\u00dfe der Karte des Z80Ardu angepasst. Au\u00dferdem habe ich de Umstand Rechnung getragen, dass  die Trennung vom Adressbus mit Widerst\u00e4nden nicht optimal ist. Statt Widerst\u00e4nde zu nutzen, werden jetzt Bustranceiver (74HCT245) genutzt. Jetzt funktionieren meine Grafikroutinen prima. Es erscheinen keine Artefakte mehr.<\/p>\n\n\n\n<figure class=\"wp-block-image size-full\"><img loading=\"lazy\" decoding=\"async\" width=\"899\" height=\"500\" src=\"https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2022\/12\/Z80Ardu_GraKa_Fertig.png\" alt=\"\" class=\"wp-image-488\" srcset=\"https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2022\/12\/Z80Ardu_GraKa_Fertig.png 899w, https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2022\/12\/Z80Ardu_GraKa_Fertig-300x167.png 300w, https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2022\/12\/Z80Ardu_GraKa_Fertig-768x427.png 768w, https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2022\/12\/Z80Ardu_GraKa_Fertig-375x210.png 375w\" sizes=\"auto, (max-width: 899px) 100vw, 899px\" \/><\/figure>\n\n\n\n<p><strong>Download:<\/strong><\/p>\n\n\n\n<p>Die Datei enth\u00e4lt den Schaltplan in unterschiedlichen Formaten, die Gerberfiles f\u00fcr die PCB-Produktion und eine Bauteileliste. Die bereitgestellte Version ist die &#8222;kurze&#8220; Version, allerdings mit einem schmalen Videoram-Chip (300 mil) und ge\u00e4ndertem Layout. Das sollte funktionieren, da sich an der Schaltung an sich nichts ge\u00e4ndert hat (Ich habe die Version allerdings noch NICHT getestet). Die Karte ist ansonsten kompatibel mit der neuen Basisplatine und kann dort uneingeschr\u00e4nkt genutzt werden.<\/p>\n\n\n\n<div class=\"wp-block-file\"><a id=\"wp-block-file--media-67795007-3c1a-4f63-a97b-09cf24791201\" href=\"https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2022\/06\/Z80Ardu_Grafikkarte_MC6847.zip\">Z80Ardu_Grafikkarte_MC6847<\/a><a href=\"https:\/\/www.dev-tronic.de\/wp-content\/uploads\/2022\/06\/Z80Ardu_Grafikkarte_MC6847.zip\" class=\"wp-block-file__button wp-element-button\" download aria-describedby=\"wp-block-file--media-67795007-3c1a-4f63-a97b-09cf24791201\">Herunterladen<\/a><\/div>\n","protected":false},"excerpt":{"rendered":"<p>Parallel zum eigentlichen Z80Ardu-Rechner wollte ich so etwas wie eine Grafikkarte bauen. Basis f\u00fcr den Displayadapter sollte der MC6847 sein. Dieser Chip wurde in den 80ern h\u00e4ufig in Heimcomputern verwendet. Der Chip hat folgende Eckdaten: Sicher handelt es sich um kein Grafikwunder. Aber daf\u00fcr ist dieser Chip recht einfach zu handhaben. Einzig das Timing f\u00fcr den Zugriff auf den Videospeicher durch den Prozessor kann eine Herausforderung werden, wenn man keine Bildst\u00f6rungen verursachen m\u00f6chte. Zun\u00e4chst habe ich meine Idee mal auf<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[3],"tags":[18,16,17,11,10],"class_list":["post-85","post","type-post","status-publish","format-standard","hentry","category-z80ardu","tag-grafik","tag-mc6847","tag-vdc","tag-z80","tag-z80ardu"],"_links":{"self":[{"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/posts\/85","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=85"}],"version-history":[{"count":36,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/posts\/85\/revisions"}],"predecessor-version":[{"id":492,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=\/wp\/v2\/posts\/85\/revisions\/492"}],"wp:attachment":[{"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=85"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=85"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.dev-tronic.de\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=85"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}