Forum: Mikrocontroller und Digitale Elektronik eigenes Z80 Mainboard - geht das so?


von Svenska (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

ich entwickle gerade ein Z80-System. Mir ist klar, dass das antike 
Technik ist. Mit AVRs habe ich schon einiges gemacht, mit Z80 und 
74er-Logik nicht, außerdem ist das mein erstes Projekt mit Eagle. Die 
Realisierung soll auf Lochraster stattfinden. Im Anhang ist das 
Mainboard, wie ich mir das vorstelle.

Es gibt 8 Slots, wo die meisten Steuersignale dranhängen, außerdem 
besitzt jeder Slot 32 I/O-Adressen (je 256 Bytes mit A15-A8) und einen 
eigenen (Vektor-)Interrupt.

Slot 0 ist für einen ATmega328P reserviert, der eine serielle 
Schnittstelle und Timer bereitstellt sowie beim Start den Bootcode ins 
RAM kopiert. Slot 1 wird später MMU und RAM bekommen, alle anderen Slots 
sind für Peripherie vorgesehen.

Meine Frage an die, die das schon länger machen: Kann das so 
funktionieren? Was habe ich vergessen? Was ist pfui? Was ließe sich 
verbessern?

Gruß,
Svenska

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

M.E. kann das so funktionieren. Ich habe im Zilog Datenblatt nichts über 
die max. Last an den Adresspins des Z80 gefunden, wenn du dir mit dem 
Fan-Out des Z80 nicht so sicher bist, könntest du evtl. noch Bustreiber 
hinzufügen. Es hat einen Moment gedauert, ehe ich das mit den PCF8574 
kapiert habe, aber lt. NXP sind die Pins ja auch als Inputs zu 
gebrauchen, sollte also den Bus nicht stören. Für ein simples Board 
solltest du aber evtl. einfach noch eine PIO mit auf die Hauptplatine 
nehmen, damit du nicht für die simpelsten Tests schon eine Steckkarte 
brauchst. Die Verwendung von originaler Z80 Peripherie könnte übrigens 
Konflikte mit deiner IRQ Vektor Logik geben, check das nochmal.
Bei meinem TMS32C025 Projekt fungiert auch ein AVR als Board Controller, 
ich habe allerdings einem Mega32 genommen und mich für paralleles 
Schreiben und Lesen des RAM entschlossen, damit es ein wenig schneller 
geht. Auf dem Board habe ich gleich einen Audio ADC/DAC integriert, weil 
man sonst ja gar nichts machen könnte.

von (prx) A. K. (prx)


Lesenswert?

Schaltplan problematisch, weil zu viele Leitungen unbeschriftet.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Ach, wie wäre es mit ein wenig RAM? Wie oben schon erwähnt, kann man ja 
sonst gar nichts im Grundzustand des Boards machen.

von Stephan S. (Gast)


Lesenswert?

Matthias Sch. schrieb:
> Ach, wie wäre es mit ein wenig RAM?

In die Slots stecken?

von Svenska (Gast)


Lesenswert?

Hallo,

> Für ein simples Board solltest du aber evtl. einfach noch eine PIO
> mit auf die Hauptplatine nehmen, damit du nicht für die simpelsten
> Tests schon eine Steckkarte brauchst.
> Die Verwendung von originaler Z80 Peripherie könnte übrigens
> Konflikte mit deiner IRQ Vektor Logik geben, check das nochmal.

Außer dem Z80 habe ich nur noch die CTC in meiner Kiste liegen, PIO und 
SIO leider nicht. Deswegen ja der AVR als Universalgerät. Da der 
Direktzugriff auf den Bus hat (und den Z80 taktet), sollte ich mit dem 
auch testen können - hoffe ich.

> Bei meinem TMS32C025 Projekt fungiert auch ein AVR als Board Controller,
> ich habe allerdings einem Mega32 genommen und mich für paralleles
> Schreiben und Lesen des RAM entschlossen, damit es ein wenig schneller
> geht.

Ich hatte auch überlegt, einen AVR mit XMEM-Interface zu benutzen und an 
den Bus zu hängen, aber dann hätten mir die Pins an anderer Stelle 
gefehlt. DIP40 ist halt das Größte. :-(

Aber danke für deinen Beitrag!

A. K. schrieb:
> Schaltplan nutzlos, weil Leitungen unbeschriftet.

Beschriftet ist eigentlich alles bis auf A15-A0 und D7-D0 - entweder an 
der Leitung selbst oder am IC. Um was geht es dir denn genau? Wie 
gesagt, ist mein erstes Mal mit Eagle.

Gruß,
Svenska

von Svenska (Gast)


Lesenswert?

> Ach, wie wäre es mit ein wenig RAM? Wie oben schon erwähnt, kann
> man ja sonst gar nichts im Grundzustand des Boards machen.

Echtes RAM ist eh überbewertet, das kann der AVR gleich mit erledigen. 
;-)

MMU und RAM sollen später in Slot 1 gesteckt werden, aber da konnte ich 
die passenden Bauteile (74LS189) nicht auftreiben und muss mir erstmal 
was neues einfallen lassen.

von Reinhard Kern (Gast)


Lesenswert?

Hallo,

du musst dir schon drüber klar sein, dass der Z80 ausser der CPU absolut 
NICHTS enthält - keinen Programmspeicher, kein bisschen RAM für einen 
Stack, keinen Timer, kein UART, und Reset und Clk braucht er auch von 
aussen - das müsstest du alles dazustecken, damit überhaupt etwas 
funktioniert.

Ein Z80 ohne Reset und Clk-Versorgung ist aber meiner Meinung nach 
schlicht ein Kunstfehler.

Gruss Reinhard

von Svenska (Gast)


Lesenswert?

> du musst dir schon drüber klar sein, dass der Z80 ausser der CPU absolut
> NICHTS enthält - keinen Programmspeicher, kein bisschen RAM für einen
> Stack, keinen Timer, kein UART, und Reset und Clk braucht er auch von
> aussen - das müsstest du alles dazustecken, damit überhaupt etwas
> funktioniert.

Der AVR hängt einmal direkt am Speicherbus (/MREQ, /BUSREQ, /BUSACK), 
kann also beim Start den Code direkt in den RAM kopieren (und zum Testen 
erstmal RAM simulieren) - andererseits hängt er auch am I/O-Bus und kann 
damit Timer und UART bereitstellen.
Die Forensuche hat auch einige Beispiele auf Z80-Basis ohne RAM 
geliefert, zum Testen sollte das erstmal ausreichen.

> Ein Z80 ohne Reset und Clk-Versorgung ist aber meiner Meinung nach
> schlicht ein Kunstfehler.

Beides wird vom AVR generiert (Clk hängt an OC0B), so dass ich den Z80 
auch dynamisch langsamer takten und vernünftig resetten kann.

von Helmut L. (helmi1)


Lesenswert?

Svenska schrieb:
> Da der
> Direktzugriff auf den Bus hat (und den Z80 taktet), sollte ich mit dem
> auch testen können - hoffe ich.

Dir ist bewust das der Z80 einen unteren Grenzwert fuer den Takt hat?
Diesen alten NMOS Bausteine haben dynamische Register, die brauchen 
deshalb einen minimum Takt damit die Kondensatoren in den Registern 
aufgefrischt werden. Auch ist der Clockeingang nicht ganz TTL kompatibel 
da gibt es bestimmte Anforderung an Pegel und Flankensteilheit.

Svenska schrieb:
> Echtes RAM ist eh überbewertet, das kann der AVR gleich mit erledigen.

Wenn du meinst, das jetzt ueber Klimmzuege vom AVR bereitstellen zu 
lassen halte ich fuer keine gute Idee. Das sind wieder ein paar 
Fehlerquellen mehr. Wenn man am Z80 jetzt ein 128 KByte RAM anschliesst 
fuer ein paar Euro ist die ganze Sache wesentlich entspannter und ist 
schon mehr als der Z80 von Hause aus addressieren kann.

von Helmut L. (helmi1)


Lesenswert?

Svenska schrieb:
> Die Forensuche hat auch einige Beispiele auf Z80-Basis ohne RAM
> geliefert, zum Testen sollte das erstmal ausreichen.

Elektor hatte mal so ein Sadomaso Board in den 90er "designt". Glaube es 
mir das ist dann der letzte Krampf. Kein ernstzunehmendes Board kommt 
ohne RAM aus.

von Holm T. (Gast)


Lesenswert?

Svenska schrieb:
> Hallo,
>
>> Für ein simples Board solltest du aber evtl. einfach noch eine PIO
>> mit auf die Hauptplatine nehmen, damit du nicht für die simpelsten
>> Tests schon eine Steckkarte brauchst.
>> Die Verwendung von originaler Z80 Peripherie könnte übrigens
>> Konflikte mit deiner IRQ Vektor Logik geben, check das nochmal.
>
> Außer dem Z80 habe ich nur noch die CTC in meiner Kiste liegen, PIO und
> SIO leider nicht. Deswegen ja der AVR als Universalgerät. Da der
> Direktzugriff auf den Bus hat (und den Z80 taktet), sollte ich mit dem
> auch testen können - hoffe ich.


Mach mir mal eine Mehl :-)
Ich kann deinen Bestand etwas aufstocken, ich habe das Zeuch mal 
Tütenweise geerbt..
>
>> Bei meinem TMS32C025 Projekt fungiert auch ein AVR als Board Controller,
>> ich habe allerdings einem Mega32 genommen und mich für paralleles
>> Schreiben und Lesen des RAM entschlossen, damit es ein wenig schneller
>> geht.A

