CPU-Emulator          

Um mein CPU-Konzept zu testen, habe ich mir zuerst eine Hardware-Emulation meines CPU-Entwurfs in C geschrieben. Das Besondere an der Emulation ist, dass ich wirklich jedes einzelne Gatter samt zugehöriger Gatterlaufzeit simuliert habe. So konnte ich schon logische Fehler und Timing-Probleme aufspüren und beseitigen, ohne auch ein einziges mal einen Lötkolben zur Hand nehmen zu müssen. Auf diesem Emulator (ich nenne ihn "Version 1") habe ich dann auch die erste Software zum testen des Mikrocodes geschrieben.

Ziemlich schnell zeigte sich dann aber, dass die Performance des Hardware-Emulators für die Emulation des gesamten MyCPU-Systems samt Betriebssystem und angeschlossener Peripherie viel zu schlecht war, so dass ich beschloss, eine neue Version des Emulators zu schreiben. Ich beschränkte mich dabei auf die rein logische Emulation der CPU, das heißt, ich simuliere die Funktionsweise der gesamten CPU, aber nicht mehr die einzelnen Funktionsblöcke an sich. Die Geschwindigkeit der Emulation konnte so um den Faktor 30 beschleunigt werden, jedoch gibt es auch einen kleinen Nachteil: Das Testen des low-level-Mikrocodes ist nun nicht mehr möglich, da es keine Einheit mehr gibt, die ihn interpretiert.

Die aktuelle Version 3.0 des Emulators kann unter MS Windows das gesamte MyCPU-System simulieren, so wie es bei mir auf dem Schreibtisch steht. Die Linux-Version ist hingegen noch ein wenig eingeschränkt, so wird beispielsweise das Netzwerk (SLIP-Anbindung) noch nicht unterstützt, und auch die Grafikkarte wird noch nicht emuliert.

Die neuste Version des Emulators biete ich hier zum Download an, damit sich jeder selber ein Bild vom MyCPU-System machen kann:

cpuemu5.zip - 1553K, Version 5.0

Starthilfe:
Unter Windows kann man die tgz-Datei mit dem aktuellen Winzip oder auch Winrar entpacken. Der Emulator braucht nicht installiert werden, er kann direkt aus dem Verzeichnis gestartet werden, in das er extrahiert wurde (einfach Doppelklick auf cpuemu5.exe). Um die Emulation zu starten, muss im nun erscheinenden Textfenster nur noch die Taste 'R' gedrückt werden.
Unter Linux gestaltet es sich ähnlich, die Datei wird mittels tar entpackt. Ich habe ein kleines Skript geschrieben, das alles Weitere übernimmt: Durch die Eingabe von # ./start wird der Emulator - falls nötig - neu übersetzt und in einem xterm-Fenster ausgeführt. Sollte es beim ersten Startversuch zu einem Pagefault kommen, muss man nur die vorkompilierte cpuemu5.out löschen und nochmal das start-Skript ausführen.

Für die Ausführung des Emulators empfehle ich einen PC mit MS Windows Betriebssystem und mindestens 600MHz, da die Emulation sonst ein wenig zu langsam läuft, besonders wenn auch noch die VGA-Grafikkarte (CRT) emuliert werden soll.

Übrigens: Wer nicht glauben mag, dass ich das gesamte Betriebssystem in Assembler handcodiert habe, für den habe im Download-Bereich dieser Website den Sourcecode des Betriebssystems zum Download bereitgestellt.



 So meldet sich der Emulator unter Windows:


 Durch Druck auf 'R' wird die CPU gestartet. Ein neues Fenster geht auf, in dem sämtliche Ausgaben der emulierten Grafikkarte erscheinen:


Nachdem das gelb-rote MyCPU-Logo über den Bildschirm gelaufen ist, meldet sich das System mit einem Begrüßungstext:


Am Eingabeprompt kann man nun Beispielsweise das 'dir'-Kommando eingeben und sich den Inhalt des batteriegepufferten RAM-Laufwerks anzeigen lassen:


Man kann auch 'basic' eingeben, und landet prompt im Basic-Interpreter:


Hier ist ein Beispiel eines alten Basic-Spiels (von der CBM Demo Diskette, die bei den älteren 1541-Laufwerken mitgeliefert wurde):


Zum Vergleich nochmal die Darstellung auf einem echten Monitor, angeschlossen an das reale MyCPU-System: