Emulatoren bauen ?

Guten Tag,

Jedem ist bestimmt schonmal ein emulator über den weg gelaufen oder hat zumindest schonmal davon gehört und weis worum es geht.

Meine Frage ist nun:
Einfach ist es bestimmt nicht, aber wo kann ich sowas lernen ? wie kann man es schaffen zb. einen c64 zu emulieren ? mein interresse liegt eher bei den Konsolen. Wobei ich es generell Interressant finde.

Man sieht öfter mal ein Playstation Emulator usw. wie wird sowas realisiert ? Mir geht es nicht um irgendetwas illegales nur finde ich die Tatsache sehr spannend eine Maschiene auf dem PC ‚nachzubauen‘. Aber sowas zeigt einem ja keiner, bzw. ist es schwer etwas über soetwas herauszufinden, da der Sinn und Zweck solcher Software meist unter dem Hammer des gesetzes steht…

Hallo,

Einfach ist es bestimmt nicht, aber wo kann ich sowas lernen ?

Also ich habe bisher noch kein „wir bauen eine Emulator“-Tutorial gesehen, aber ich kanns trotzdem mal probieren.

Es gibt grob gesprochen zwei Arten von Emulatoren:
Die einen emulieren die Hardware komplett, d.h. sie arbeiten ähnlich wie die Java Virtual Machine oder Parrot, also Befehlssatz völlig unabhängig vom Host (ich glaube, dass bochs so funktioniert).
Die anderen führen so viel byte code wie möglich nativ auf dem Hostsystem aus, und fangen nur auf dem hostsystem illegale Anweisungen, Speicherzugriffe etc. ab. Ein Beispiel für so ein System ist VMWare.

wie kann man es schaffen zb. einen c64 zu emulieren ?

Da müsstest du dich vermutlich mit der ersten Art von Emulator auseinandersetzen. Wenn es dazu speziell keine Literatur gibt, solltest du dich in Literatur zu virtuellen Maschinen umsehen.
Außerdem solltest du dich sehr gut mit dem Assembler von Host- und Gastsytem gut auskennen.
Und als Inspiration kannst du immer noch den Sourcecode anderer Open-Source-Emulatoren nehmen.

Grüße,
Moritz

Hallo Fragewurm,

Meine Frage ist nun:
Einfach ist es bestimmt nicht, aber wo kann ich sowas lernen ?
wie kann man es schaffen zb. einen c64 zu emulieren ? mein
interresse liegt eher bei den Konsolen. Wobei ich es generell
Interressant finde.

Das ist eigentlich ganz einfach :wink:

Als erstes besorgst du dir die Unterlagen der Ziel-CPU, hier wäre das der 6502.
Dann schreibst du eine Simulation für diese CPU. Damit kannst du dann schon mal 6502-Programme laufen lassen.

Die ROMs musst du dann von einem Original C64 kopieren und entsprechend in den Speicherbereich deiner Simulation laden.

Das schwierigste ist dann die Simulation der restlichen Hardware.
Grundsätzlich musst du die Speicherzugriffe deiner CPU-Simulation überwachen und dann die entsprechenden Resultate erzeugen.
Desweiteren wirst du auch bestimmte Funktionen im ROM abfangen müssen, es macht ja keinen Sinn die Datasette komplett zu simulieren, die Daten leitet man direkt auf eine Datei des Hostsystems um.

Die grundsätzlichen Techniken findest du beim Interpreter-/Compilerbau.

MfG Peter(TOO)

bedeutet also dass ich mir die Daten der Recheneinheit die ich simulieren möchte holen muss und deren befehle ‚umbaue‘ damit sie auf meinem System interpretiert werden können ?

was zusätzlich noch bedeutet Assembler zu lernen?
-Wenn ja, kannst du mir ein Bucg empfehlen ?

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Fragewurm,

bedeutet also dass ich mir die Daten der Recheneinheit die ich
simulieren möchte holen muss und deren befehle ‚umbaue‘ damit
sie auf meinem System interpretiert werden können ?

Im Prinzip ja.

was zusätzlich noch bedeutet Assembler zu lernen?

Ja.
Du musst zwar das Ganze nicht in Assembler programmieren, aber die simulierte CPU musst du in Software nachbauen und somit musst du diese auf Assemblerebene verstehen.

-Wenn ja, kannst du mir ein Bucg empfehlen ?

Am besten nimmst du das „Programming Manual“ der von dir auserkorenen CPU. Darin ist für jeden Befehl beschrieben was er macht, welche Flags verändert und wie der Befehl codiert ist.
Dieses Verhalten musst du dann mit deiner Software nachbilden.

MfG Peter(TOO)

bedeutet also dass ich mir die Daten der Recheneinheit die ich
simulieren möchte holen muss und deren befehle ‚umbaue‘ damit
sie auf meinem System interpretiert werden können ?

Hallo,

von umbauen ist keine Rede - du must die Befehle einfach erkennen und dann das machen, was im Prozessorhandbuch darüber steht. Dazu brauchst du zunächst mal ein Modell der CPU mit allen Registern, Statusbits usw. Wenn ein befehl also Akku und Register B addiert, dann nimmst du die Zahlen aus deinen Speicherplätzen für Akkumulator und Register B, zählst sie zusammen und speicherst das Ergebnis wieder im Akku (meistens, lies das Handbuch), und dann setzt du die Statusbits (Zero,Overflow,Carry…) wie im Handbuch definiert. Und schon hast du einen Befehl interpretiert! Her mit dem nächsten…

Gruss Reinhard

bedeutet also dass ich mir die Daten der Recheneinheit die ich

