Taktgeber mit Umschaltung zwischer Auto-Clock (Run) und manueller Clock (Einzelschritt) zur Steuerung einer 8-Bit-CPU

In meinem letzten Artikel über 555-Timer habe ich gezeigt, wie man mittels NE555-Chips ... Diese drei Einzelschaltungen sollen nun in ein Clock-Modul einfließen, mit dem ich mein Projekt 8-Bit-Computer auf einem Breadboard beginnen will. Das Modul soll den Takt einer 6502-CPU steuern. Die 6502-CPU war auch Prozessor des Commodore VC20 und der nachfolgende 6510 des legendären C64, beides Heimcomputer aus den 80er Jahren.

Ich habe vor, den 6502 in Maschinensprache / Assembler zu programmieren. Um genau zu sehen, was in der CPU vor sich geht, brauche ich auch die Möglichkeit, den CPU-Takt anzuhalten und dann manuell bei Tastendruck Befehl für Befehl auszuführen, um bei jedem Schritt zu sehen, wie sich Adress- und Datenleitungen verändern.

Außerdem soll es einen Rückkanal von der 6502-CPU zum Clock-Modul geben, bei dem die CPU ein HALT-Signal auf High setzen kann und dadurch die Taktgeneration anhält.

Ein bisschen platzsparend aufgebaut, bekommt man alles auf einem 830er-Breadboard unter:



Das Breadboard habe ich mehrere farblich gekennzeichnete Sektionen unterteilt:

Die blaue Sektion: Auto-Takt (Blinkschaltung, Multi-Flop)

Hier wird ein automatischer Takt generiert, der sich über das Poti beschleunigen oder verlangsamen lässt. Der Takt hieraus wird mit der roten Leitung an die Logik weitergereicht. Die grüne Sektion: manueller Takt (entprellter Taster, Mono-Flop)

Hier wird ein manueller Takt generiert, immer wenn ich auf den Taster drücke. Der Taktimpuls hieraus wird mit der gelben Leitung an die Logik weitergereicht. Die gelbe Sektion: Umschalter zwischen manuellem und Auto-Takt (entprellter Schalter, Flip-Flop)

Der 555 sorgt dafür, dass das Umschalten ohne störende Zwischenimpulse geschieht und der Schaltzustand in ein High oder Low gewandelt wird, das über die orange Leitung an die Logik weitergereicht wird. Die rote Sektion: HALT-Signal (Halt, wenn High)

Wird das rote Kabel auf High gesteckt, leuchtet die rote LED auf und die Logik befindet sich im Halt-Zustand, so dass kein Takt mehr weitergegeben wird. Kann später durch die CPU gesetzt werden. Die weiße Sektion: Ausgabe-Logik

Logik zur Steuerung des Outputs

Folgende logische Aussagen sollen abgebildet werden: Wer sich mit digitaler Logik nicht so auskennt, und den folgenden Abschnitt verstehen möchte, dem empfehle ich an dieser Stelle einen kurzen Abstecher zu meinem Artikel Digitale Logik und Logikgatter einfach erklärt.

Die obigen Aussagen ergeben den Term: ( (Schalter AND Auto) OR (NOT Schalter AND Manuell) ) AND NOT HALT Der Term führt zu dieser Wahrheitstabelle (a=Auto, b=Manuell, c=Schalter, d=Halt):



mit diesem Ausdrucksbaum:



was folgender Logik-Schaltung entspricht:



Diese verwendet AND, NOT und OR-Gatter. Wir bräuchten also 3 ICs. Da ich aber keine große Lust hatte, alle möglichen logischen 74xx-ICs für die unterschiedlichen Gatter-Typen zu bevorraten und weiß, dass man mit NAND-Gattern jede Logik abbilden kann, habe ich den Term zu folgendem umgewandelt, der ausschließlich NAND-Gatter benutzt:

( ( (Schalter NAND Auto) NAND ((Schalter NAND Schalter) NAND Manuell) ) NAND (Halt NAND Halt) ) NAND Term5 ^---------1--------^ ^----------2-----------^ ^-------------------3-----------------^ ^------7-------^ ^-------------------------------4-----------------------------------^ ^-------------------------------------------------5-------------------------------------------^ ^------------------------------------------------------6-------------------------------------------------^ und diese Wahrheitstabelle (a=Auto, b=Manuell, c=Schalter, d=Halt):



Wie man sieht, stimmen die Wahrheitstabellen des mixed-Gatter und des NAND-only-Terms überein, was auch noch einmal die Äquivalenz-Prüfung der Terme ergibt:



Hier noch der Ausdrucksbaum des nur-NAND-Terms:



Die oberste (letzte) Verknüpfung ist eine NOT-Umsetzung, der linke und rechte Teil bis dahin sind identisch, müssen also nicht zweimal verdrahtet werden.

Die Logik-Schaltung sieht schon einmal einfacher aus:



Soweit zur Logik. Nun aber zur Hardware und zur Beschaltung. Wir benötigen sieben NAND-Gatter, kommen damit also mit zwei 74HC00-Chips aus, da jeder ja vier NAND-Gatter beinhaltet, wenn wir uns den internen Aufbau eines 7400 noch einmal ins Gedächtnis rufen:



Ich habe mir erlaubt, die Gatter durchzunummerieren: links unten 1, rechts unten 2, links oben 3 und rechts oben 4. Die Logik-Schaltung trägt bereits die Gatter-Nummern. Damit fängt ein Gatter immer links an, hat zuerst zwei Eingänge links und danach den Ausgang rechts.

Damit komme ich zu folgender Verdrahtung, die ich natürlich bevor ich sie auf dem Breadboard gesteckt habe, mit Logisim durchgetestet habe:



Auf das Breadboard übertragen, funktioniert die Schaltung nun wie gewünscht. Beim Nachbauen bitte nicht die kleinen, blanken, 1-Schritt-Weite-Drahtbrücken übersehen, die sind ein wenig schlecht auf dem Foto zu erkennen.

Für Taktfrequenzen von 3 bis etwas über 500 Hertz und natürlich Einzeltakt reicht die Breadboard-Clock aus. Ich finde sie sehr anschaulich und benutzerfreundlich. Falls es dann doch mal eine schnelle Programmausführung sein soll, habe ich noch ein zusätzlichen Modul mit einem Frequenzgenerator, das eine Frequenz von 1 Hz bis 160 kHz takten kann - allerdings keinen Einzelschritt. Und reicht das immer noch nicht, kann ich auch noch einen 1 oder 10 Mhz Quartz verbauen.

Hier noch ein Video, in dem ich die Schaltung vorführe und ein paar zusätzliche Worte darüber verliere:



Im nächsten Teil erfahrt ihr alles über Speichertypen und deren Anbindung. Dieses Wissen wird uns beim Aufbau unseres Breadboard-Computers sehr helfen.