Hmm, interessant. Ich habe einen U320C20, einen DDR TI Signalprozessor
den ich mal anwerfen wollte. Wo kann man was über dieses Projekt lesen?

Gruß,

Holm

von Jürgen S. (Firma: privat) (jschmied)


Lesenswert?

Also mein Z80 lief damals ~1985 auch noch mit ca. 5 Hz. Da konnte man 
den Bits noch zusehen. Ich hatte an allen Leitungen LED's. Anhalten kann 
man ja beliebig lange mit den HALT Eingang. Das RAM habe ich anfangs mit 
Schaltern simuliert und immer nur einen Befehl freigegeben. Man ist das 
lange her ;)

von hilmar (Gast)


Lesenswert?

> Dir ist bewust das der Z80 einen unteren Grenzwert fuer den Takt hat?

Ich habe vor vielen Jahren etliche Z80-Rechner gebaut. Die langsamsten 
waren da mit (ich glaube) 100kHz Taktfrequenz. Welche untere Grenze 
kennst du?
Ich glaube mich auch zu erinnern, da es zu Ausbildungszwecken auch 
Rechner gab, die man im Einzelschritt-Modus (Takt von einem Taster mit 
Entprellung) betreiben konnte. Und dann Daten- und Adressbus über LED's 
anschauen konnte.

Weißt du das genau mit der minimalen Taktfrequenz?

von Helmut L. (helmi1)


Lesenswert?

hilmar schrieb:
> Weißt du das genau mit der minimalen Taktfrequenz?

http://datasheets.chipdb.org/Mostek/3880.pdf

Seite 80 Clock min/max.

Jürgen Schmied schrieb:
> Also mein Z80 lief damals ~1985 auch noch mit ca. 5 Hz.

Kann sein, muss aber nicht. Der Hersteller spezifiziert es nicht.