Genauer: der Recheneinheit en. Wie Peter schon angedeutet hat, besteht selbst ein primitives Gerät wie der C64 aus einer ganzen Reihe verschiedener Recheneinheiten, die du nicht nur jeweils einzeln nachbauen, sondern deren Zusammenspiel du auch noch emulieren musst.

Angenommen, du verzichtetest auf Taktgeber, Interrupts und damit auf den halben Rechner-Kern, auf Sound- und Grafikchip sowie auf alle peripheren Anschlüsse, hättest du immerhin schon mal den nackten puren CMOS nachgebaut. Der sich vom Hardware-Original eigentlich nur noch darin unterscheidet, dass du beim emulierten Chip die silbrig behaarten Beinchen nicht siehst. Er unterscheidet sich aber nicht darin, dass du mit ihm wie mit dem nackten Chip zunächst nicht viel anfangen kannst.

Aber ich will dir den Mut nicht nehmen… Eine interessante Aufgabe ist selbst der Nachbau des nackten 6502 allemal. Benötigte Infos finden sich hier: http://www.6502.org/documents/books/

Schorsch

Erstmal Danke an Alle die mir Helfen ! -Klasse ich hätte nie gedacht das mir so viele Leute(wenn überhaupt einer) so weiterhelfen können/wollen :wink:

So wie ich dass abschätze ist das alles ein Haufen arbeit ^^.
Gibt es nicht ein Forum/board welches sich damit auseinandersetzt ? bzw. kennt ihr eins ? denn Dr. Google weis nicht viel wenn ich danach suche…

Und bekommt man die Bücher einer CPU denn so einfach ? Also c64 mal aussenvor, aber ich kann mir kaum vorstellen, dass eine Firma wie zB. Sony oder Nintendo deren Daten so gerne Preisgeben und geschaft haben es Fans ja doch deren Systeme weitestgehend zu emulieren. Wie gesagt ohne illegalen hintergedanken!

Ich denke mal dass man so ja auch sein eigenes Rechenwerk oder OS schreiben kann oder ?

fragen über fragen :wink: danke nochmal!
P.S. ich finde bis jetzt keinen openSource emulator…

Hallo,

Als erstes besorgst du dir die Unterlagen der Ziel-CPU, hier
wäre das der 6502.
Dann schreibst du eine Simulation für diese CPU. Damit kannst
du dann schon mal 6502-Programme laufen lassen.

Klugscheißmodus: AFAIK war das nicht der 6502 sondern der Nachfolger, 6510. Waren aber beide fast identisch.

Das schwierigste ist dann die Simulation der restlichen
Hardware.

Ja, die Prozessoremulation ist Vergleich dazu Pillepalle. Gerade Homecomputer wie der C64 benutzten etliche Hardware, die verschiedene Spezialaufgaben ubernahmen um die CPU zu entlasten.

Beim C64 waren das z.B. der Graphikchip VIC II (Spezialität: konnte Hardwaresprites darstellen). Der Soundchip SID (mit mehreren Synthies). Die beiden CIAs (I/O, mit direktem Zugriff auf den Adressbus).

Desweiteren wirst du auch bestimmte Funktionen im ROM abfangen
müssen, es macht ja keinen Sinn die Datasette komplett zu
simulieren, die Daten leitet man direkt auf eine Datei des
Hostsystems um.

IMO ist es wahrscheinlich einfacher (und flexibler), statt der Datasette das Floppy Disk Laufwerk zu emulieren. Das dürfte in Sachen Funktionalität den heutigen Massenspeichern (Floppy, HD) ähnlicher sein. Beim C64 ist aber zu beachten, daß es keinen I/O-Controller (wie heute) gab. Das übernahm das Lufwerk selbst, bei dem es sich nämlich um einen eigenständigen Computer handelte, diesesmal mit einer 6502 betrieben.

P.S. Um solide (!) Kenntnisse des 6510-Assembler wird man wohl nicht rumkonnen…

Grüsse,

Tim

Hallo Tim,

Als erstes besorgst du dir die Unterlagen der Ziel-CPU, hier
wäre das der 6502.
Dann schreibst du eine Simulation für diese CPU. Damit kannst
du dann schon mal 6502-Programme laufen lassen.

Klugscheißmodus: AFAIK war das nicht der 6502 sondern der
Nachfolger, 6510. Waren aber beide fast identisch.

Es war eine ganze Serie von CPUs.
Der 6501 war pinkompatibel zum Motorola 6801, musste dann aber vom Markt genommen werden.

Der 6502 war in einem 40 Pin Gehäuse und hatte alle Anschlüsse herausgeführt.
dann gab es noch jede Menge 650x Modelle, welche in 28 Pin, und IMHO 24 Pin, Gehäuse geliefert wurden. Bei diesen Ausführungen waren vor allen nicht alle Adressleitungen herausgeführt. Teilweise wurde auch an den Controlpins gespart. Zumindest anfänglich waren da aber normale 6502-Chips in den Gehäusen.

Dann gab es noch die 651x. Eigentlich alles wie bei den 650x, aber diese hatten den Clockgenerator nicht auf dem Chip.

Der 6510 war ein normaler 6502 mit einem zusätzlichen 6-Bit Port.
Der 6511 kam Später und hatte RAM und Peripherie mit auf dem Chip

Der CPU-Core selbst war bei allen identisch.

Später gab es dann auch CMOS-Version mit ein paar zusätzliche Befehlen.

MfG Peter(TOO)

Danke an alle !!!

Der c64 war nur ein beispiel um nicht in die illegale schiene geschoben zu werden^^

Aber hochinterressant, manchmal wünsche ich mir ich wäre mal eben 20 jahre früher geboren…