# MikroSim

MikroSim ist eine Lernsoftware für das Betriebssystem Windows zur Hardware-unspezifischen Erläuterung der allgemeinen Funktionsweise und Steuerabläufe einer virtuellen Rechenmaschine. Es lassen sich in allgemein verständlicher Weise miniaturisierte Rechenwerke didaktisch auf Registertransferebene erläutern, die in Mikrocontrollern, Prozessoren, und Computern ablaufen.

## Allgemeines

Anfänglich wurde MikroSim als Prozessor-Simulationssoftware konzipiert. Da MikroSim allerdings die Programmierbarkeit (Mikroprogrammierung) eines Mikroprogrammsteuerwerks mittels Mikrobefehlen in den Vordergrund stellt, betont die Anwendung als Mikrocodesimulator den Aspekt der Mikrocodesimulation. In der gegenwärtigen Entwicklung erlangt der Simulator den Status einer virtuellen Applikation. Dabei werden allgemeine Prinzipien der System- und Rechnerarchitektur aufgegriffen, die sich mit dem Beginn des Informationszeitalters etabliert haben und noch heute Bestand haben, ohne sich auf spezielle Hardwareaspekte zu beschränken. Auf diese Weise erlangt das Simulationswerkzeug einen zeitlosen, freien didaktischen Nutzen, ohne sich auf spezielle vergangene und zukünftige Entwicklungen festzulegen. Die detaillierte Dokumentation und die zweisprachige Benutzerführung der E-Learning-Anwendung in Deutsch und Englisch, sowie die Auslegung der Software für die weithin verbreiteten Windows-Betriebssysteme, ist der Grund für den nachhaltigen Bestand der Software im Lehrbetrieb auf dem Gebiet der technischen Informatik in Ausbildung und Lehre seit 1992.

## Entwicklungsgeschichte

Die Software basiert auf einer freien, unter Turbo Pascal für das Betriebssystem MS-DOS geschriebenen Programmversion, die bis 1992 an der Philipps-Universität Marburg in der Vorlesung zur technischen Informatik für die Erläuterung von Mikrocodesteuerprozessen herangezogen wurde. Das bis dahin etablierte didaktische Vorlesungskonzept wurde im Sommer 1992 von Martin Perner während seines Physik-Diplomstudiums (1990–1995) aufgegriffen und in freier Arbeit auf das Betriebssystem Windows 3.1 unter Visual Basic 1.0 portiert. Dabei entstand der Simulator in einer für damalige Verhältnisse völlig neuartigen Konzeption mit weitreichender Funktionalitätsverbesserung. Die Weiterentwicklung der Lehrsoftware unter Windows wurde bis 1995 von dem Fachbereich Mathematik/Informatik der Universität Marburg durch Heinz-Peter Gumm gefördert. Der Simulator wurde im November 1994 mit dem Europäischen Hochschul-Software-Preis 1994 in der Kategorie Informatik in Heidelberg ausgezeichnet und im März 1995 auf der Computermesse Cebit in Hannover am Stand der hessischen Hochschulen der Öffentlichkeit vorgestellt.
Im Zeitraum Ende 1995 bis Anfang 2000 wurde der Simulator mit wenigen Verbesserungen unter der Revision MikroSim 1.2 veröffentlicht. In diesem Zeitraum wurde MikroSim im Rahmen des Europäischen Jahres des lebensbegleitenden Lernens 1996 mit 1000 ECU prämiert sowie beim Wettbewerb Multimedia Transfer'97 im Rahmen der Messe LearnTec’97 vorgestellt. In seiner vorletzten Neuauflage wurde der Simulator unter dem Namen „Mikrocodesimulator MikroSim2000“ mittels der Programmiersprache MS-Visual Basic 4.0 für Windows 95 angepasst.
Im Zeitraum Anfang 2008 bis 2009 erfuhr der Simulator weitreichende konzeptionelle Erweiterungen, ohne die Möglichkeiten der Mikrocodesimulation im Kern zu verändern. Dabei wird die Rechenleistung heutiger Windows-Applikationen und der verwendeten Hardware ausgenutzt, um Simulationen bis hin zur virtuellen Applikation zu ermöglichen. MikroSim ist als 32-Bit-Version kompiliert und für Windows XP optimiert worden. Das Programm ist auf allen 32- und 64-Bit-Betriebssystem der Versionen Windows Vista und Windows 7 ohne spezielle XP-Kompatibilitätsmodi ausführbar. Seit Januar 2010 wird der Simulator unter „Mikrocodesimulator MikroSim 2010“ von 0/1-SimWare vertrieben.

## Funktionsweise und -umfang

Das Programm ermöglicht den schrittweisen Aufbau einer virtuellen Applikation, die in ihrer Funktionalität unveränderbar vorgegeben ist. Im Erkundungsmodus kann die Funktionsweise und Steuerungsmöglichkeit neu hinzugefügter Komponenten innerhalb eines Mikrocode-Befehlszyklus in Erfahrung gebracht werden. Die Breite der von MikroSim unterstützten Mikrobefehle umfasst 49 Bit. Ein Mikrobefehl wird in drei Teilphasen eines 3-Phasentakts abgearbeitet. Die Teilphasen werden als Hol-, Rechen- und Bringphase bezeichnet und bewirken das Holen eines 32 Bit breiten Registerwerts, das Ausführen einer 32-Bit-Berechnung, und das abschließende Speichern des Rechenergebnisses in einem CPU-internen Register.
Im Simulationsmodus können hintereinander ausgeführte Mikrobefehle die zentrale Recheneinheit des Simulators steuern, wobei jeder Mikrobefehl auf die Adresse des nächsten Mikrobefehls verweist. Der Mikrobefehlssatz, gemeinhin als „Mikrocode“ der Recheneinheit bezeichnet, umfasst in der gegenwärtigen Implementierung von MikroSim 1024 49-Bit-lange Mikrobefehle. Strukturierungsmöglichkeiten im adressierbaren Ablaufplan im Mikrocode und die Entwicklung eines zyklisch arbeitenden, mikrocodeprogrammierten Interpreters für Operationscodes (kurz Opcodes) ermöglichen die Implementierung von einzelnen mikrocodeprogrammierten Mikrobefehlssequenzen. Diese können als mikroprogrammierte Maschinenbefehle aufgefasst werden. Der Mikrocode kann als Firmware für MikroSim als Mikrocode-ROM-Datei (ROM, engl. Read-Only Memory) abgelegt, modifiziert und erneut geladen werden.
Innerhalb eines Mikrobefehlzyklus kann sowohl die CPU als auch ein Ein-Ausgabe-Kontroller auf einen externen 16 kB umfassenden RAM-Datenspeicher (RAM, engl. Random-Access Memory) zurückgreifen. Über den Ein-Ausgabe-Kontroller erfolgt die Kommunikation mit angeschlossenen Ein- und Ausgabekomponenten mit DMA-, I²C- und IRQ-Funktionalität. Unterstützt werden ein Ausgabe-Port, eine Anzeige, ein Zeitgeber, ein Ereignis-Trigger, ein Digital-Analog-Wandler, eine Tastatur und Daten-Ein-Ausgabe-Kanäle.
Der Mikrocodesimulator verwendet acht frei verwendbare 32-Bit-Register, deren Inhalt für vorzeichenbehaftete und vorzeichenlose Ganzzahlberechnungen, sowie für 32-Bit-Gleitkommaarithmetik eingesetzt werden. Mit einem übersichtlichen Systemzahleditor können die Registerinhalte betrachtet und modifiziert werden.
Die zentrale Recheneinheit des Simulators, die 32-Bit-ALU, unterstützt 128 verschiedene, grundlegende Rechenoperationen für Ganzzahlen und Interrupt-Steuerung bis hin zur Gleitkommaarithmetik, die als erstes in vergleichbarer Weise bereits von Konrad Zuse eingeführt wurde. Zur Verdeutlichung dieser Arithmetik stehen elementare Rechenoperationen für die schrittweise auflösbare Gleitkomma-Registeroperationen in Mantisse und Exponent von den Grundberechnungen Addition/Subtraktion und Multiplikation/Division zur Verfügung. Weiterführend werden darauf aufbauend mächtigere 32-Bit-Rechenbefehle der Gleitkommaarithmetik in Mantisse und Exponent für die Grundrechenarten und elementarer analytischer Funktionen bereitgestellt, wie sie in mathematischen Coprozessoren realisiert sind. Dabei wird idealisiert angenommen, dass jede der 128 unterstützten ALU-Rechenoperationen für die Ausführung nur einen virtuellen Rechentakt benötigt.
Die Mikrobefehle können auf verschiedenen Simulationsniveaus ausgeführt werden:
* In dem niedrigsten Simulationsniveau unterstützt der Simulator die phasenweise Abarbeitung eines Mikrobefehls, der in eine sogenannte Hol-, Rechen- und Bring-Phase unterteilt ist. Die Abarbeitung der Teilphasen ist mit einer einstellbaren Verzögerung zur besseren Nachverfolgung möglich.
* Darauf aufbauend ist die komplette Abarbeitung eines Mikrobefehls in einem Dreiphasen-Takt ohne Verzögerung möglich. Ebenso die Abarbeitung mehrerer zu einem Maschinenbefehl zusammenfassbarer Mikrobefehle mittels eines in Mikrocode programmierten Maschinencodeinterpreters. Der Interpreter hat die Aufgabe, Maschinensprachebefehle, als Operationscodes in einem Byte-Wert codiert, aus dem RAM zu holen und an die entsprechende Mikrocodeunterprogrammadresse zur mikroprogrammierten Ausführung zu verzweigen.
* Darüber hinaus ist die Abarbeitung mehrerer Maschinenbefehle bis zu einem frei definierbaren Haltepunkt möglich. Dabei kann die Zeit bis zum Erreichen des Halte-Punkts für Simulationsoptimierungen gestoppt werden.
* Im höchsten Simulationsniveau kann der Mikrocodesimulator im Freilauf-Modus ohne jegliche Unterbrechung Maschinensprachesequenzen abarbeiten und somit die Interaktion der Applikation mit Ein- und Ausgabeschnittstellen in den Vordergrund rücken.
Mit verschiedenen Zusatzoptionen können visuelle CPU-Aktivitäten zu Gunsten der Steigerung der Abarbeitungsgeschwindigkeit unterdrückt werden, so dass die Maschinenprogrammierung der virtuellen Applikation in den Vordergrund tritt. Mit dem Performance-Index-Monitor bietet der Simulator die Möglichkeit, die Abarbeitungsgeschwindigkeit und Ausführungsdauer entworfener Mikrobefehl-Sequenzen zu bestimmen und diese in Bezug zur Rechenleistung, gemessen in Gleitkommaoperationen pro Sekunde (FLOPS, engl. Floating Point Operations Per Second) und Maschinen-/Mikrobefehle pro Sekunde (MIPs, engl. Million Instructions per Second), der verwendeten Simulationshardware zu setzen.
Mit dem Zusatzprogramm MikroBAT, dem sogenannten „Basic Assembler Tool“ für MikroSim, können einfache Programme in Assembler erstellt werden. Dabei wird der Befehlsumfang unterstützter Mnemonics durch den Satz eigener mikrocodeprogrammierter Maschinenbefehle (Opcode) bestimmt. Das Zusatzprogramm ist in der Lage, das Assembler-Programm in Maschinencodes zu übersetzen und in den externen Datenspeicher für anschließende Simulationen zu übertragen. Zusammen mit MikroBAT behandelt der Mikrocodesimulator in didaktisch aufbauender Weise Lehraspekte der technischen Informatik vom schaltergesteuerten Rechenautomaten bis zur Assembler programmierbaren Applikation.