Ein Atmega328 steuert einen Z80-Computer

Themabewertung:
  • 2 Bewertung(en) - 5 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 741
Registriert seit: Apr 2014
Bewertung: 5
#61
22.07.2018, 15:17

Hallo zusammen,

nach stundenlangem Signal-Debugging und Austausch diverser Gatter wegen einiger Timingprobleme, sowie einer gründlichen Reinigung der Lötseite der Platine von irgendwelchen Lötlackresten, funktioniert der Rechner nun wieder. Der Z80Ardu tut, was er soll. Jetzt gibt es noch ein kleines Timingproblem mit der Graka. Dort werde ich auch noch eine Reinigung vornehmen und ein wenig mit den verbauten Gattern spielen. Aktuell funktioniert das Latch zur Steuerung der Grafikmodi und der aktiven Speicherseite für das Video-Ram noch nicht optimal..

Aber erste Erfolge sind da, siehe Bild

Gruß
Uni

[Bild: f5ce0c9c6e9a63c6f72d8b85cd60fda7.jpg]
-----

Klopapier beidseitig verwenden und der Erfolg liegt auf der Hand!
(Dieser Beitrag wurde zuletzt bearbeitet: 22.07.2018, 15:26 von Unilein.)
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 741
Registriert seit: Apr 2014
Bewertung: 5
#62
02.08.2018, 16:33

Ja Leute...

wenn man viel Zeit investiert um den Fehler zu finden, dann findet man ihn evtl. sogar. :-)

Zum Einen gab es ein paar Signalprobleme. Ich musste der Grafikkarte ein paar zusätzliche Pulldown-Widerstände verpassen um die Steuersignale für die Grafikmodi und die Speicherseiten zu stabilisieren. Da habe ich momentan einfach so gelöst, indem ich die Pulldowns auf die Rückseite der Platine gelötet habe. Nicht schön, funktioniert aber Big Grin

Danach hatte ich immer noch das Problem, dass die Einheit zwar anlief, aber dann scheinbar nix mehr tat. Ich habe sicher zwei Stunden lang mit dem Oszilloskop versucht herauszufinden, wo denn da das Problem liegt... Und dann kam ich auf den Trichter, dass ja auch mein Programm einen Fehler haben könnte. Zwar hat das Programm zu einem frühen Zeitpunkt mal funktionier, jedoch hatte ich es inzwischen "optimiert". Unter Anderem hatte ich den Stackpointer auf eine Adresse im RAM gesetzt. Tja... und genau da lag der Fehler. Ich weiß allerdings noch nicht, warum das so ist. Ich habe die Zeile aus meinem Programm gelöscht und siehe da: Es läuft!!

Sowohl der Z80Ardu als auch die Grafikkarte funktionieren, wie das beigefügte Video zeigt Big Grin

Grüße vom glücklichen Uni




(Dieser Beitrag wurde zuletzt bearbeitet: 02.08.2018, 16:34 von Unilein.)
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 741
Registriert seit: Apr 2014
Bewertung: 5
#63
04.08.2018, 10:33

Nächste Stufe...


Ich habe mich in den letzten Tagen wieder etwas intensiver mit meinem Projekt beschäftigen können. Ein paar kleinere Unzulänglichkeiten auf der Grafikkarte konnten mit einfachen Mitteln behoben werden. Ich fand gestern auf meiner Grafikkarte noch einen Pin, der leider nicht mit dem Datenbus verbunden war. Der hing frei in der Luft. Das führte zu flackern und unkontrolliertem Umschalten zwischen externem und internem Zeichensatz. Da aber die Möglichkeit, einen externen Zeichensatz zu nutzen momentan nicht umgesetzt ist, fehlt zum Glück nichts bei den implementierten Funktionen. Es war aufgrund des unklaren Signals lediglich Salat auf dem Schirm zu sehen. Ich habe den Pin jetzt einfach an Masse angeschlossen. Jetzt gibt es ein klares Signal und alles ist gut! Die Änderungen am Design sind auch schon im Schaltplan umgesetzt. Bei Gelegenheit werde ich noch einmal neue Platinen bestellen. Momentan ist das aber nicht nötig.

Jetzt, wo Grafikkarte und Z80Ardu endlich so funktionieren, wie es sein soll, muss die nächste Stufe in Angriff genommen werden. Es gibt ja noch 3 bis 4 weitere Komponenten, die ich gerne integrieren möchte:
  • Tastatur
  • Datenspeicher ("Festplatte")
  • Serielle Schnittstelle mit WLAN (ESP8266)
  • Soundkarte

