Emulatorentwicklung - Wo fange ich am besten an?

  • Hi,


    Ich möchte mich etwas intensiver mit der Emulatorentwicklung beschäftigen, jedoch weiß ich nicht wo ich da anfangen sollte. Grundlagen wären sicherlich gut, jedoch weiß ich nicht den Oberbegriff für das Thema (Wie funktioniert ein Computer(Register, Stack, ...)), somit konnte ich bis jetzt leider keine Informationen finden. Habt ihr irgendwelche Tipps? Und gibt es vielleicht irgendwo ein gutes/empfehlendwertes Assemblertutorial?


    Viele Grüße

  • Hey,


    der Oberbegriff wäre wohl Rechnerarchitektur. Die Details können da von System zu System ganz unterschiedlich sein. Für den Anfang würde ich dir einen NES oder Gameboy Emulator ans Herz legen, da diese Konsolen verhältnismäßig einfach zu emulieren sind (zum Vergleich, GBA oder NDS sind um Einiges komplexer und komplizierter zu emulieren, gerade wenn es performant sein soll). Ein einfacher Gameboy Emulator lässt sich mit etwas Übung in ca. 1-2 Monaten oder weniger implementieren, GBA dauert, wie ich aus Erfahrung sagen kann deutlich länger und kann teilweise sehr frustrierend sein. Ich empfehle dir außerdem, dir Source Codes von Emulatoren rauszusuchen, die in einer dir vertrauten Sprache geschrieben sind. Für den NES und den GB gibt es da bereits Einiges im Netz, auch in Hochsprachen wie C#, Java oder gar JavaScript.
    Was Assembler angeht, das hängt ganz vom Prozessor ab, für den du Assembler schreiben willst. Für ARM ist Wodkas Tutorial, ergänzt durch die offizielle Dokumentation zum Instruction-Set, recht gut. Allerdings ist ARM sehr schwer zu emulieren.


    Einige Themen mit denen du dich definitiv beschäftigen solltest sind:
    Register - https://de.wikipedia.org/wiki/Register_(Computer)
    Statusregister / Flags - https://de.wikipedia.org/wiki/Statusregister


    Bitweise und Logische Operatoren - https://de.wikipedia.org/wiki/Bitweiser_Operator
    Stack / Stapelspeicher - https://de.wikipedia.org/wiki/Stapelspeicher (siehe "Mikroprozessoren")


    Interrupts - https://de.wikipedia.org/wiki/Interrupt


    Die Wikipedia Links sollten natürlich nur Anfang für eigene Recherche sein ^^


    Hier findest du grundlegende Dokumentation zum Gameboy und NES.
    http://bgb.bircd.org/pandocs.htm
    http://fms.komkon.org/EMUL8/NES.htm



    Viel Spaß und Gutes Gelingen,


    hack!osa

  • Der Sammelbegriff ist, wie bereits erwähnt wurde "Rechnerarchitektur" - Ich habe ein paar Folien aus einem Universitätskurs dazu (auf Englisch) falls es dich interessiert - Du musst halt beachten, dass Embedded Systeme (Wie z.B. der GBA) viele Technologien einfach nicht verwenden, was viele Dinge vereinfacht, du brauchst dich z.B. nicht mit Memory Caching zu beschäftigen (Für Systeme wie den GBA zumindest nicht) und auch die Pipeline wird wsl. etwas anders aussehen. Bei Interesse: PN


    ~Sturmvogel


    Let the old ways live and prosper in the hearts of our young