von Jürgen S. (Firma: privat) (jschmied)


Lesenswert?

Da wurde per WAIT Eingang immer angehalten. (Siehe Google Books "Build 
Your Own Z80 Computer: Design Guidelines and Application Notes" Seite 
95)

von Svenska (Gast)


Lesenswert?

Hallo,

> Dir ist bewust das der Z80 einen unteren Grenzwert fuer den Takt hat?

Mein Datenblatt meint: "Although static by design, testing guarantees 
tw(phiH) of 200 µsec maximum.", solange ich Clk auf HIGH halte. Bei 
Clk=LOW verliert er seine Daten nach 2 µs. Ansonsten sind 500 Hz langsam 
genug, dass der AVR den Bus in Software nachbilden kann. In der Uni 
haben wir einen Z80 auch mal per Taster taktweise betrieben.

Später werde ich eine reale Mindestfrequenz von einigen kHz haben, um 
den DRAM-Refresh zu garantieren.

> Auch ist der Clockeingang nicht ganz TTL kompatibel
> da gibt es bestimmte Anforderung an Pegel und Flankensteilheit.

30 nsec rise/fall time sollte ein AVR ausgeben können - habe ich jetzt 
aber nicht nachgeschlagen. Die Pegel liegen zwischen -0.3 und +0.45 V 
(low) und +4.8 und +5 V (high), sollte auch kein Problem sein.

>> Echtes RAM ist eh überbewertet, das kann der AVR gleich mit erledigen.
> Wenn du meinst, das jetzt ueber Klimmzuege vom AVR bereitstellen zu
> lassen halte ich fuer keine gute Idee.

Zum Testen reicht es, RAM kommt aber auf jeden Fall dazu (siehe 
Eingangsposting).

von hilmar (Gast)


Angehängte Dateien:

Lesenswert?

Hier ist eine Z80-Minimalschaltung, die mit 28Hz (!) läuft:
http://www.z80.info/z80test0.htm

Ich habe aber auch gelesen, daß es unterschiedliche Varianten des Z80 
gab, und zwar NMOS und CMOS. Man ist der Meinung, CMOS kann statischen 
Betrieb und NMOS nicht.

im Bild hab ich mal noch einen Ausschnitt eine Datenblattes, da steht 
bei "Clock Cycle Time" unter MAX überall "DC".

Scheint also doch zu gehen...

von Helmut L. (helmi1)


Lesenswert?

hilmar schrieb:
> Scheint also doch zu gehen...

Yepp, bei CMOS ist das auch korrekt, aber in seinem Plan steht Z80A und 
das ist die NMOS Version. Was er in seinem Board jetzt wirklich einbaut? 
Wer weist das schon ausser ihn selbst.

Die meisten CPU aus dieser Zeit 8080,8085,6800 hatten eine unter Grenze 
beim Takt. Erst bei den CMOS Versionen wurde das anders.

von Svenska (Gast)


Lesenswert?

Ich verbaue die NMOS-Version, also einen echten Z80A. Aus dessen 
Datenblatt habe ich auch zitiert. Ehrlich gesagt, wenn ich eine minimale 
Taktfrequenz von ein paar kHz habe, ist mir das auch egal - da kommt 
DRAM rein, den der Z80 refreshen muss.

von Helmut L. (helmi1)


Lesenswert?

Svenska schrieb:
> Ehrlich gesagt, wenn ich eine minimale
> Taktfrequenz von ein paar kHz habe, ist mir das auch egal - da kommt
> DRAM rein, den der Z80 refreshen muss.

Ist ja Ok, ich wollte dich nur darauf hinweisen. Schaffst du dann aber 
auch die 4Mhz die das Teil kann?

von Svenska (Gast)


Lesenswert?

> Ist ja Ok, ich wollte dich nur darauf hinweisen. Schaffst du dann aber
> auch die 4Mhz die das Teil kann?

Das ist mein Ziel. :-)

Der AVR wird mit 16 MHz getaktet, kann also mit Timer 0 Taktfrequenzen 
bis 8 MHz erzeugen. Der SRAM für die MMU ist ein 20ns-Typ (alter Cache), 
die DRAMs sind 80ns-Typen - ich habe mindestens 250ns Zeit, um ohne 
Waitstates zu reagieren. Für I/O-Zugriffe benutze ich /WAIT, weil der 
AVR nicht schnell genug auf /SEL (bzw. /IORQ) reagieren kann.

von MCUA (Gast)


Lesenswert?

>Mir ist klar, dass das antike Technik ist.
Die Bus-Slots und viele Teile der Platinen können universell, und damit 
unabhängig vom Z80 gemacht werden. So dass man auch andere CPUs nehmen 
könnte.
Um aufm Bus rel. schnell zu sein, wären 24mA-Driver erforderlich (oder 
mehr, s.a. ABT-, BCT-Serie, oder auch PLD), das kann der Z80 (odere 
andere uCs/CPUs) so mit Sicherheit nicht. Nehm einfach ein paar '245er.

von eProfi (Gast)


Lesenswert?

Hast Du darüber nachgedacht, einen "moderneren" Z80 zu verwenden:
Hitachi HD64180 / HD64780 oder was vergleichbares von Toshiba?

von Svenska (Gast)


Lesenswert?

> Nehm einfach ein paar '245er.
Ich werde Platz dafür lassen und sie nachrüsten, falls nötig. Zu 
schwache integrierte Treiber begrenzen eigentlich nur die 
Geschwindigkeit, oder?

> Hast Du darüber nachgedacht, einen "moderneren" Z80 zu verwenden:
Nicht wirklich. Ich habe in meiner Bastelkiste den Z80A und ein paar 
256x4 DRAM gefunden und wollte die nicht vergammeln lassen.

von Holm T. (Gast)


Lesenswert?

Der originale NMOS Z80 als auch der DDR U880 haben dynamische RAMs als 
Register. Die können ihre Daten bei 5Hz halten, müssen aber nicht.
Die CMOS Versionen haben vollstatische Register und verlieren deshalb 
ihre Registerinhalte nicht.

Gruß,

Holm

von Reinhard Kern (Gast)


Lesenswert?

eProfi schrieb:
> Hast Du darüber nachgedacht, einen "moderneren" Z80 zu verwenden:
> Hitachi HD64180 / HD64780 oder was vergleichbares von Toshiba?

Die sind aber heute sehr viel schlechter aufzutreiben als Original Z80.

Gruss Reinhard

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Du willst dir also auch noch eine Refresh Logik und DRAM antun? 
Donnerwetter, das klingt nach einer Menge Arbeit.

Holm Tiffe schrieb:
> Hmm, interessant. Ich habe einen U320C20, einen DDR TI Signalprozessor
> den ich mal anwerfen wollte. Wo kann man was über dieses Projekt lesen?

Nirgends, weil ich nie was drüber veröffenlicht habe. Ist im Prinzip 
auch nur der TI DSP mit 40MHz, 2 Stück 128kbyte*8 Static RAM und eine 
Ansammlung von Tristate Bustreibern (245) und -Latches(374), die dem 
Mega32 Zugriff auf den 16 Bit RAM Adress- und Datenbus geben. Ausserdem 
kann der Mega den DSP resetten und ihn dazu zwingen, den Bus 
freizugeben, ähnlich wie hier beim Z80 Board.
Ausserdem ist noch ein 16-bit AD1848 ADC/DAC von einer ISA Soundkarte 
drauf, damit man den DSP benutzen kann, der liegt per I/O Mapping auf 
dem TI Bus.
Der Mega hat einen MiniAssembler/Debugger und ein IntelHex Interpreter 
und wird über die UART bedient.

von Frank K. (fchk)


Lesenswert?

Reinhard Kern schrieb:
> eProfi schrieb:
>> Hast Du darüber nachgedacht, einen "moderneren" Z80 zu verwenden:
>> Hitachi HD64180 / HD64780 oder was vergleichbares von Toshiba?
>
> Die sind aber heute sehr viel schlechter aufzutreiben als Original Z80.

Moderne Z80 gibts auch von Zilog. Und die sind gar nicht mal so übel.

http://www.zilog.com/index.php?option=com_product&task=product&businessLine=1&id=77&parent_id=77&Itemid=57

fchk

von Frank K. (fchk)


Lesenswert?

Svenska schrieb:

> 256x4 DRAM gefunden und wollte die nicht vergammeln lassen.

Ich hoffe wenigstens, das sind 256k*4.

fchk

von Frank K. (fchk)


Lesenswert?

Svenska schrieb:

> Meine Frage an die, die das schon länger machen: Kann das so
> funktionieren? Was habe ich vergessen? Was ist pfui? Was ließe sich
> verbessern?

Den 8574 würde ich nicht verwenden, der kann nur nach low treiben und 
hat schwache Pullups. Nimm besser den Microchip MCP23017. Der kann 
wesentlich mehr, z.B. hat er eine manuelle Richtungsumschaltung und 
echte Push-Pull-Treiber, die 20mA sowohl nach VCC als auch nach Ground 
treiben können. Zudem hat er zwei 8 Bit Ports, d.h. Du brauchst nur zwei 
von diesen Bausteinen.

DRAM würde ich nicht als Steckkarte ausführen, sondern mit auf die 
Hauptplatine setzen, und zwar dicht an den Prozessor. Denke auch daran, 
dass das DRAM refreshed werden muss, während Du mit dem AVR zugreifst. 
Sonst ist der Speicherinhalt weg. Für den ersten Wurf würde ich mich mit 
DRAM nicht belasten wollen und einfach zu SRAM greifen. Du musst nämlich 
dem Z80 DRAM Controller erst sagen, dass und mit welchen Parametern er 
DRAM zu refreshen hat. Üblicherweise ist das kein Problem, weil der 
Startup-Code normal in einem ROM liegt. Bei Dir könnte es ein Problem 
werden. Daher der dringende Rat: vergiss die DRAM-Bausteine, die Du noch 
rumfliegen hast. Die 1.35€ für ein 32k*8 SRAM oder die 1.95€ für ein 
128k*8 SRAM wirst Du ja wohl noch haben. Pack das mit auf die 
Hauptplatine, und gut ist.

fchk

von Svenska (Gast)


Lesenswert?

Hallo,

> Ich hoffe wenigstens, das sind 256k*4.

Ja, und CAS-before-RAS-Refresh können sie auch.

> Du willst dir also auch noch eine Refresh Logik und DRAM antun?
> Donnerwetter, das klingt nach einer Menge Arbeit.

Die Refresh-Logik ist recht einfach, ein 74LS14 (Hex-Schmitt-Inverter) 
und 2 RC-Schaltungen für die Verzögerung und das Multiplex-Signal. /MREQ 
ist /RAS, verzögert dann /CAS und bei aktivem Refresh dann umgekehrt. 
Damit brauche ich "nur" noch 4x 74LS157.

Das Design habe ich fertig, werde ich aber zu gegebener Zeit nochmal zur 
Schau stellen. Die MMU ist jetzt das größere Problem, weil der SRAM 
keine getrennten DIx/DOx hat. Außerdem muss ich mir da noch ein paar 
Bausteine kaufen.

> Den 8574 würde ich nicht verwenden, der kann nur nach low treiben und
> hat schwache Pullups.

Das ist Absicht, denn die schwachen Pullups funktionieren hier als 
halben Tristate. Wenn ich die auf HIGH schalte, kriege ich keine 
Kurzschlüsse auf dem Datenbus.

> DRAM würde ich nicht als Steckkarte ausführen, sondern mit auf die
> Hauptplatine setzen, und zwar dicht an den Prozessor.

Geht nicht. Für MMU und DRAM brauche ich nochmal ca. 13 ICs, die auf 
meinen Lochrasterplatinen keinen Platz mehr haben. Ich muss mal schauen, 
ob die Treiber das schnell genug hinkriegen, sonst spendiere ich 
Bustreiber.

> Denke auch daran, dass das DRAM refreshed werden muss, während Du mit
> dem AVR zugreifst. Sonst ist der Speicherinhalt weg.

Der AVR soll nur beim Kaltstart einmalig etwa 4 KB in den RAM schreiben, 
danach wird er nur noch über I/O-Zugriffe angesprochen. Das passt schon.

> Du musst nämlich dem Z80 DRAM Controller erst sagen, dass und mit
> welchen Parametern er DRAM zu refreshen hat.

Welcher DRAM Controller? :-)
Der Z80 aktiviert nach jedem Instruction Fetch /RFSH und /MREQ und legt 
zusätzlich eine (für mich) überflüssige Adresse auf den Bus, auch bei 
aktivem /HALT. Die Befehlsdekodierung dauert lange genug, so dass man 
den Refresh darin verstecken kann, es kostet also keine 
Speicherbandbreite.

Gruß,
Svenska

von Michael_ (Gast)


Lesenswert?

Svenska schrieb:
> Ich habe in meiner Bastelkiste den Z80A und ein paar
> 256x4 DRAM gefunden und wollte die nicht vergammeln lassen.

Ob die passen? Die DRAM für den Z80 müssen einen 8-Bit-Refresh haben.
Oder haben deine DRAM einen eigenen Refresh-Generator?
Die ...X4 hatten fast alle einen 7-Bit-Refresh.
Nimm SRAM.

von Svenska (Gast)


Lesenswert?

Die DRAMs unterstützen CBR-Refresh, den nutze ich.

von (prx) A. K. (prx)


Lesenswert?

Holm Tiffe schrieb:
> Der originale NMOS Z80 als auch der DDR U880 haben dynamische RAMs als
> Register.

Was ist am oben zitierten "static by design" aus dem Datasheet vom NMOS 
Zilog Z80 so schwer zu verstehen?

von Harry L. (mysth)


Lesenswert?

Ich hab noch einiges an Z80-Peripherie-Bausteinen in meiner Bastelkiste.
Wenn du noch was brauchst, lass es mich wissen...vergammelt hier sonst 
nur.

p.s. bei der Anzahl deiner Slots würde ich unbedingt Bus-Treiber 
einbauen!

von Dieter Werner (Gast)


Lesenswert?

Was soll denn mit der MMU erreicht werden?

Nur um mehr als 64k zu adressieren tut es auch ein primitives 
Bankselect.

Auf meiner alten CPM Maschine hatte ich 3 tristate Bankports von denen 
einer bei instruction fetch, einer bei data read und einer bei data 
write auf die 4 Bit Bankadressierung geschaltet wurde.

Mit dem DMA Baustein war dann sogar Bank zu Bank Transfer möglich.

von Svenska (Gast)


Lesenswert?

Die MMU soll den 64 KB Speicheradressraum in 4 KB-Blöcken auf den real 
verbauten Speicher abbilden, also nur Bankswitching machen. Geplant ist 
aber, gleichzeitig 32 Mappings in der MMU zu halten, um schnell zwischen 
Tasks umschalten zu können.

Wobei mir die Idee, für Befehle und Daten unterschiedliche Mappings 
anzubieten, sehr gut gefällt... hmm, da denk ich nochmal drüber nach. 
Danke für die Idee. Aber erstmal muss ich das Mainboard bauen.

DMA habe ich, außer für den AVR, nicht vorgesehen.

von Frank K. (fchk)


Lesenswert?

Hast Du schon mal darüber nachgedacht, Dein Gattergrab durch zB XC9536 
oder XC9572 CPLDs zu reduzieren? Die gibts auch im 44 und 84 Pin PLCC, 
und mit den passenden Sockeln sind die auch lochrastergeeignet. Früher 
hat man PALs und GALs genommen, aber die gibts ja nicht mehr.

fchk

von (prx) A. K. (prx)


Lesenswert?

16kB Banks sind einfach implementiert: 4x4 dual-port RAM 74HC670.

Apropos I/D Trennung: Wie kann man die unterscheiden? Hab grad kein 
Datasheet parat. M1 zeigt ja nur das erste Byte an.

von Svenska (Gast)


Lesenswert?

Hallo,

> Hast Du schon mal darüber nachgedacht, Dein Gattergrab durch zB
> XC9536 oder XC9572 CPLDs zu reduzieren?

das Gattergrab ist Absicht, noch eine Baustelle mehr wollte ich nicht 
haben.

> 16kB Banks sind einfach implementiert: 4x4 dual-port RAM 74HC670.

Ich hätte schon gerne 4 KB-Banks. Meine jetzige Planung hat noch 74LS189 
drin, aber die gabs beim Händler des Vertrauens nicht mehr und darum 
kommt da jetzt SRAM rein. Hat den Vorteil, dass ich für Task- (bzw. 
Kontext-)wechsel nicht die gesamte MMU neu beschreiben muss.

> Apropos I/D Trennung: Wie kann man die unterscheiden? Hab grad kein
> Datasheet parat. M1 zeigt ja nur das erste Byte an.

Das ist mir auch aufgefallen. Immediates liegen immer direkt hinter dem 
Befehl, damit bringt Auslagern nichts und um Immediates von anderen 
Daten zu unterscheiden, müsste man den Befehlssatz teilweise 
ausdekodieren. Werde ich also nicht machen.

Eine gute Idee für getrenntes I&D war es aber. :-)

Gruß,
Svenska

von Soul E. (Gast)


Lesenswert?

Falls jemand eine Leiterplatte mit Z80A CPU, DMA, PIO, DART, CTC, 62256 
und 27256 haben möchte, möge er sich per pn melden.

Ich habe keinerlei Unterlagen zu dem Ding, das Kernsystem mit RAM, ROM 
und CPU müsste sich aber mit vertretbarem Aufwand in Gang setzen lassen.

von Wilhelm F. (Gast)


Lesenswert?

Svenska schrieb:

> In der Uni
> haben wir einen Z80 auch mal per Taster taktweise betrieben.

Kann es sein, daß das ein Software-Single-Step war? Sowas hab ich hier 
an einem 8085, der ja Ähnlichkeiten mit dem Z80 hat. Jede 
Tastenbetätigung an einem externen Interrupt löst einen Interrupt aus, 
der nach Loslassen wieder verlassen wird, und erneut ausgelöst wird. 
Dann läuft das Hauptprogramm nur einen einzigen Befehl weiter. Man kann 
dann z.B. den Programmzähler an einer Stelle ausgeben, und schauen, wie 
er mit jedem Tastendruck einen Schritt weiter läuft. Der Prozessor läuft 
aber in Wirklichkeit full speed, wird halt nur ständig in dem 
Single-Step-Interrupt fest gehalten.



Helmut Lenzen schrieb:

> Die meisten CPU aus dieser Zeit 8080,8085,6800 hatten eine unter Grenze
> beim Takt. Erst bei den CMOS Versionen wurde das anders.

Nicht unbedingt. Die CMOS-Versionen des 8051, das ist ja auch ein 
8-Bitter aus der Zeit von 8085 und Z80, und auch der Siemens SAB80C517 
haben eine Untergrenze von 3,5MHz laut Datenblättern. Grund ist, daß 
einige interne Register wie Flipflops dort dynamisch sind, also auch bei 
den CMOS-Versionen. Irgendwo entnahm ich mal, daß man damit Chipfläche 
spart. Hier sind nicht die bekannten Register wie internes RAM gemeint, 
sondern eher nicht sichtbare Zwischenregister für interne Operationen. 
Ich betrieb sie aber auch schon mit sehr viel niedrigeren Frequenzen, 
nur ist da die einwandfreie Funktion eben nicht mehr garantiert.



Ansonsten kann man einen 8085 tatsächlich ohne externes RAM betreiben, 
wenn man mit den sieben internen Registern aus kommt. Man hat dann, wie 
schon genannt wurde, keinen Stack, und muß sein Programm als 
Spaghettiprogramm gestalten, also ohne Unterprogramme. Am Ende muß man 
mit einem Jump wieder an den Anfang springen, das braucht ja auch keinen 
Stack. Das minimalste System nur mit externem EPROM alleine probierte 
ich selbst mal. Immerhin hat der 8085 einen einzigen Output-Pin (SOD), 
an den man direkt eine LED anklemmen kann.

Ansonsten können diese Bausteine einen 16 bit breiten Stack mit z.B. 32k 
RAM haben, und es ist dann schön, auch mit dem Stack zu arbeiten. Also 
mal eine richtige rekursive Funktion gestalten.



soul eye schrieb:

> Ich habe keinerlei Unterlagen zu dem Ding, das Kernsystem mit RAM, ROM
> und CPU müsste sich aber mit vertretbarem Aufwand in Gang setzen lassen.

Womöglich noch eine einseitig beschichtete Platine. Dann ist es wirklich 
keine Kunst. Ich selbst ermittelte an einem alten geerbten Board aus der 
FH mit 80515 kürzlich auch noch alle Adreßräume zu Fuß, das Ding hat 
eine Menge externe Bausteine mit Adreßdekoder und ein paar Gattern am 
Bus. Das Board war zweilagig, das geht auch noch ganz passabel.

Die Fachschaft wollte es in einer Aufräumaktion gerade in den Müll 
werfen, und Doku gab es gar keine. Semester vor meiner Zeit arbeiteten 
damit.

Mein eigener Bedarf hier ist reichlich gedeckt, sonst hätte ich mich 
bestimmt dafür interessiert. Solche Systeme haben ja sicherlich meistens 
noch gesteckte Halbleiter auf Fassungen, und da gibt es im Forum 
bestimmt immer jemanden, der auch noch Ersatzteile hätte, falls mal 
einer was verglüht.

Kaum zu glauben, die Stromaufnahme hält sich für eine ganze Europakarte 
mit den Peripheriebausteinen sogar auch noch sehr in Grenzen, wenn man 
durchweg CMOS-Bausteine verwendet. Mit meiner vollen Lochrasterkarte 
8085 komme ich kaum auf 50mA bei 5V, dort ist ein Timerbaustein, ein 
I/O-Baustein, EPROM, RAM und der Adreßselektor drauf.

Bis zu einer bestimmten Anforderung kann man auch heute noch einiges an 
Steuerungen mit den alten Systemen bauen. Allerdings eher für Hobby- und 
Retro-Freunde.

von Reinhard Kern (Gast)


Lesenswert?

Frank K. schrieb:
> Moderne Z80 gibts auch von Zilog. Und die sind gar nicht mal so übel.

Ja, hab ich auch erfolgreich im Einsatz. Die haben alle Nachteile der 
alten Z80 nicht mehr, sondern entsprechen heutigen Anforderungen mit 
Adressbereichen und eingebauter Peripherie, aber man kann noch viel 
Z80-Software wiederverwenden, und den Assembler kennt man dann auch 
schon. Wahrscheinlich sind sie aber für Bastler zu teuer, oder 
überhaupt, mit vergleichbaren ARMs können sie preislich nicht 
konkurrieren.

Gruss Reinhard

von ./. (Gast)


Lesenswert?

> Kann es sein, daß das ein Software-Single-Step war?

M1 & IORQ -> WAIT
Fertig ist der HW-Singlestep.
Hatte mein eigener 1. Z80 auch...

Zum Adressbereiche ausklingeln, hat der geübte Z80-Profi
ein NOP-EPROM.
Das besteht nur aus ein paar Drähten und bietet immerhin
beim Z80 fantastische 64 kByte NOPs.

von Svenska (Gast)


Lesenswert?

Hallo,

>> In der Uni
>> haben wir einen Z80 auch mal per Taster taktweise betrieben.
>
> Kann es sein, daß das ein Software-Single-Step war?

ausschließen kann ich es nicht, weil das nur ein großer, blickdichter 
Kasten war. Schaltplan und Anzeigen rochen aber anders (Adress- und 
Datenbus auf LEDs und Schalterreihe, 4x klingeln für einen Befehl und so 
weiter). Hätte mich auch gewundert, wenn die Uni den Aufwand getrieben 
hätte, um die Studenten zu ver***.

Wie gesagt, das Datenblatt für die NMOS-Version (und auch für die 
CMOS-Version) des Z80 erzählt was von "static by design", mit einer 
garantierten unteren Taktfrequenz bei NMOS und Null bei CMOS. Ob das 
auch für Nachbauten und ähnliche Prozessoren der Zeit gilt, ist da eher 
nebensächlich - im Zweifelsfall steht's im betreffenden Datenblatt. :-D

von Michael_ (Gast)


Lesenswert?

./. schrieb:
> M1 & IORQ -> WAIT
> Fertig ist der HW-Singlestep.
> Hatte mein eigener 1. Z80 auch...

Ich glaub auch, so war es.
Und das mit dem NOP-Eprom, was man so alles vergessen hat.
Ich frag mich aber, wozu die ganze Super-Hardware?
Alte Soft kann damit nichts anfangen.

von ./. (Gast)


Lesenswert?

> Du musst nämlich
> dem Z80 DRAM Controller erst sagen, dass und mit welchen Parametern er
> DRAM zu refreshen hat.

Kwatsch.

von Svenska (Gast)


Angehängte Dateien:

Lesenswert?

Hallo,

das Mainboard ist fertig, den Schaltplan und zwei Fotos habe ich mal 
angehängt.

Bustreiber sind vorhanden, da der AVR aber auf der logisch "falschen" 
Seite sitzt, brauchte ich ein bisschen Zusatzlogik: Wenn der AVR (Slot 
0) einen I/O-Zugriff bearbeitet, muss der Datenbus genau andersrum 
getrieben werden als bei einem I/O-Zugriff auf einen anderen Slot. Da 
der AVR durch den per I2C angebundenen Bus extrem langsam ist, ist ein 
automatisches /WAIT vorhanden, um den Z80 zu bremsen.

Es gibt in diesem System kein DMA, die notwendigen Leitungen sind nicht 
auf die externen Slots herausgeführt. Neben dem Z80 darf nur der AVR die 
Buskontrolle übernehmen, um den Startup-Code in den Speicher zu 
schieben. RAM und MMU werden nur im Slot 1 unterstützt (da sind im 
Augenblick 32 KB SRAM drin). Außerdem wird der Kühlkörper am 7805 sehr 
heiß, die 74LS243 lauwarm, da kommt demnächst ein etwas stärkeres 
Schaltnetzteil ran.

Jeder Slot hat 32 Byte (schnelle I/O-Zugriffe) bzw. 8 KB (16 
Bit-Adressen) I/O-Adressraum und einen (Vektor-)Interrupt. Im Monitor 
trägt man ein, welche Karte wo steckt, die Software kann dann die IDs 
zur Laufzeit aus dem AVR auslesen. Plug'n'Play für Arme. :-)

Bisher läuft CP/M, die vom AVR simulierte ROM-Floppy ist aber mit etwa 1 
KB/s sehr langsam. Die nächsten Erweiterungen sind 512 KB (oder 768 KB, 
mal schauen) DRAM mit MMU und ein CompactFlash-Interface (IDE mit 8 
Bit).

Mal schauen, was da noch so an guten Ideen auftaucht.

Gruß,
Svenska

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Svenska schrieb:
> Bisher läuft CP/M, die vom AVR simulierte ROM-Floppy ist aber mit etwa 1
> KB/s sehr langsam.

Respekt, Respekt! Ich hätte nicht gedacht, das du es so schnell 
fertigbringst, ein Betriebssystem zu booten. Mir sind allerdings 2 
Sachen noch nicht klar:
* Wie kommuniziert der Z80 mit der Aussenwelt (also mit dir)? Oder 
emuliert der AVR noch ne Z80 SIO?
* Wo um Himmels Willen hast du denn noch '243er Bustreiber her? Ich 
dachte, die sind schon längst alle im Halbleiterhimmel :-)

: Bearbeitet durch User
von SN74LS243 (Gast)


Lesenswert?

> * Wo um Himmels Willen hast du denn noch '243er Bustreiber her? Ich
> dachte, die sind schon längst alle im Halbleiterhimmel :-)

digikey.de

von Martin (Gast)


Lesenswert?

Das es das noch gibt, ein echter Hardcore-Fädler! Ich hätte gedacht, die 
wären seit 10 Jahren ausgestorben und die Jungs heute können nur noch 
Facebook!

Respekt!