Ich denke, es macht Sinn, zunächst das Thema "Tastatur" in Angriff zu nehmen. Damit wäre schon mal Kommunikation mit dem Menschen möglich :-). Die Tastaturschnittstelle werde ich mit einem ATTiny 2313 von Atmel verwirklichen. Ein passendes Programm habe ich schon entworfen. Es ist auf eine PS/2-Tastatur zugeschnitten, ließt den Scancode einer gedrückten Taste und übersetzt diesen in einen ASCII-Code. Der Plan ist, den Code auf Port B des ATTiny auszugeben und das Ergebnis mit einem Latch (74HCT573), einem Tranceiver (74HCT245) oder einem Buffer Line Driver (74HCT244) auf den Datenbus zu legen, wenn der Prozessor diesen Abfragt. Der Z80 muss sich natürlich um die Abfrage der Tastatur kümmern und die Bildschirmausgabe steuern... Aber erstmal Hardware entwickeln... :-)

Gruß
Uni
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 741
Registriert seit: Apr 2014
Bewertung: 5
#64
05.08.2018, 12:35

Und weiter im Text!

Ich habe leider keine AtTiny 2313 mehr vorrätig... Aber bestellt sind sie schon. Der Test der Tastaturschnittstelle muss somit ein wenig warten. Die Microcontroller werden wohl am Dienstag eintreffen. Ich habe da einen sehr zuverlässigen Händler aus Deutschland in der Bay. Der ist immer sehr flott und meistens auch nicht teuer.

Tja... Natürlich könnte ich jetzt damit beginnen, den "Festplattencontroller" zu bauen, jedoch will ich jetzt nicht wieder alle Module gleichzeitig beginnen. Das hat schon beim Z80Ardu und der Grafikkarte nicht funktioniert. Also warte ich damit noch ein wenig. Die Idee zum IDE-Controller entstammt im Übrigen dieser Seite: http://www.vaxman.de/projects/tiny_z80/

Was mache ich also alternativ? Ich werde mich um die Portierung des BASIC-Interpreters des VZ200/Laser 210-Computers, zu dem ich ein ROM-Listing vorliegen habe, kümmern. Einen relativ großen Teil des Listings habe ich bereits abgetippt (Ich schreibe es aus einem Buch ab, da ich keine Quelle im Internet gefunden habe, die ein fertiges Assembler-Listing anbietet). Ich werde da also heute mal weitermachen. Der BASIC-Interpreter des VZ200 ist im Übrigen in weiten Teilen mit dem des TRS-80 identisch. Ursprünglich wurde der Interpreter übrigens von Microsoft bzw. von Bill Gates für den Altair 8800 entwickelt. Das Programm hieß Altair BASIC. Der Altair 8800 hatte einen 8080-Prozessor. Der Z80 ist binär- bzw. abwärtskompatibel zum 8080. Daher laufen die Programme für den 8080 auch auf dem Z80.

Da der Z80Ardu ja einen Z80-Prozessor hat, und die Grafik, wie beim VZ200 über einen MC6847 ausgegeben wird, läuft der BASIC Interpreter prinzipiell auch auf dem Z80Ardu. Einige Veränderungen müssen dennoch vorgenommen werden, da der Hardwareaufbau des Z80Ardu ein wenig anders ist. Folgende Unterschiede sind vorhanden:


Z80 ArduVZ200
8 oder 10 MHz3,58 MHz
56 KB Speicher verfügbar1,2 - 32 KB verfügbar
Tastaturabfrage per MCDirekte Adressierung der Tastaturmatrix
Grafikeinheit extern, also austauschbarGrafikeinheit fest verbaut
8 Grafikmodi2 Grafikmodi
4 x 8192 Bytes Grafikspeicher2048 Bytes Grafikspeicher
Steuerung der Peripherie über I/O-PortsMemory-mapped I/O
Datenaustausch per IDE-Schnittstelle (wenn fertig entwickelt)Datenaustausch per Tape
Sound per Soundblasterchip (wenn fertig entwickelt)Sound über Piezolautsprecher

Es gibt natürlich noch weitere Unterschiede im Design, die spielen aber für das "Betriebssystem" keine Rolle. Die oben genannten Unterschiede aber schon. Die Tastaturabfragen müssen anders gestaltet werden. Die Grafikroutinen müssen die erweiterten Möglichkeiten berücksichtigen. Außerdem ist die Interruptsteuerung auch minimal erweitert (beim VZ200 gibt es keinen Non Maskable Interrupt [NMI], beim Z80Ardu schon).

Zum besseren Verständnis der Ausgangsbasis für mein Projekt, hängt an diesem Thread noch ein Bildchen mit dem Schaltplan des VZ200 mit ein paar Kommentaren drauf

Gruß
Uni

   
(Dieser Beitrag wurde zuletzt bearbeitet: 05.08.2018, 12:37 von Unilein.)
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 741
Registriert seit: Apr 2014
Bewertung: 5
#65
13.08.2018, 13:55

Hallo liebe Gemeinde,

inzwischen sind meine ATTiny 2313 eingetroffen. Ein wunderbarer, kleiner Microcontroller mit 2 KB Flash-Speicher und 128 Bytes SRAM (wie süß!!). Mit 10 MHz kommt der auch klar. Also klein aber fein!

Ich hatte für den ATTiny 2313 bereits ein passendes kleines Programm in Assembler. Ist gerade mal 300 Byte groß oder so. Das habe ich am Wochenende mal ein wenig angepasst und dann die dazu passende Schaltung aufgebaut (ATTiny, 2 Widerstände 100 KOhm als Pullup, AT-Tastatur bzw PS/2-Tastatur). Also nix wildes. Mit meinem Oszi habe ich dann geprüft, ob Signale IN den ATTiny gehen und ob welche RAUS kommen. Das hat soweit funktioniert. Ob die Signale allerdings verwertbar sind, wusste ich da noch nicht.

Nächster Schritt war, die Ausgangssignale mit dem Z80Ardu zu verbinden. Also 8 Bit Scancode auf den Datenbus des Z80. Dabei habe ich zunächst den IO-Request vom Z80 als Chipselect-Signal für den ATTiny genutzt. Außerdem habe ich ein kleines Z80-Programm geschrieben, welches den passenden IO-Port abfragt und die Daten entgegennimmt. Das Ergebnis war: EINE KATASTOPHE  Rolleyes . Die Datensignale störten den Datenbus derart, dass der ganze Z80Ardu den roten Faden verlor und abstürzte. Nach genauerem Studium der Timing-Struktur des sogenannten IO-Requests des Z80 wurde mir klar, dass ich außerdem auch auf /RD (Read) des Z80 acht geben muss. Beide Signale, also IO-Request und /RD, müssen LOW sein. Dann ist der Datenbus bereit, die Daten entgegen zu nehmen.

Also: einen weiteren Pin des ATTiny als /RD definiert und eine entsprechende Abfrage in das Tastatur-Programm des Tiny eingebaut. Gestern Abend habe ich das noch kurz getestet, es hat aber nicht funktioniert. Der Z80Ardu stürzt zwar nicht ab, die Abfrage funktioniert aber auch nicht. Mir ist dann gestern am späten Abend noch ein kleiner Fehler in meinem Z80-Programm aufgefallen, der aber durchaus eklatant ist. Das Programm soll Daten des ATTiny entgegen nehmen und das entgegen genommene Byte auf dem Schirm ausgeben. Eine fehlerhafte Abfrage führte dabei unter Umständen dazu, dass der Speicher überschrieben wurde. Den Fehler habe ich schon behoben, jedoch noch nicht wieder getestet.

Wenn ich das mit dem ATTiny einigermaßen stabil hin bekomme, werde ich den Tiny mit in das Platinendesign des Z80Ardu einbauen. So spare ich einen IO-Pin und einen kompletten Steckplatz. Den Tiny würde ich dann natürlich sockeln, damit ich ihn zwecks Programmumgestaltung ggf. rausnehmen kann um ihn zu programmieren.

Soviel erstmal zum Zwischenstand.

Grüße
Uni
(Dieser Beitrag wurde zuletzt bearbeitet: 03.10.2018, 16:06 von Unilein.)
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 741
Registriert seit: Apr 2014
Bewertung: 5
#66
03.10.2018, 16:27

Wirklich schön, wenn sich, auch nach längerer Abwesenheit, mal so gar nix verändert hat ;-)

