Einzige Änderung gegenüber dem vorherigen Beispiel ist der neu hinzugefügte 4-bit Zähler (unten mitte). Dieser sogenannte Programmzähler (PC, program counter) übernimmt jetzt die Adressierung des Hauptspeichers (Programmspeichers) und wird nach jedem Befehlszyklus (hier 8 Takte) inkrementiert. dazu im jeweils zweiten Takt eines Befehlszyklus (Zählerstand 010) über Ausgang D5 des oberen ROMs ein Taktimpuls für den Zähler generiert.
Da der Ausgang der Zählers direkt mit dem Adresseingang des Programmspeichers (RAM 74189, unten rechts) verbunden ist, wird nach jeweils 8 Takten die nächste Adresse des Programmspeichers adressiert und im ersten Takt eines Befehlszyklus in das Befehlsregister IR übertragen. Damit sind automatische Abläufe von mehreren Befehlen möglich. Die Befehlsfolgen müssen allerdings zusammen mit allen Daten in der korrekten Reihenfolge im Speicher stehen, Sprünge oder Schleifen sind mit diesem Prozessor noch nicht möglich.
Das jeweilige Programm muss vor dem Starten der MiniCPU in den Hauptspeicher geschrieben werden, und wird nach einem Reset des Prozessors dann Schritt für Schritt automatisch abgearbeitet. Im Beispiel sind natürlich nur maximal 16 Befehle möglich, da der Hauptspeicher insgesamt nur 16 Worte enthält. Durch Öffnen des Dialogfensters für den Speicher (popup-menu, edit) kann der Speicherinhalt während der Simulation beobachtet und auch direkt verändert werden.
Hier noch einmal die Befehlskodierung der MiniCPU:
op3 op2 op1 op0 | Mnemo | Operation -------------------+---------+-------------------------- 0 0 0 0 | NOP | no operation 0 0 0 1 | LDA | load: accu=(bus) 0 0 1 0 | STA | store: bus=(accu) 0 0 1 1 | ADD | add: accu=(accu+datain) 0 1 0 0 | SUB | sub: accu=(accu-datain) 0 1 0 1 | INC | increment accu=(accu+1) 0 1 1 0 | DEC | decrement accu=(accu-1) 0 1 1 1 | AND | and: accu=(accu&datain) 1 0 0 0 | OR | or: accu=(accu|datain) 1 0 0 1 | XOR | xor: accu=(accu^datain) 1 0 1 0 | IN | in: accu=(datain) 1 0 1 1 | OUT | out: dataout=(accu) 1 1 * * | --- | undefined
Welcher Operationsfolge entspricht daher der folgende im Beispiel vordefinierte Inhalt des Hauptspeichers?
Adresse | Datum | Operation? -----------+----------+--------------- 0 | 1 | 1 | 7 | 2 | 4 | 3 | 5 | 4 | b | 5 | 0 | 6-f | 0 |Zum Steuern der Simulation entweder die verschiedenen Schalter direkt anklicken, oder die folgenden Bindkeys tippen:
Taste | Eingang | Kommentar |
'c' | C | Takt Zähler |
'r' | R | Reset Zähler |
Run the applet | Run the editor (via Webstart)