Wie im Betreff, kann ich für eine Einzelschrittfunktion einfach einen Knopf an _CLK anschließen der bei jedem drücken _CLK nach VCC zieht? Oder muss da was gescheiteres her?
Naja, ein "Knopf" wird prellen. Den solltest Du also entsprechend hardwaremäßig entprellen, sonst wird mit jedem Druck eine annähernd beliebige Anzahl von Takten ausgeführt.
Achtung: CLK.low <= 2µs, nur CLK.high ist nicht begrenzt, bei Zilog Original.
Willst Du die Clock-Impulse einzeln auf die CPU loslassen oder willst Du die CPU im Einzelschrittbetrieb laufen lassen? Das sind zwei völlig unterschiedliche Dinge; der Z80 benötigt eine variable Anzahl Clocks für die einzelne Instruktion. Bernhard
Muß das unbedingt per Hardware sein? Am Z80 kann man möglicherweise einen Single-Step per Software im Interrupt implementieren, so daß man an die Clock-Leitung evtl. überhaupt nicht ran muß. Bei Standard-8051 geht ein Single-Step in Software (ist per Hardware überhaupt nicht möglich, da CPU nicht statisch), da zwischen Interrupts immer mindestens ein einziger Befehl des Hauptprogrammes abgearbeitet wird. Dazu ist noch nicht mal eine Hardware-Entprellung des Tasters nötig, da man die in Software ausführen kann. Wenn da keine integrierte Peripherie (z.B. Timer o.ä.) auf dem Z80 läuft, müßte man das mal nachschauen, ob der da mitspielt.
Die Z80 ist erstaunlicherweise statisch.
Bernhard R. schrieb: > ... der Z80 benötigt eine variable Anzahl Clocks für > die einzelne Instruktion. Hallo, variabel ist beim Z80 stark untertrieben: normale Befehle brauchen 4 bis 23 Taktzyklen, Blockbefehle wie LDIR bis zu ca. 1,4 Millionen. Gruss Reinhard
Na, dann sollte es ein Monoflop o.ä. am Clock-Eingang tun.
A. K. schrieb: > Achtung: CLK.low <= 2µs, nur CLK.high ist nicht begrenzt, bei Zilog > Original. Hallo, Zitat aus Zilog Handbuch von 1979: "Although static by design, testing guarantees tw (Phi H) of 200 µs maximum" Ich habe auch geglaubt, der Z80 wäre nicht statisch, ist er aber nach dieser Aussage doch - allerdings ist für Clk Low tatsächlich 2000 ns max angegeben, das wird aber nicht begründet. Also statisch by Design, real aber dynamisch? Es lohnt sich wohl nicht mehr, das Rätsel zu lösen. Bei den CMOS-Versionen ist sowieso DC erlaubt. Gruss Reinhard
Hallo Markus, das grenzt ja schon an Leichenfledderei was Du da treibst ;-). Ok OK, ich gebe ja zu daß so eine CPU z.B. in meiner Melodieklingel breitmacht. Bauteile des Z80 Systems habe ich auch noch. Aber trotzdem, was hast Du eigentlich vor ? Jogibär
Die alten Dokumentationen enthalten Schaltungsvorschläge für Single-Step-Betrieb. Da sollte man fündig werden. Bernhard
Zu DDR-Zeiten gab es ein Z80-System, welches Polycomputer-880 hieß und so einen Hardware-Einzelschritt drin hatte. Wenn ich mich recht erinnere, haben die das über den Wait-Eingang der CPU realisiert. Leider kann ich nicht mehr in die Unterlagen schauen, da ich sie mitsamt dem Gerät schon vor vielen entsorgt habe, aber vielleicht findet ds große G noch was.
Jens schrieb: > Zu DDR-Zeiten gab es ein Z80-System, welches Polycomputer-880 hieß und > so einen Hardware-Einzelschritt drin hatte. Wenn ich mich recht > erinnere, haben die das über den Wait-Eingang der CPU realisiert. Leider > kann ich nicht mehr in die Unterlagen schauen, da ich sie mitsamt dem > Gerät schon vor vielen entsorgt habe, aber vielleicht findet ds große G > noch was. Hallo, wie kann man sowas nur wegwerfen ?!? Jogibär
HI www.kc85-museum.de/books/poly880/bedienhandbuch/0008index.html Dort findest du die Schaltung vom DDR-Polycomputer. Bei dem ließen sich sogar die einzelnen M-Zyklen durchsteppen. MfG Spess
Hallo, ganz im Sinne der 'Leichenfledderei', bei meinem inzwischen teilweise entsorgten 8080-System wurde Single-Step durch 'geschicktes' Verbinden von WAIT und RDYIN erreicht, man konnte dann sehen, was auf dem Bus los ist. Aus beim Z80 schein das zu gehen, aber nicht, wenn man dynamische RAMs betreibt. Wie es mit CMOS-Z80 aussieht, weiß ich auch nicht, siehe auch: http://www.vias.org/mikroelektronik/b2_02_z80_pins.html Viel Spass Hermann-Josef
Single-Stepping geht per BUSREQ- / BUSACK-Signal recht einfach: BUSREQ := 0 ---> CPU geht nach der laufenden Instruktion in den TRISTATE Zustand und signalisiert das per BUSACK = 0. BUSREQ = 1 bei steigendem Clock: dienächste Instruktion startet. Bernhard
Jens schrieb: > Wenn ich mich recht > erinnere, haben die das über den Wait-Eingang der CPU realisiert. Ja, mit sowas habe ich meinen CP/M-Computer auch in Betrieb genommen. Ich bin mir nur gerade nicht ganz sicher, ob während wait der dRAM- Refresh noch gewährleistet ist. Aus dem Bauch raus würde ich sagen, dass das nicht der Fall ist, da der ja in der Befehlsdekodierphase eines jeden M1 erfolgt.
Mit WAIT für Single-Step geht Refresh natürlich nicht. Kein Single-Step in Hardware kann das, weil der Bus stehenbleibt. Nur irgendwelche Sachen mit NMI aus M1 oder so und folglich Single-Step in Software mit Monitor-Programm.
Michael Jogwich schrieb:
> das grenzt ja schon an Leichenfledderei was Du da treibst ;-).
Ich wollt mir ein klassisches System selber bauen um eben mal den
Lerneffekt auszunutzen.
Z80schs gibts halt in DIL, sind also uneingeschränkt Lochrastertauglich,
die anderen reinen CPUs die man so im Handel bekommt sind ja alle
mittlerweile nur noch SMD oder schlimmer.
Mein Projektaufbau sieht halt vor das sich das nachher jeder auf
Lochraster nachbauen kann, derzeit hängt die Hardware aber eher in der
Planungsphase.
Derzeit strick ich übrigens Softwaremäßig mit Meka rum, das ist ein
Master System Emulator mit super genialem Live Debugger.
Markus Stehr schrieb: >Michael Jogwich schrieb: >>das grenzt ja schon an Leichenfledderei was Du da treibst ;-). >Ich wollt mir ein klassisches System selber bauen um eben mal den >Lerneffekt auszunutzen. >Z80schs gibts halt in DIL, sind also uneingeschränkt >Lochrastertauglich, die anderen reinen CPUs die man so im Handel >bekommt sind ja alle mittlerweile nur noch SMD oder schlimmer. Der Zweck heiligt immer die Mittel. Hatte vor einigen Jahren selbst noch so ein altes System mit dem 8085 nachgebaut, mit Draht 0,4mm sauber zum Kabelbaum gebunden auf der Bestückungsseite einer Lochrasterplatte verdrahtet. Dem Ding hatte ich noch 32k SRAM und 32k EPROM spendiert, einen Portbaustein 8255, ebenfalls einen Timerbaustein 8253, wobei ein Timer eine Zeitbasis für den Prozessor darstellt. Die niedrige Taktfrequenz und die Verdrahtungsart waren auch nicht kritisch. Der Lerneffekt war groß, ich hatte viel Spaß, und Z80 und 8085 leben ja heute noch, und werden auch noch neuere Entwicklungen überleben...
lies mal beim Anschluss M1 nach. Der signalisiert beim Z80 den "Maschinenzyklus 1" wo der Opocode Fetch gemacht wird. Mit einem FF kannst du da Single Step unabhängig von der Anzahl der Takte für einen Befehl machen. Wenn du Wait anstelle Busreq oder Clock schaltest, dann geht der Refresh für DRAM auch wenn die Kiste (scheinbar) steht.
Wie soll ein DRAM-Refresh funktionieren, wenn ein Buszyklus durch Wait mittendrin ad infinitum angehalten wird?
Für DRAM-Refresh gibt es 2 Möglichkeiten: 1. Refresh vom Z80 aus 2. "Stand Alone Refresh" zu 1: Der Refresh vom Z80 aus ist blockiert, sobald WAIT oder BUSREQ aktiv ist, bei stehendem Clock natürlich auch. zu 2: Wenn der Speicher AUTO-Refresh besitzt, dann verhindert WAIT den Refresh, denn die CPU greift während des WAIT weiter auf den Speicher (oder manchmal auch auf I/Os) zu. Wenn die CPU per BUSREQ angehalten ist, dann kann der Speicher sein AUTO-Refresh ausführen. Das dürfte allerdings alles recht theoretisch sein, denn heute steht statischer Speicher dieser Größe und Geschwindigkeit billig zu Verfügung, während entsprechend kleine DRAMS inzwischen rechtr "exotisch" sind. Bernhard
Bernhard R. schrieb: > Das dürfte allerdings alles recht theoretisch sein, denn heute steht > statischer Speicher dieser Größe und Geschwindigkeit billig zu > Verfügung Ja, anfangs war nur nicht klar, ob es um einen alte Kiste oder einen Neuaufbau geht.
J. V. schrieb: > lies mal beim Anschluss M1 nach. Der signalisiert beim Z80 den > "Maschinenzyklus 1" wo der Opocode Fetch gemacht wird. Mit einem FF > kannst du da Single Step unabhängig von der Anzahl der Takte für einen > Befehl machen. Wenn du Wait anstelle Busreq oder Clock schaltest, dann > geht der Refresh für DRAM auch wenn die Kiste (scheinbar) steht. Das wird nicht klappen. Wenn M1 kommt,, hat ja der nächste Instruction Fetch schon begonnen - zu spät um anzuhalten, jedenfalls wenn man einzelne Befehle steppen will. Gruss Reinhard
Keineswegs zu spät. Mit Wait kannst du ihn mitten in M1 anhalten. Eine Auswirkung hat der darin noch nicht fertig geladene Befehl naturgemäss noch nicht.
Das Problem bei einem Einzelschritt über das WAIT-Signal ist, dass Wait nur für kurze Zeit deaktiviert werden darf, damit der nächste Maschienenzyklus wieder im Wait-Zustand landet. Gleiches gilt für BUSREQ. Es gibt da recht aufwändige Schaltungen: Ein FlipFlop, Q an Wait und /Q an Busrequest. Nehmen wir an der Prozessor bzw. das Flipflop befindet sich im Wait Zustand. Wenn das Flipflop jetzt (durch eine Taste) den Zustand wechselt, wird WAIT inaktiv und BUSREQ aktiv = der Prozessor saust vom Waitzustand in den Busrequestzustand, da beide Zustände während einem Maschienenzyklus zu verschiedenen Zeiten abgefragt werden. Wechselt das FlipFlop wieder den Zustand, landet man im nächsten Waitzustand/Maschienenzyklus. Damit kann man mit einem FlipFlop mit dem Z80 EInzelschrittbetrieb machen. Geht natürlich wie schon beschrieben nur mit statischen RAM's - ist aber unübertroffen einfach, denn ein FlipFlop hat man immer in der Bastelkiste... :)
Hier eine real benutzte Schaltung von vor > 25 Jahren.
Mir leuchtet dabei nicht ein, weshalb man WAIT und BUSRQ verwenden sollte. Genauso kann man mit der fallenden Flanke von M1 oder MREQ ein D-FF und damit WAIT aktivieren. Taste setzt das FF zurück und weiter geht's. Geht man auf M1 kriegt man die Befehle einzeln, geht man auf MREQ (oder MREQ&IORQ), dann die Buszyklen einzeln. WAIT alleine bietet gegenüber BUSRQ den Vorteil, dass man auf dem Bus Adresse/Daten beobachten kann, LEDs/7segment dran oder so. Single-Step ist ja kein Selbstzweck. Edit: Jörg war schneller.
A. K. schrieb: > WAIT alleine bietet gegenüber BUSRQ den Vorteil, dass man auf dem Bus > Adresse/Daten beobachten kann, LEDs/7segment dran oder so. Genau das habe ich damals damit gemacht. Dann so lange single-step, bis ich gefunden haben, wann der gelesene Wert nicht mehr dem im ROM entspricht -- und die Lötbrücke gefunden.
A. K. schrieb: > Mir leuchtet dabei nicht ein, weshalb man WAIT und BUSRQ verwenden > sollte. Genauso kann man mit der fallenden Flanke von M1 oder MREQ ein > D-FF und damit WAIT aktivieren. Taste setzt das FF zurück und weiter > geht's. Wenn man nur Wait verwendet, darf man das Signal nur für kurze Zeit (< Maschienenzyklus) deaktivieren um den nächsten Zyklus zu "fange". Aktiviert man aber Wait und Busreq alternierend, so wechselt der Prozessor wegen der verschiedenen Zeiten in denen diese Signale abgefragt wird, vom Wait- in den Busrequest-Zustand und wieder zurück. Man braucht also nur ein Flipflop mit Q an Wait und /Q an Busreq, um mit einem Switch an S und R, um von einem Maschienenzyklus zum nächsten zu wechseln. Einfacher geht wirklich nicht mehr, und da man immer im Wait-Zustand landet, kann man natürlich den Buszustand super per LED's anzeigen.
>Autor: Bernhard R. (barnyhh) >Datum: 05.02.2010 17:35 >Willst Du die Clock-Impulse einzeln auf die CPU loslassen oder willst Du >die CPU im Einzelschrittbetrieb laufen lassen? Das sind zwei völlig >unterschiedliche Dinge; der Z80 benötigt eine variable Anzahl Clocks für >die einzelne Instruktion. >Bernhard Diese Frage muß als erstes beantwortet werden. Jeder Praktiker weiß, wenn ein Quarz o.ä. angeschlossen ist, muß es an den Adressleitungen "wackeln". Damit ist die Frage nach D-RAM/Refresh geklärt. Einzelschritt der Befehle ist weiterhin mit obiger Hardware bzw. Soft möglich. Anfängern würde ich zu AVR/DIL raten.
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.