Ohne die Schaltung im Detail kommentieren zu können, würde ich auf die 
Drahtbündel achten, im Bild einmal senkrecht rechts von der Mitte und 
horizontal unten rechts. Vermutlich sind das die Busse. So etwas erzeugt 
gerne Übersprecher in andere Leitungen. Solange A5 auf A7 überspricht, 
macht das nichts, da die Adressen ohnehin gleichzeitig wechseln. 
Kritisch wird es, wenn auch noch irgendein Takt oder ein Strobe drin 
verlegt wird, das kann Störimpulse geben, die von Daten/Adressen 
abhängen. Hässlich zum Debuggen. Hängt natürlich von der 
Flankensteilheit der Signale ab.
Generell gilt: Je unordentlicher so ein Aufbau aussieht, umso besser 
funktioniert er. Besser (zumindest kritische Leitungen) querfeldein 
führen, das minimiert die Kopplung.
http://en.wikipedia.org/wiki/File:Computerplatine_Wire-wrap_backplane_detail_Z80_Doppel-Europa-Format_1977.jpg

von Svenska (Gast)


Lesenswert?

Hallo,

Das Git-Repository ist übrigens hier: 
http://sraa.de/git/?p=z80.git;a=summary (noch nicht ganz vollständig).

> Ich hätte nicht gedacht, das du es so schnell
> fertigbringst, ein Betriebssystem zu booten.

Das war eigentlich recht einfach, wenn man von Dummheit mal absieht: 
siehe Beitrag "CPM.SYS und wenig RAM" :-)
Als Vorlage für das BIOS habe ich das originale CP/M 2.2 CBIOS genommen, 
Infrastruktur für IOBYTE und mehrere Laufwerke fehlt bisher. Wenigstens 
weiß ich jetzt, warum die Z80-Mnemonics schöner sind als die vom 8080.

> * Wie kommuniziert der Z80 mit der Aussenwelt (also mit dir)? Oder
> emuliert der AVR noch ne Z80 SIO?

Der AVR ist einmal der einzige Busmaster neben dem Z80, um den 
Startup-Code in den Speicher zu schieben (ein ROM wollte ich nicht), 
gleichzeitig aber eine ganz normale Steckkarte in Slot 0. Da ist unter 
anderem eine serielle Schnittstelle dabei. :-)

Später sollen über die Ports auch die Z80-CPU-Frequenz und ein Timer 
einstellbar sein, beide sollen auch Interrupts auslösen können. Außerdem 
soll der Z80 seine Taktfrequenz selbst einstellen können und vielleicht 
auch das Netzteil abschalten. Wer noch gute Ideen hat, immer her damit.

> * Wo um Himmels Willen hast du denn noch '243er Bustreiber her? Ich
> dachte, die sind schon längst alle im Halbleiterhimmel :-)

Segor electronics, Berlin. Die haben fast alles.
Was hätte man denn an der Stelle sonst eingebaut, wenn keine '243er? 
Mein Design habe ich nach der Wikipedia-Liste aller 74xx entwickelt.

> Ohne die Schaltung im Detail kommentieren zu können, würde ich auf die
> Drahtbündel achten, im Bild einmal senkrecht rechts von der Mitte und
> horizontal unten rechts. [...] Übersprechen [...]

Oh, daran habe ich nicht gedacht. Wenn es anfängt, Probleme zu geben, 
behalte ich es aber im Hinterkopf. Danke für den Hinweis.

Das Drahtbündel unten rechts besteht nur aus /SELx und /INTx. Glitches 
da sollten unproblematisch sein, weil es am Ende auf den CPU-Takt 
synchronisiert wird.

Aber im anderen Bündel sind die Adress- und Datenleitungen verlegt und 
auch ein paar Steuerleitungen. Da muss ich später drüber nachdenken, 
wenn ich in den Slots auch Hardware habe.

> Respekt!

Danke!

Gruß,
Svenska

von Jens (Gast)


Lesenswert?

Svenska schrieb:
> das Mainboard ist fertig, den Schaltplan und zwei Fotos habe ich mal
> angehängt.
Hübsch.
Mir wären das aber zu viele Schaltkreise.

Daher hab ich das hier nachgebaut:
Beitrag "Re: CP/M auf ATmega88"

Hauptsache CP/M läuft :-)

Viele Grüße
Jens

von Helmut L. (helmi1)


Lesenswert?

Svenska schrieb:
> Was hätte man denn an der Stelle sonst eingebaut, wenn keine '243er?

245er.  Dann haettes du statt 2 Stueck 243er einen 245er einsetzten 
koennen.

von Matthias S. (Firma: matzetronics) (mschoeldgen)


Lesenswert?

Helmut Lenzen schrieb:
> 245er.  Dann haettes du statt 2 Stueck 243er einen 245er einsetzten
> koennen.

Ja, eben. Nun, schön klein sind die 243er Kerlchen ja, aber da ich 
schubladenweise die 245 hier habe, komme ich gar nicht mehr auf die 
Idee, für 8-bit Busse was anderes als 244er (habe ich auch säckeweise) 
und 245er zu nehmen.

Svenska schrieb:
> Segor electronics, Berlin. Die haben fast alles.

Ahh, ja. Da hätte ich auch drauf kommen können. Bin da auch Stammkunde - 
per Zufall mein nächster Elektronikladen.

> Aber im anderen Bündel sind die Adress- und Datenleitungen verlegt und
> auch ein paar Steuerleitungen. Da muss ich später drüber nachdenken,
> wenn ich in den Slots auch Hardware habe.

Der Z80 ist ja nun auch kein GHz Prozesser. Mit 4 MHz getaktete Z80 
Systeme habe ich schon auf Fädelboards arbeiten sehen, die halbe 
Kuchenblechgrösse hatten. Gehen sollte das schon.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.