Naja... Ich war zuletzt am 13.08. hier um zu berichten. Ist also ein paar Wochen her. Der Plan mit dem ATTiny 2313 ist nicht aufgegangen. Ich habe das Timing nicht auf die Reihe bekommen. Also wechsel zu ATTiny26 und ein anderes Programm. Ich weiß auf jedenfall, dass der ATTiny26 und mein Programm funktionieren. Eine angeschlossene Tastatur wird vom ATTiny ausgelesen und die Daten auf PORTA desselben ausgegeben. Im Programm des Tiny wird dann abgefragt, ob ein Chipselect-Pin ein Low-Signal bekommt. Nur dann werden die Daten auf den Datenbus gelegt.

Der ATTiny26 läuft lediglich mit 1 MHz. Das Programm zur Tastaturabfrage ist exakt auf 1 MHz abgestimmt. Da der Z80 aber mit 4 MHz läuft, gibt es wieder mal Probleme mit dem Timing. Die Scancodes der Tastatur kommen zur falschen Zeit auf den Bus. Was ich bislang auch probiert habe, ich habe es nicht geschafft, den Scancode vom Tiny zu übernehmen. Da muss also noch Hirnschmalz rein gesteckt werden.

Momentan geht mir aber gerade ein wenig die Lust aus, da offensichtlich niemand bei der Lösung des Problems helfen kann.

Nunja... Ich habe ein paar Tage frei. Ein paar Dinge werde ich noch probieren. Sollte ich zu keinem Erfolg kommen, lege ich das Projekt Z80Ardu vorerst beiseite.

Grüße
Uni
-----

Klopapier beidseitig verwenden und der Erfolg liegt auf der Hand!
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 741
Registriert seit: Apr 2014
Bewertung: 5
#67
06.10.2018, 16:31

Moin!

Gestern hab ich mich noch ein wenig mit dem Keyboard-Problem beschäftigt. Leider ohne Erfolg. Also habe ich das Thema mal beiseite gelegt und habe mir mal Gedanken über ein Soundmodul gemacht. Zunächst wollte ich dazu den YM3812 von Yamaha nutzen (Soundblaster-Chip). Doch als ich mich mit der Programmierung des Chips auseinander gesetzt hatte, war mir klar, dass das momentan vielleicht ein wenig oversized wäre. Deshalb habe ich mich auf meinen bereits am Arduino getesteten SN76489 besonnen.

Dieser Chip ist super einfach zu integrieren. 8 Datenleitungen, ein Chipselct-Signal und ein /Write Signal. Keine besonderen Register und recht einfach zu programmieren (Siehe alten Beitrag zum Chip).

Also habe ich den Chip gestern mal grob angeschlossen, einen kleinen Verstärker mit LM386 dazu gebaut und ein wenig herum gespielt. Das scheint soweit zu funktionieren. Keinerlei Störungen im normalen Z80Ardo-Betrieb. Aktuell schreibe ich ein kleines Maschinenprogramm, um den Chip anzusprechen und ein paar Töne zu entlocken. Video folgt...

Grüße
Uni
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 741
Registriert seit: Apr 2014
Bewertung: 5
#68
06.10.2018, 16:39

Achja....

weitere Informationen von der Z80Ardu-Front: Ich werde das Platinendesign ändern. Der Atmega und die Latches kommen von der Z80-Platine runter und werden auf eine eigene Platine gebannt. Warum? Das ist einfach. Heute lädt der Atmega ein Programm von der SD-Karte und überträgt es in den Speicherbaustein. Danach löst der Atmega am Z80 das /Reset-Signal auf und der Z80 rennt los. Leider lässt das Design heute nicht zu, dass nach dem Laden des Programms weitere Programme dazu geladen werden.

Ich möchte deshalb folgendes umsetzen: Auf der Atmega-Karte wird ein kleines EEPROM sein, welches so etwas wie einen Bootloader für den Z80 enthält. Der Bootloader soll dann Funktionen für den Zugriff auf ein IDE-Modul haben und dort dann so etwas wie ein Betriebssystem nachladen.

Auf der Prozessorkarte wird dann auch der Soundchip seinen Platz finden. Das spart einen I/O-Port und eine zusätzliche Karte. Und wenn ich es IRGENDWIE schaffe, dann auch das Keyboard-Modul....

Ok... Ich muss die Module noch entwerfen. Das wird sicher noch ein wenig dauern. Bis dahin wird mit dem, was schon existiert getestet.

Gruß
Uni
-----

Klopapier beidseitig verwenden und der Erfolg liegt auf der Hand!
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 741
Registriert seit: Apr 2014
Bewertung: 5
#69
19.10.2018, 18:14

