964 Stimmen

Wie funktionieren die Emulatoren und wie werden sie geschrieben?

Wie funktionieren die Emulatoren? Wenn ich NES/SNES- oder C64-Emulatoren sehe, erstaunt mich das.

http://www.tommowalker.co.uk/snemzelda.png

Müssen Sie den Prozessor dieser Maschinen emulieren, indem Sie seine speziellen Assemblerbefehle interpretieren? Was gehört noch dazu? Wie sind sie typischerweise aufgebaut?

Können Sie jemandem, der an der Entwicklung eines Emulators (insbesondere eines Spielsystems) interessiert ist, einen Rat geben?

15 Stimmen

Das Wichtigste, was Sie finden müssen, ist das "Programmiererhandbuch" für dieses System, da es den "Vertrag" zwischen dem HW-Anbieter und den Programmierern beschreibt und Details verbirgt, die nicht relevant sind und sich ändern könnten. Ihre Chancen hängen von der Popularität des Systems ab.

155 Stimmen

Gute Wahl des Spiels.

2 Stimmen

18voto

Guillermo Phillips Punkte 2056

Nachdem ich meinen eigenen Emulator des BBC-Mikrocomputers aus den 80er Jahren erstellt habe (geben Sie VBeeb in Google ein), gibt es eine Reihe von Dingen zu beachten.

  • Das ist keine Nachahmung des Originals, sondern eine Nachbildung. Stattdessen emulieren Sie Staat . Ein gutes Beispiel ist ein Taschenrechner. Das echte Ding hat Tasten, Bildschirm, Gehäuse usw. Aber um einen Taschenrechner zu emulieren, muss man nur emulieren, ob die Tasten oben oder unten sind, welche Segmente der LCD-Anzeige eingeschaltet sind, usw. Im Grunde genommen handelt es sich um eine Reihe von Zahlen, die alle möglichen Kombinationen von Dingen darstellen, die sich bei einem Taschenrechner ändern können.
  • Sie brauchen nur die Oberfläche des Emulators, die so aussieht und sich so verhält wie das echte Gerät. Je überzeugender dies ist, desto genauer ist die Emulation. Was hinter den Kulissen vor sich geht, kann alles sein, was Sie wollen. Aber um das Schreiben eines Emulators zu erleichtern, gibt es eine mentale Zuordnung zwischen dem realen System, d.h. Chips, Displays, Tastaturen, Platinen, und dem abstrakten Computercode.
  • Um ein Computersystem zu emulieren, ist es am einfachsten, es in kleinere Teile zu zerlegen und diese Teile einzeln zu emulieren. Dann fügt man das Ganze zu einem fertigen Produkt zusammen. Ähnlich wie eine Reihe von Black Boxes mit Eingängen und Ausgängen, was sich hervorragend für die objektorientierte Programmierung eignet. Sie können diese Teile weiter unterteilen, um sich das Leben leichter zu machen.

In der Praxis geht es beim Schreiben in der Regel um die Geschwindigkeit und die Genauigkeit der Emulation. Der Grund dafür ist, dass die Software auf dem Zielsystem langsamer läuft als die Originalhardware auf dem Quellsystem (möglicherweise). Dies kann die Wahl der Programmiersprache, des Compilers, des Zielsystems usw. einschränken.
Darüber hinaus muss man eingrenzen, was man zu emulieren bereit ist. So ist es zum Beispiel nicht notwendig, den Spannungszustand der Transistoren in einem Mikroprozessor zu emulieren, wohl aber den Zustand des Registersatzes des Mikroprozessors.
Im Allgemeinen gilt: Je geringer die Detailgenauigkeit der Emulation, desto größer ist die Übereinstimmung mit dem Originalsystem.
Schließlich sind die Informationen über ältere Systeme möglicherweise unvollständig oder gar nicht vorhanden. Daher ist es unerlässlich, sich Originalgeräte zu besorgen oder zumindest einen anderen guten Emulator aufzutreiben, den jemand anderes geschrieben hat!

17voto

Vilx- Punkte 100739

Ja, Sie müssen den gesamten binären Maschinencode "von Hand" interpretieren. Und nicht nur das: Meistens muss man auch noch exotische Hardware simulieren, die auf dem Zielrechner keine Entsprechung hat.

Der einfache Ansatz besteht darin, die Anweisungen nacheinander zu interpretieren. Das funktioniert gut, aber es ist langsam. Ein schnellerer Ansatz ist die Neukompilierung - die Übersetzung des Quellmaschinencodes in den Zielmaschinencode. Dies ist komplizierter, da die meisten Anweisungen nicht eins zu eins übertragen werden können. Stattdessen müssen Sie aufwendige Workarounds erstellen, die zusätzlichen Code erfordern. Aber letztendlich ist es viel schneller. Die meisten modernen Emulatoren tun dies.

1 Stimmen

Das Schlimmste ist bei weitem die fehlende Dokumentation. Wenn man herausfindet, dass der modifizierte Z80-Kern im GameBoy Color undokumentierte Flag-Operationen hat, die das Spiel, das man testet, verwendet, verliert man wirklich das Vertrauen.

1 Stimmen

Lieblingsärgernis: Es ist eine Maschine Code (Singular), nicht Maschine Codes (Plural); ebenso ist es Morsealphabet no Morsezeichen .

0 Stimmen

@Software Monkey - es sei denn, ich meine mit "Codes" "einzelne binäre Maschinenbefehle mit ihren Parametern".

15voto

Baget Punkte 3273

Wenn Sie einen Emulator entwickeln, interpretieren Sie die Prozessoreinheit, mit der das System arbeitet (Z80, 8080, PS CPU usw.).

Sie müssen auch alle Peripheriegeräte emulieren, die das System hat (Videoausgang, Controller).

Sie sollten anfangen, Emulatoren für die einfachen Systeme zu schreiben, wie die guten alten Game Boy (die einen Z80-Prozessor verwenden, wenn ich mich nicht irre) ODER für C64.

9 Stimmen

Ist der C64 ein "einfaches" System? Während der 6510 relativ einfach ist (wenn man die nicht aufgelisteten Opcodes kennt), sind die Sound- (SID) und Videochips (VIC) alles andere als einfach. sondern einfach. Um ein vernünftiges Maß an Kompatibilität zu erreichen, müsste man sie emulieren - mit Hardware-Fehlern und allem.

10voto

Someone Punkte 109

Emulator sind sehr schwer zu erstellen, da es viele Hacks (wie z.B. ungewöhnliche Effekte), Timing-Probleme usw. gibt, die man simulieren muss.

Ein Beispiel hierfür finden Sie unter http://queue.acm.org/detail.cfm?id=1755886 .

Das wird Ihnen auch zeigen, warum Sie eine Multi-GHz-CPU für die Emulation einer 1-MHz-CPU "brauchen".

9voto

Barry Bond Punkte 131

Sehen Sie sich auch Darek Mihocka's Emulatoren.de für großartige Ratschläge zur Optimierung auf Anweisungsebene für JITs und viele andere nützliche Informationen zur Entwicklung effizienter Emulatoren.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X