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
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.
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
> 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.
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
> 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.
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.
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.
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
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 ;)
> 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?
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).
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...
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.
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.
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?
> 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.
>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.
> 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.
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
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
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.
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
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
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.
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?
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!
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.
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.
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
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.
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
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.
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.
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
> 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.
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
./. 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.
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
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 :-)
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
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
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
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.
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.