Hallo zusammen,

ich habe das Tastaturproblem nicht lösen können. Auch der schnelle Versuch, den Soundchip 76489 einfach anzusprechen ist gescheitert.
Ich habe das Projekt vorerst eingestellt und stecke meine Freizeit für eine Weile in ein anderes Projekt: Dem Bau eines Spielautomaten im Stil der 80er.  
Ich habe alle Bauteile zum Bau eines NeoGeo SNK hier. Lediglich das Gehäuse fehlt noch.

   

Gruß
Uni
Zitieren
Unilein
Fachgebiet Rauchentwicklung
*******

Beiträge: 741
Registriert seit: Apr 2014
Bewertung: 5
#70
01.11.2018, 17:02

Möööp!

Ich kann es einfach nicht lassen. Hab die Arbeit dann doch wieder aufgenommen. Nebenbei läuft jetzt mein Automatenprojekt. Da warte ich aber sowieso noch auf Teile aus China, also kann ich mich wieder meinem Supercomputer widmen.

Ich habe inzwischen die IDE-Schnittstelle gebaut und versuche diese gerade zum Leben zu erwecken. Das ist allerdings nicht so einfach, da ich ja im Prinzip kein Betriebssystem fertig habe und auch keine Tastatur, mit der ich vielleicht Befehle eingeben könnte. Ich muss also nach jedem Programmtest und Fehlschlag die kleine SD-Karte neu beschreiben. Das ist ein wenig nervig. Zwar habe ich den Oshonsoft-Z80-Emulator (dazu gibt es hier im Forum einen Thread) im Einsatz, mit der ich die grundsätzliche Funktion meiner Programme testen kann, jedoch ist dort natürlich nicht die Hardware verfügbar, die ich in meinem Projekt verbaut habe. Ich kann also die Programmlogik einigermaßen testen, ob sie aber wirklich funktioniert, sehe ich erst am Z80Ardu.

Nunja... Also ich habe die IDE-Schnittstelle gebaut. Platinen wieder in China bestellt. Hatte dann erstmals ärger mit dem Zoll. Die beigefügte Rechnung wurde nicht aktzeptiert. Also Wertnachweis bereit stellen (Bestellung, Rechnung, Paypal-Beleg). Dann kamen meine Platinen auch (ich hatte per DHL Express bestellt). DHL hat das Päckchen mal wieder beliebig im Ort verteilt und kam dann am nächsten Tag vorbei um nachträglich Zollgebühren zu kassieren (Einfuhrumsatzsteuer). Tja, teuerer Spaß: Warenwert = 15 Euro, Frachtkosten = 25 Euro (weil DHL Express). Das macht einen Zollwert von 40 Euro. Dazu kamen dann Zollgebühren, Abfertigungskosten, Einfuhrumsatzsteuer: Nochmal 21,52 Euro!!. Ich habe meine Platinen also teuer bezahlt. Nächstes mal gehts wieder klassisch per Air Mail. Das kostet nur 7 Euro und wird am Ende, falls der Zoll schaut, nicht ganz so happig.

Ich hoffe jetzt, dass meine Platinen funktionieren.....


Jetzt noch einmal zu meinem Tastaturproblem: Neulich Nacht ist mir eingefallen, warum die Tastaturelektronik partou nicht auf die Signale des Prozessors reagieren will. Ich denke, es ist ganz einfach. Ich habe mich mit dem Datenport, mit dem die I/O-Leitung gesteuert wird, vertan. Ich hohle Nuss! Es könnte also sein, dass meine Bastelei durchaus funktioniert. Ich probiere das also noch einmal.

Weiteres dann, wenn ich den Mist wieder auf dem Breadboard habe und sie testen konnte.

Grüße
Uni

PS: Ich habe übrigens ein neues Z80Ardu Design entwickelt. Mit einem Soundchip, mit einer seriellen Schnittstelle und mit einem EEProm für den Bootloader.... Ja genau... Kein Arduino mehr. Der kommt aber dann auf eine extra Platine (meine Hoffnung ist allerdings, dass meine IDE-Schnittstelle funktioniert und ich Programme direkt von eine CF-Card lese. Der entsprechende Bootloader sitzt dann im EEProm.


PPS: Zwei Bildchen vom IDE-"Controller" anbei
   
   
(Dieser Beitrag wurde zuletzt bearbeitet: 01.11.2018, 22:22 von Unilein.)
Zitieren


Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste