In den letzten 2 Nächten hab ich mich mal mit dem Schreiben eines eigenes Emulators beschäftigt - also sowas wie Bochs selber machen. Ich hab einfach mal blind drauflos programmiert und bin zu einem "soliden Anfang" gekommen.
Inzwischen hab ich mich auch mal mit der Theorie hinter der Emulation von Prozessoren/PCs beschäftigt: Es gibt 3 Möglichkeiten ein Programm auszuführen
o 1 - Interpretation: Es wird ein Byte gelesen, decoded, ausgeführt, usw. Relativ einfach, gut erweiterbar (Debugging!), langsam. Bochs scheint diese Methode zu verwenden, mein Emualtor auch
o 2 - Static Recompilation: Programm wird vor dem Ausführen in den Befehlssatz des aktuellen Prozessors konvertiert. Wäre schnell, ist aber heute nicht mehr praktikabel
o 3 - Dynamic Recompilation: Genauso wie 2, aber der Code wird Stück für Stück und zur Laufzeit konvertiert. Schnell und auch heute praktikabel, aber Features wie Debugging sind fast unmöglich, außerdem ziemlich schwer zu programmieren. QEMU benutzt diese Technik.
Aber wieder zurück zu meinem Anfang...
Das ganze hat den grandiosen Namen MyEmu, ist in C++ geschrieben und hat momentan ca. 900 Zeilen Code. Man darf aber noch nicht allzu viel erwarten! Momentan kann man dem Emulator nur ein Diskimage mitgeben, dessen "Bootsector" dann in einen virtuellen Arbeitsspeicher an die Adresse 0x7C00 geladen wird - kennt man ja. Da beginnt dann auch die eigentliche Emulation. Allerdings bin ich noch nicht allzu weit - ich hab bisher nur ne Menge MOV-Varianten implementiert und die Befehle HLT und NOP. Das Ziel ist möglichst viel zu unterstützen, Features wie PMode will ich erstmal weglassen - zu kompliziert. Aber ein einfaches RealMode OS sollte man Ende darauf laufen.
Ich würde das Projekt gerne fortsetzen, um das echte Innenleben eines Prozessors besser kennen zu lernen und weil mir die Idee so gut gefäält, aber ich hab leider zu wenig Zeit. Wenn also Interesse besteht würde ich gerne zusammen mit einem kleinen Team weitermachen oder das ganze gleich unter die GPL stellen. Wenn jemand noch Fragen hat kann er die hier posten.
---Downloads---
Binary, Beispiele, Kurze Übersicht über alle Klassen (Linux)Die Windows-Version kommt vermutlich in den nächsten Tagen...