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.
Schaltplan problematisch, weil zu viele Leitungen unbeschriftet.
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.
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?
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.
Da wurde per WAIT Eingang immer angehalten. (Siehe Google Books "Build Your Own Z80 Computer: Design Guidelines and Application Notes" Seite 95)
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.
Hast Du darüber nachgedacht, einen "moderneren" Z80 zu verwenden: Hitachi HD64180 / HD64780 oder was vergleichbares von Toshiba?
> 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.
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
Svenska schrieb: > 256x4 DRAM gefunden und wollte die nicht vergammeln lassen. Ich hoffe wenigstens, das sind 256k*4. fchk
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.
> Du musst nämlich > dem Z80 DRAM Controller erst sagen, dass und mit welchen Parametern er > DRAM zu refreshen hat. Kwatsch.
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 :-)
:
Bearbeitet durch User
> * Wo um Himmels Willen hast du denn noch '243er Bustreiber her? Ich > dachte, die sind schon längst alle im Halbleiterhimmel :-) digikey.de
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.
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
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.