Emulator – Wikipedia

before-content-x4

Beim Rechnen ein Emulator ist Hardware oder Software, die ein Computersystem ermöglicht (genannt Gastgeber) sich wie ein anderes Computersystem zu verhalten (genannt Gast). Ein Emulator ermöglicht es dem Host-System normalerweise, Software auszuführen oder Peripheriegeräte zu verwenden, die für das Gastsystem entwickelt wurden. Emulation bezieht sich auf die Fähigkeit eines Computerprogramms in einem elektronischen Gerät, ein anderes Programm oder Gerät zu emulieren (oder zu imitieren). Viele Drucker sind beispielsweise so konzipiert, dass sie HP LaserJet-Drucker emulieren, da so viel Software für HP Drucker geschrieben wurde. Wenn ein Nicht-HP-Drucker einen HP-Drucker emuliert, wird jede für einen echten HP-Drucker geschriebene Software auch in der Nicht-HP-Druckeremulation ausgeführt und erzeugt einen gleichwertigen Druck. Seit mindestens den 1990er Jahren haben viele Videospiel-Enthusiasten Emulatoren verwendet, um klassische (und / oder vergessene) Arcade-Spiele aus den 1980er Jahren unter Verwendung des ursprünglichen Maschinencodes und der Daten der 1980er Jahre zu spielen, die von einem aktuellen System interpretiert und emuliert werden alte Videospielkonsolen.

Ein Hardware-Emulator ist ein Emulator, der die Form eines Hardwaregeräts hat. Beispiele hierfür sind die DOS-kompatiblen Karten, die auf Macintosh-Computern der 90er Jahre installiert sind, z. B. Centris 610 oder Performa 630, mit denen Personal Computer (PC) -Softwareprogramme und FPGA-basierte Hardwareemulatoren ausgeführt werden konnten. In einem theoretischen Sinne impliziert die Church-Turing-These, dass (unter der Annahme, dass genügend Speicher verfügbar ist) jede Betriebsumgebung in jeder anderen Umgebung emuliert werden kann. In der Praxis kann es jedoch sehr schwierig sein, insbesondere wenn das genaue Verhalten des zu emulierenden Systems nicht dokumentiert ist und durch Reverse Engineering abgeleitet werden muss. Es sagt auch nichts über zeitliche Einschränkungen aus; Wenn der Emulator nicht so schnell wie die ursprüngliche Hardware arbeitet, läuft die emulierte Software möglicherweise viel langsamer als auf der ursprünglichen Hardware und löst möglicherweise Timer-Interrupts aus, die das Verhalten ändern.

“Kann ein Commodore 64 MS-DOS emulieren?” Ja, es ist möglich für a [Commodore] 64, um einen IBM PC zu emulieren [which uses MS-DOS]in dem gleichen Sinne, wie es möglich ist, den Michigansee mit einem Teelöffel zu retten.

– –Brief an Berechnen! und redaktionelle Antwort, April 1988[1]

In Erhaltung[edit]

Emulation ist eine Strategie zur digitalen Aufbewahrung zur Bekämpfung von Veralterung. Die Emulation konzentriert sich auf die Wiederherstellung einer ursprünglichen Computerumgebung, die zeitaufwändig und schwierig zu erreichen sein kann, aber aufgrund ihrer Fähigkeit, eine engere Verbindung zur Authentizität des digitalen Objekts aufrechtzuerhalten, wertvoll ist.[2] Die Emulation adressiert die ursprüngliche Hardware- und Softwareumgebung des digitalen Objekts und erstellt sie auf einem aktuellen Computer neu.[3] Der Emulator ermöglicht dem Benutzer den Zugriff auf jede Art von Anwendung oder Betriebssystem auf einer aktuellen Plattform, während die Software wie in ihrer ursprünglichen Umgebung ausgeführt wird.[4] Jeffery Rothenberg, ein früher Befürworter der Emulation als Strategie zur digitalen Aufbewahrung, erklärt: “Der ideale Ansatz würde eine einzige erweiterbare, langfristige Lösung bieten, die ein für alle Mal entworfen und einheitlich, automatisch und synchron angewendet werden kann (z. B. bei jedem Aktualisierungszyklus) auf alle Arten von Dokumenten und Medien “.[5] Er führt weiter aus, dass dies nicht nur für veraltete Systeme gelten sollte, sondern auch für zukünftige unbekannte Systeme aufwärtsbeweglich sein sollte.[6] In der Praxis könnte man, wenn eine bestimmte Anwendung in einer neuen Version veröffentlicht wird, anstatt Kompatibilitätsprobleme und Migration für jedes in der vorherigen Version dieser Anwendung erstellte digitale Objekt zu beheben, einen Emulator für die Anwendung erstellen, der den Zugriff auf alle digitalen Objekte ermöglicht Objekte.

Leistungen[edit]

Basilisk II emuliert einen Macintosh 68k mit Interpretationscode und dynamischer Neukompilierung.
  • Potenziell bessere Grafikqualität als Originalhardware.
  • Potenziell zusätzliche Funktionen hatte die ursprüngliche Hardware nicht.
  • Emulatoren behalten das ursprüngliche Erscheinungsbild und Verhalten des digitalen Objekts bei, das genauso wichtig ist wie die digitalen Daten selbst.[7]
  • Trotz der ursprünglichen Kosten für die Entwicklung eines Emulators kann sich dieser im Laufe der Zeit als kostengünstigere Lösung erweisen.[8]
  • Reduziert die Arbeitszeit, da die fortlaufende Aufgabe der kontinuierlichen Datenmigration für jedes digitale Objekt fortgesetzt wird. Sobald die Bibliothek vergangener und aktueller Betriebssysteme und Anwendungssoftware in einem Emulator eingerichtet ist, werden dieselben Technologien für jedes Dokument verwendet, das diese Plattformen verwendet.[4]
  • Viele Emulatoren wurden bereits unter der GNU General Public License über die Open Source-Umgebung entwickelt und veröffentlicht, was eine umfassende Zusammenarbeit ermöglicht.[9]
  • Mit Emulatoren kann Software, die nur für ein System verfügbar ist, auf einem anderen System verwendet werden. Beispielsweise könnte ein exklusives PlayStation 2-Videospiel mit einem Emulator auf einem PC gespielt werden. Dies ist besonders nützlich, wenn das ursprüngliche System schwer zu bekommen oder mit modernen Geräten nicht kompatibel ist (z. B. können alte Videospielkonsolen, die über analoge Ausgänge angeschlossen werden, möglicherweise nicht mit modernen Fernsehgeräten verbunden werden, die möglicherweise nur über digitale Eingänge verfügen).

Hindernisse[edit]

  • Geistiges Eigentum – Viele Technologieanbieter haben während der Programmentwicklung nicht standardmäßige Funktionen implementiert, um ihre Marktnische zu etablieren und gleichzeitig fortlaufende Upgrades durchzuführen, um wettbewerbsfähig zu bleiben. Dies hat zwar die Technologiebranche vorangebracht und den Marktanteil des Anbieters erhöht, die Benutzer sind jedoch aufgrund des proprietären Charakters der Hardware und Software in einem Alptraum der Aufbewahrung mit wenig unterstützender Dokumentation verloren gegangen.[10]
  • Das Urheberrecht zum Speichern der Dokumentation und Spezifikationen von proprietärer Software und Hardware in einem Emulatormodul ist noch nicht in Kraft.[11]
  • Emulatoren werden häufig als Tool zur Verletzung von Urheberrechten verwendet, da sie es Benutzern ermöglichen, Videospiele zu spielen, ohne die Konsole kaufen zu müssen, und selten versuchen, die Verwendung illegaler Kopien zu verhindern. Dies führt zu einer Reihe von rechtlichen Unsicherheiten in Bezug auf die Emulation und dazu, dass Software so programmiert wird, dass sie die Arbeit verweigert, wenn sie erkennt, dass der Host ein Emulator ist. Insbesondere einige Videospiele werden weiterhin ausgeführt, ermöglichen es dem Spieler jedoch nicht, über ein spätes Stadium des Spiels hinaus voranzukommen, was häufig als fehlerhaft oder nur äußerst schwierig erscheint.[12][13] Diese Schutzmaßnahmen erschweren das Entwerfen von Emulatoren, da sie genau genug sein müssen, um das Auslösen der Schutzfunktionen zu vermeiden, deren Auswirkungen möglicherweise nicht offensichtlich sind.
  • Emulatoren erfordern eine bessere Hardware als das ursprüngliche System.

In der Kunst der neuen Medien[edit]

Aufgrund der primären Verwendung digitaler Formate stützt sich die Kunst der neuen Medien stark auf die Emulation als Aufbewahrungsstrategie. Künstler wie Cory Arcangel sind darauf spezialisiert, veraltete Technologien in ihren Kunstwerken wiederzubeleben, und erkennen die Bedeutung eines dezentralen und deinstitutionalisierten Prozesses für die Erhaltung der digitalen Kultur an. In vielen Fällen besteht das Ziel der Emulation in der Kunst neuer Medien darin, ein digitales Medium so zu erhalten, dass es unbegrenzt gespeichert und fehlerfrei reproduziert werden kann, sodass keine Abhängigkeit von Hardware besteht, die altert und veraltet ist. Das Paradoxe ist, dass die Emulation und der Emulator für zukünftige Computer erstellt werden müssen.[14]

Im zukünftigen Systemdesign[edit]

Emulationstechniken werden üblicherweise beim Entwurf und der Entwicklung neuer Systeme verwendet. Es vereinfacht den Entwicklungsprozess, indem es die Möglichkeit bietet, Fehler im Design zu erkennen, neu zu erstellen und zu reparieren, noch bevor das System tatsächlich gebaut wird.[15] Dies ist besonders nützlich beim Entwurf von Mehrkernsystemen, bei denen Parallelitätsfehler ohne die von der virtuellen Hardware bereitgestellte kontrollierte Umgebung nur sehr schwer zu erkennen und zu korrigieren sind.[16] Dies ermöglicht auch die Softwareentwicklung, bevor die Hardware bereit ist.[17] Dies hilft bei der Validierung von Entwurfsentscheidungen.

Die meisten Emulatoren emulieren lediglich eine Hardwarearchitektur. Wenn für die gewünschte Software Firmware oder Software des Betriebssystems erforderlich ist, muss diese ebenfalls bereitgestellt werden (und kann selbst emuliert werden). Sowohl das Betriebssystem als auch die Software werden dann vom Emulator interpretiert und nicht von nativer Hardware ausgeführt. Abgesehen von diesem Interpreter für die Sprache der emulierten Binärmaschine muss auch andere Hardware (wie Eingabe- oder Ausgabegeräte) in virtueller Form bereitgestellt werden. Wenn beispielsweise das Schreiben in einen bestimmten Speicherort die Anzeige auf dem Bildschirm beeinflussen soll, muss dies emuliert werden. Während die Emulation, wenn sie auf das Äußerste gebracht wird, auf die atomare Ebene sinken könnte und ihre Ausgabe auf einer Simulation der tatsächlichen Schaltung von einer virtuellen Energiequelle basiert, wäre dies eine höchst ungewöhnliche Lösung. Emulatoren stoppen normalerweise bei einer Simulation der dokumentierten Hardwarespezifikationen und der digitalen Logik. Eine ausreichende Emulation einiger Hardwareplattformen erfordert extreme Genauigkeit bis hin zu einzelnen Taktzyklen, nicht dokumentierten Funktionen, unvorhersehbaren analogen Elementen und Implementierungsfehlern. Dies ist insbesondere bei klassischen Heimcomputern wie dem Commodore 64 der Fall, dessen Software häufig von hochentwickelten Low-Level-Programmiertricks abhängt, die von Spielprogrammierern und der “Demoszene” erfunden wurden.

Im Gegensatz dazu haben einige andere Plattformen die direkte Hardware-Adressierung nur sehr wenig genutzt, beispielsweise ein Emulator für die PlayStation 4.[18] In diesen Fällen kann eine einfache Kompatibilitätsschicht ausreichen. Dies übersetzt Systemaufrufe für das fremde System in Systemaufrufe für das Hostsystem, z. B. die Linux-Kompatibilitätsschicht, die auf * BSD verwendet wird, um native Closed-Source-Linux-Software unter FreeBSD, NetBSD und OpenBSD auszuführen. Während beispielsweise der Nintendo 64-Grafikprozessor vollständig programmierbar war, verwendeten die meisten Spiele eines der wenigen vorgefertigten Programme, die größtenteils in sich geschlossen waren und über FIFO mit dem Spiel kommunizierten. Daher emulieren viele Emulatoren den Grafikprozessor überhaupt nicht, sondern interpretieren die von der CPU empfangenen Befehle einfach wie das ursprüngliche Programm. Entwickler von Software für eingebettete Systeme oder Videospielkonsolen entwerfen ihre Software häufig auf besonders genauen Emulatoren, sogenannten Simulatoren, bevor sie sie auf der realen Hardware ausprobieren. Auf diese Weise kann Software erstellt und getestet werden, bevor die endgültige Hardware in großen Mengen vorhanden ist, sodass sie getestet werden kann, ohne sich die Zeit zu nehmen, das zu debuggende Programm auf einer niedrigen Ebene zu kopieren, und ohne die Nebenwirkungen eines Debuggers einzuführen. In vielen Fällen wird der Simulator tatsächlich von dem Unternehmen hergestellt, das die Hardware bereitstellt, was theoretisch seine Genauigkeit erhöht. Mit Emulatoren für mathematische Co-Prozessoren können Programme, die mit mathematischen Anweisungen kompiliert wurden, auf Computern ausgeführt werden, auf denen der Co-Prozessor nicht installiert ist. Die zusätzliche Arbeit der CPU kann das System jedoch verlangsamen. Wenn kein mathematischer Coprozessor auf der CPU installiert ist oder vorhanden ist, führt die CPU beim Ausführen eines Co-Prozessor-Befehls einen bestimmten Interrupt aus (Coprozessor nicht verfügbar) und ruft die Routinen des mathematischen Emulators auf. Wenn der Befehl erfolgreich emuliert wurde, wird das Programm weiter ausgeführt.

Struktur[edit]

In der Regel ist ein Emulator in Module unterteilt, die in etwa den Subsystemen des emulierten Computers entsprechen. Meistens besteht ein Emulator aus folgenden Modulen:

  • ein CPU-Emulator oder ein CPU-Simulator (die beiden Begriffe sind in diesem Fall meistens austauschbar), es sei denn, das zu emulierende Ziel hat dieselbe CPU-Architektur wie der Host. In diesem Fall kann stattdessen eine virtuelle Maschinenschicht verwendet werden
  • ein Speichersubsystemmodul
  • verschiedene Emulatoren für Ein- / Ausgabegeräte (E / A)

Busse werden häufig weder aus Gründen der Leistung noch aus Gründen der Einfachheit emuliert, und virtuelle Peripheriegeräte kommunizieren direkt mit der CPU oder dem Speichersubsystem.

Speichersubsystem[edit]

Es ist möglich, die Emulation des Speichersubsystems auf einfach ein Array von Elementen zu reduzieren, die jeweils die Größe eines emulierten Wortes haben. Dieses Modell schlägt jedoch sehr schnell fehl, sobald ein Speicherort im logischen Speicher des Computers nicht mit dem physischen Speicher übereinstimmt. Dies ist eindeutig der Fall, wenn die emulierte Hardware eine erweiterte Speicherverwaltung ermöglicht (in diesem Fall kann die MMU-Logik in den Speicheremulator eingebettet, zu einem eigenen Modul gemacht oder manchmal in den CPU-Simulator integriert werden). Selbst wenn der emulierte Computer keine MMU enthält, gibt es normalerweise andere Faktoren, die die Äquivalenz zwischen logischem und physischem Speicher aufheben: Viele (wenn nicht die meisten) Architekturen bieten speicherabgebildete E / A; selbst diejenigen, denen nicht oft ein Block eines logischen Speichers auf den ROM abgebildet ist, was bedeutet, dass das Speicherarray-Modul verworfen werden muss, wenn die schreibgeschützte Natur des ROM emuliert werden soll. Funktionen wie Bankwechsel oder Segmentierung können auch die Speicheremulation erschweren. Infolgedessen implementieren die meisten Emulatoren mindestens zwei Prozeduren zum Schreiben und Lesen aus dem logischen Speicher, und es ist die Pflicht dieser Prozeduren, jeden Zugriff auf den richtigen Ort des richtigen Objekts abzubilden.

Auf einem Basislimit-Adressierungssystem, bei dem Speicher von Adresse 0 zu adressieren ROMSIZE-1 ist ein Nur-Lese-Speicher, während der Rest RAM ist, wäre etwas in der Art der folgenden Prozeduren typisch:

void WriteMemory(word Address, word Value) {
    word RealAddress;
    RealAddress = Address + BaseRegister;
    if ((RealAddress < LimitRegister) &&
        (RealAddress > ROMSIZE)) {
        Memory[RealAddress] = Value;
    } else {
        RaiseInterrupt(INT_SEGFAULT);
    }
}
word ReadMemory(word Address) {
    word RealAddress;
    RealAddress=Address+BaseRegister;
    if (RealAddress < LimitRegister) {
        return Memory[RealAddress];
    } else {
        RaiseInterrupt(INT_SEGFAULT);
        return NULL;
    }
}

CPU-Simulator[edit]

Der CPU-Simulator ist oft der komplizierteste Teil eines Emulators. Viele Emulatoren werden mit “vorgefertigten” CPU-Simulatoren geschrieben, um sich auf eine gute und effiziente Emulation einer bestimmten Maschine zu konzentrieren. Die einfachste Form eines CPU-Simulators ist ein Interpreter, ein Computerprogramm, das dem Ausführungsfluss des emulierten Programmcodes folgt und für jede angetroffene Maschinencode-Anweisung Operationen auf dem Host-Prozessor ausführt, die semantisch den ursprünglichen Anweisungen entsprechen. Dies wird ermöglicht, indem jedem Register und Flag der simulierten CPU eine Variable zugewiesen wird. Die Logik der simulierten CPU kann dann mehr oder weniger direkt in Softwarealgorithmen übersetzt werden, wodurch eine Software-Neuimplementierung erstellt wird, die im Wesentlichen die ursprüngliche Hardware-Implementierung widerspiegelt.

Das folgende Beispiel zeigt, wie eine CPU-Simulation von einem Interpreter durchgeführt werden kann. In diesem Fall werden Interrupts vor jeder ausgeführten Anweisung überprüft, obwohl dieses Verhalten in realen Emulatoren aus Leistungsgründen selten ist (es ist im Allgemeinen schneller, eine Unterroutine zu verwenden, um die Arbeit eines Interrupts auszuführen).

void Execute(void) {
    if (Interrupt != INT_NONE) {
        SuperUser = TRUE;
        WriteMemory(++StackPointer, ProgramCounter);
        ProgramCounter = InterruptPointer;
    }
    switch (ReadMemory(ProgramCounter++)) {
        /*
         * Handling of every valid instruction
         * goes here...
         */
        default:
        Interrupt = INT_ILLEGAL;
    }
}

Dolmetscher sind als Computersimulatoren sehr beliebt, da sie viel einfacher zu implementieren sind als zeiteffizientere alternative Lösungen, und ihre Geschwindigkeit ist mehr als ausreichend, um Computer von mehr als einem Jahrzehnt auf modernen Maschinen zu emulieren. Der der Interpretation inhärente Geschwindigkeitsverlust kann jedoch ein Problem sein, wenn Computer emuliert werden, deren Prozessorgeschwindigkeit in der Größenordnung des Host-Computers liegt[dubious ]. Bis vor nicht allzu vielen Jahren wurde die Emulation in solchen Situationen von vielen als völlig unpraktisch angesehen[dubious ].

Was es ermöglichte, diese Einschränkung zu durchbrechen, waren die Fortschritte bei den dynamischen Neukompilierungstechniken[dubious ]. Einfach a priori Die Übersetzung von emuliertem Programmcode in Code, der auf der Hostarchitektur ausgeführt werden kann, ist normalerweise aus mehreren Gründen nicht möglich:

  • Der Code kann im RAM geändert werden, auch wenn er beim Laden des Codes nur vom emulierten Betriebssystem geändert wird (z. B. von der Festplatte).
  • Es gibt möglicherweise keine Möglichkeit, Daten (die nicht übersetzt werden sollten) zuverlässig von ausführbarem Code zu unterscheiden.

Verschiedene Formen der dynamischen Neukompilierung, einschließlich der beliebten JIT-Technik (Just In Time Compiler), versuchen, diese Probleme zu umgehen, indem sie warten, bis der Prozessorsteuerungsfluss an einen Ort mit nicht übersetztem Code springt, und erst dann (“just in time”) a übersetzen Block des Codes in Host-Code, der ausgeführt werden kann. Der übersetzte Code wird in a gespeichert Code-Cache[dubious ]und der ursprüngliche Code geht nicht verloren oder ist betroffen; Auf diese Weise können sogar Datensegmente (bedeutungslos) vom Recompiler übersetzt werden, was nur zu einer Verschwendung von Übersetzungszeit führt. Geschwindigkeit ist möglicherweise nicht wünschenswert, da einige ältere Spiele nicht für die Geschwindigkeit schnellerer Computer entwickelt wurden. Ein Spiel, das für einen 30-MHz-PC mit einem Level-Timer von 300 Spielsekunden entwickelt wurde, gibt dem Spieler möglicherweise nur 30 Sekunden auf einem 300-MHz-PC. Andere Programme, wie z. B. einige DOS-Programme, werden möglicherweise nicht einmal auf schnelleren Computern ausgeführt. Insbesondere bei der Emulation von Computern, die “Closed-Box” waren und bei denen Änderungen am Kern des Systems nicht typisch waren, kann Software Techniken verwenden, die von bestimmten Eigenschaften des Computers abhängen, auf dem sie ausgeführt wird (z. B. die Geschwindigkeit der CPU) und somit eine präzise Steuerung Die Geschwindigkeit der Emulation ist wichtig, damit solche Anwendungen ordnungsgemäß emuliert werden können.

Ein- / Ausgang (E / A)[edit]

Die meisten Emulatoren emulieren, wie bereits erwähnt, den Hauptsystembus nicht. Jedes E / A-Gerät wird daher häufig als Sonderfall behandelt, und es wird keine konsistente Schnittstelle für virtuelle Peripheriegeräte bereitgestellt. Dies kann zu einem Leistungsvorteil führen, da jedes E / A-Modul auf die Eigenschaften des emulierten Geräts zugeschnitten werden kann. Entwürfe, die auf einer einheitlichen Standard-E / A-API basieren, können jedoch mit solchen einfacheren Modellen mithalten, wenn sie gut durchdacht sind, und sie haben den zusätzlichen Vorteil, dass sie “automatisch” einen Plug-in-Dienst bereitstellen, über den virtuelle Geräte von Drittanbietern bereitgestellt werden können innerhalb des Emulators verwendet werden. Eine einheitliche E / A-API spiegelt möglicherweise nicht unbedingt die Struktur des realen Hardwarebusses wider: Das Busdesign ist durch mehrere elektrische Einschränkungen und die Notwendigkeit eines Hardware-Parallelitätsmanagements begrenzt, das in einer Softwareimplementierung meist ignoriert werden kann.

Selbst in Emulatoren, die jedes Gerät als Sonderfall behandeln, gibt es normalerweise eine gemeinsame Basisinfrastruktur für:

  • Verwalten von Interrupts mithilfe einer Prozedur, die vom CPU-Simulator lesbare Flags setzt, wenn ein Interrupt ausgelöst wird, sodass die virtuelle CPU “nach (virtuellen) Interrupts abfragen” kann.
  • Schreiben in das physische Gedächtnis und Lesen aus dem physischen Gedächtnis mittels zweier Verfahren, die denen ähnlich sind, die sich mit dem logischen Gedächtnis befassen (obwohl im Gegensatz zu letzterem das erstere können oft weggelassen werden und stattdessen direkte Verweise auf das Speicherarray verwendet werden)

Vergleich mit Simulation[edit]

Das Wort “Emulator” wurde 1963 bei IBM geprägt[19] während der Entwicklung der NPL-Produktlinie (IBM System / 360) unter Verwendung einer “neuen Kombination aus Software, Mikrocode und Hardware”.[20]

Sie stellten fest, dass die Simulation mit zusätzlichen Anweisungen, die in Mikrocode und Hardware implementiert sind, anstelle der Softwaresimulation mit nur Standardanweisungen zur Ausführung von Programmen, die für frühere IBM Computer geschrieben wurden, die Simulationsgeschwindigkeit erheblich erhöhte. Zuvor hatte IBM Simulatoren für z. B. den 650 auf dem 705 bereitgestellt.[21] Zusätzlich zu den Simulatoren verfügte IBM über Kompatibilitätsfunktionen für die Modelle 709 und 7090.[22] Der Computer des IBM 709 erhielt ein Programm zum Ausführen von Legacy-Programmen, die für den IBM 704 auf dem 709 und später auf dem IBM 7090 geschrieben wurden. Dieses Programm verwendete die Anweisungen, die durch die Kompatibilitätsfunktion hinzugefügt wurden[23] Anweisungen abzufangen, die eine besondere Behandlung erfordern; Alle anderen 704-Anweisungen liefen auf einem 7090 gleich. Die Kompatibilitätsfunktion auf dem 1410[24] Es muss nur ein Kippschalter für die Konsole eingestellt werden, kein Support-Programm.

Als 1963 erstmals Mikrocode verwendet wurde, um diesen Simulationsprozess zu beschleunigen, prägten die IBM Ingenieure den Begriff “Emulator”, um das Konzept zu beschreiben. In den 2000er Jahren ist es üblich geworden, das Wort “emulieren” im Kontext von Software zu verwenden. Vor 1980 bezog sich “Emulation” jedoch nur auf die Emulation mit einem Hardware- oder Mikrocode-Assistenten, während sich “Simulation” auf eine reine Software-Emulation bezog.[25] Ein Computer, der speziell zum Ausführen von Programmen entwickelt wurde, die für eine andere Architektur entwickelt wurden, ist beispielsweise ein Emulator. Im Gegensatz dazu kann ein Simulator ein Programm sein, das auf einem PC ausgeführt wird, sodass alte Atari-Spiele darauf simuliert werden können. Puristen bestehen weiterhin auf dieser Unterscheidung, aber derzeit bedeutet der Begriff “Emulation” häufig die vollständige Nachahmung einer Maschine, die Binärcode ausführt, während sich “Simulation” häufig auf Computersimulationen bezieht, bei denen ein Computerprogramm zur Simulation eines abstrakten Modells verwendet wird. Computersimulation wird in praktisch allen wissenschaftlichen und technischen Bereichen eingesetzt, und Informatik ist keine Ausnahme. Mehrere Projekte simulieren abstrakte Modelle von Computersystemen wie die Netzwerksimulation, die sich sowohl praktisch als auch semantisch von der Netzwerkemulation unterscheiden.[26]

Logiksimulatoren[edit]

Die Logiksimulation ist die Verwendung eines Computerprogramms, um den Betrieb einer digitalen Schaltung wie eines Prozessors zu simulieren. Dies erfolgt, nachdem eine digitale Schaltung in logischen Gleichungen entworfen wurde, aber bevor die Schaltung in Hardware hergestellt wird.

Funktionssimulatoren[edit]

Funktionssimulation ist die Verwendung eines Computerprogramms, um die Ausführung eines zweiten Computerprogramms zu simulieren, das in symbolischer Assemblersprache oder Compilersprache anstatt in binärem Maschinencode geschrieben ist. Mithilfe eines Funktionssimulators können Programmierer ausgewählte Abschnitte des Quellcodes ausführen und verfolgen, um nach Programmierfehlern (Bugs) zu suchen, ohne Binärcode zu generieren. Dies unterscheidet sich von der Simulation der Ausführung von Binärcode, bei der es sich um eine Softwareemulation handelt. Der erste Funktionssimulator wurde von Autonetics um 1960 geschrieben, um Assembler-Programme für die spätere Ausführung im Militärcomputer D-17B zu testen. Dies ermöglichte es, Flugprogramme zu schreiben, auszuführen und zu testen, bevor D-17B-Computerhardware gebaut wurde. Autonetics programmierte auch einen Funktionssimulator zum Testen von Flugprogrammen für die spätere Ausführung im Militärcomputer D-37C.

Videospielkonsolen[edit]

Emulatoren für Videospielkonsolen sind Programme, mit denen ein PC oder eine Videospielkonsole eine andere Videospielkonsole emulieren kann. Sie werden am häufigsten verwendet, um ältere Videospiele der 1980er bis 2000er Jahre auf modernen PCs und moderneren Videospielkonsolen zu spielen. Sie werden auch verwendet, um Spiele in andere Sprachen zu übersetzen, vorhandene Spiele zu modifizieren und um DIY-Demos zu entwickeln und neue Spiele für ältere Systeme zu erstellen. Das Internet hat zur Verbreitung von Konsolenemulatoren beigetragen, da die meisten – wenn nicht alle – nicht für den Verkauf in Einzelhandelsgeschäften verfügbar wären. Beispiele für Konsolenemulatoren, die in den letzten Jahrzehnten veröffentlicht wurden, sind: RPCS3, Dolphin, Cemu, PCSX2, PPSSPP, ZSNES, Citra, ePSXe, Project64, Visual Boy Advance, Nestopia und Yuzu.

Terminal[edit]

Terminalemulatoren sind Softwareprogramme, die modernen Computern und Geräten interaktiven Zugriff auf Anwendungen ermöglichen, die auf Betriebssystemen von Großrechnern oder anderen Hostsystemen wie HP-UX oder OpenVMS ausgeführt werden. Terminals wie IBM 3270 oder VT100 und viele andere werden nicht mehr als physische Geräte hergestellt. Stattdessen simuliert Software, die auf modernen Betriebssystemen ausgeführt wird, ein “dummes” Terminal und kann die Grafik- und Textelemente der Hostanwendung rendern, Tastenanschläge senden und Befehle unter Verwendung des entsprechenden Terminalprotokolls verarbeiten. Einige Terminalemulationsanwendungen umfassen Attachmate Reflection, IBM Personal Communications und Micro Focus Rumba.

Identitätswechsel durch Malware[edit]

Aufgrund ihrer Beliebtheit wurden Emulatoren von Malware verkörpert. Die meisten dieser Emulatoren sind für Videospielkonsolen wie Xbox 360, Xbox One, Nintendo 3DS usw. vorgesehen. Im Allgemeinen erheben solche Emulatoren derzeit unmögliche Ansprüche, z. B. die Möglichkeit, Xbox One- und Xbox 360-Spiele in einem einzigen Programm auszuführen.[27]

Rechtsfragen[edit]

Siehe Artikel Konsolenemulator – Rechtliche Aspekte

Vereinigte Staaten[edit]

Mit der Weiterentwicklung von Computern und globalen Computernetzwerken und der zunehmenden Kompetenz von Emulatorentwicklern wurde die Zeitspanne zwischen der kommerziellen Veröffentlichung einer Konsole und ihrer erfolgreichen Emulation immer kürzer. Konsolen der fünften Generation wie Nintendo 64, PlayStation und Handhelds der sechsten Generation wie der Game Boy Advance verzeichneten während ihrer Produktion erhebliche Fortschritte bei der Emulation. Dies führte zu den Bemühungen der Konsolenhersteller, die inoffizielle Emulation zu stoppen, aber zu konsistenten Fehlern wie Sega v. Auszeichnung 977 F.2d 1510 (9th Cir. 1992), Sony Computer Entertainment, Inc. gegen Connectix Corporation 203 F.3d 596 (2000) und Sony Computer Entertainment America gegen Bleem 214 F.3d 1022 (2000),[28] haben den gegenteiligen Effekt gehabt. Nach allen gesetzlichen Präzedenzfällen ist die Emulation in den Vereinigten Staaten legal. Die unbefugte Verbreitung von urheberrechtlich geschütztem Code bleibt jedoch sowohl nach länderspezifischem Urheberrecht als auch nach internationalem Urheberrecht nach der Berner Übereinkunft illegal.[29][better source needed] Nach US-amerikanischem Recht ist es gemäß der Entscheidung legal, eine kopierte Kopie des BIOS des Originalcomputers zu erhalten Lewis Galoob Toys, Inc. gegen Nintendo of America, Inc., 964 F.2d 965 (9th Cir. 1992) als faire Verwendung, solange der Benutzer eine legal gekaufte Kopie der Maschine erhalten hat. Um dies zu mildern, können mehrere Emulatoren für Plattformen wie Game Boy Advance ohne BIOS-Datei ausgeführt werden. Mithilfe einer Emulation auf hoher Ebene können BIOS-Subroutinen mit geringen Kosten für die Emulationsgenauigkeit simuliert werden.[citation needed]

Siehe auch[edit]

Verweise[edit]

  1. ^ Warick, Mike (April 1988). “MS-DOS-Emulation für die 64”. Berechnen!. p. 43. Abgerufen 10. November 2013.
  2. ^ “Was ist Emulation?”. Koninklijke Bibliotheek. Abgerufen 2007-12-11.
  3. ^ van der Hoeven, Jeffrey, Bram Lohman und Remco Verdegem. “Emulation für die digitale Aufbewahrung in der Praxis: Die Ergebnisse.” The International Journal of Digital Curation 2.2 (2007): 123-132.
  4. ^ ein b Muira, Gregory. “Die Grenzen der traditionellen Kulturerbepolitik überschreiten: Langfristiger Zugang zu Multimedia-Inhalten.” IFLA Journal 33 (2007): 323 & ndash; 326.
  5. ^ Rothenberg, Jeffrey (1998). “”“”Kriterien für eine ideale Lösung: “Vermeidung von technologischem Treibsand: Suche nach einer tragfähigen technischen Grundlage für die digitale Aufbewahrung”. Rat für Bibliotheks- und Informationsressourcen. Washington, D.C. Abgerufen 2008-03-08.
  6. ^ Rothenberg, Jeffrey. “Die Emulationslösung.” Vermeiden von technologischem Treibsand: Suche nach einer tragfähigen technischen Grundlage für die digitale Aufbewahrung. Washington, DC: Rat für Bibliotheks- und Informationsressourcen, 1998. Rat für Bibliotheks- und Informationsressourcen. 2008. 28. März 2008 http://www.clir.org/pubs/reports/rothenberg/contents.html
  7. ^ Miura, Gregory (2016). “Die Grenzen der traditionellen Kulturerbepolitik überschreiten: Langfristigen Zugang zu Multimedia-Inhalten erhalten”. IFLA Journal. 33 (4): 323–6. doi:10.1177 / 0340035207086058.
  8. ^ “Emulatoren kosten und verwenden”. Techrander.
  9. ^ Verdegem, Remco; Lohman, Bram; Van Der Hoeven, Jeffrey (2008). “Emulation für die digitale Aufbewahrung in der Praxis: Die Ergebnisse”. Internationale Zeitschrift für digitale Kuration. 2 (2): 123–32. doi:10.2218 / ijdc.v2i2.35.
  10. ^ Granger, Stewart. “Emulation als Strategie zur digitalen Aufbewahrung.” D-Lib Magazine 6.19 (2000). 29. März 2008 http://www.dlib.org/dlib/october00/granger/10granger.html
  11. ^ Rothenberg, Jeffrey. “Die Emulationslösung.” Vermeiden von technologischem Treibsand: Suche nach einer tragfähigen technischen Grundlage für die digitale Aufbewahrung. Washington, DC: Rat für Bibliotheks- und Informationsressourcen, 1998. Rat für Bibliotheks- und Informationsressourcen. 2008. 28. März 2008
  12. ^ {{Cite web | url =http://tcrf.net/Pok%C3%A9mon_Black_and_White#Anti-Piracy{{full%7Cdate=September | title = Archivierte Kopie | access-date = 2012-12-30 | archive-url =https://web.archive.org/web/20130606033535/http://tcrf.net/Pok%C3%A9mon_Black_and_White#Anti-Piracy{{full%7Cdate=September | archive-date = 2013-06-06 | url-status = dead}}
  13. ^ “Mega Man Star Force – Der Boden des Schneideraums”. tcrf.net. Archiviert von das Original am 12.05.2013. Abgerufen 2012-12-30.
  14. ^ “Echoes of Art: Emulation als Erhaltungsstrategie”. Archiviert von das Original am 2007-10-27. Abgerufen 2007-12-11.
  15. ^ Peter Magnusson (2004). “Vollständige Systemsimulation: Fehlende Verbindung der Softwareentwicklung”.
  16. ^ “Debugging und vollständige Systemsimulation”.
  17. ^ Vania Joloboff (2009). “Vollständige Systemsimulation eingebetteter Systeme” (PDF). Archiviert von das Original (PDF) am 09.02.2014. Abgerufen 2012-04-22.
  18. ^ GuideStorm. “PlayStation 4-Emulatoren”. Abgerufen 2019-08-04.
  19. ^ Pugh, Emerson W. (1995). Aufbau von IBM: Gestaltung einer Branche und ihrer Technologie. MIT. p. 274. ISBN 0-262-16147-8.
  20. ^ Pugh, Emerson W.; et al. (1991). IBMs 360- und Early 370-Systeme. MIT. ISBN 0-262-16123-0. Seiten 160-161
  21. ^ Simulation des IBM 650 auf dem IBM 705
  22. ^ “IBM Archives: 7090 Data Processing System (Fortsetzung)”. www-03.ibm.com. 23. Januar 2003.
  23. ^ “Systemkompatibilitätsoperationen”. Referenzhandbuch IBM 7090 Datenverarbeitungssystem (PDF). März 1962. S. 65–66. A22-6528-4.
  24. ^ “Systemkompatibilitätsoperationen”. Funktionsprinzipien von IBM 1410 (PDF). März 1962. S. 56–57, 98–100. A22-0526-3.
  25. ^ Tucker, S. G. (1965). “Emulation großer Systeme”. Mitteilungen der ACM. 8 (12): 753–61. doi:10.1145 / 365691.365931.
  26. ^ “Netzwerksimulation oder Emulation?”. Netzwerkwelt. Netzwerkwelt. Abgerufen 22. September 2017.
  27. ^ “Die Emulationsnachahmung”. Malwarebytes Labs. Abgerufen 2016-05-30.
  28. ^ siehe Midway Manufacturing Co. gegen Artic International, Inc.574 F. Supp. 999, aff’d, 704 F.2d 1009 (9. Cir 1982) (Halten des Computer-ROM von Pac Man als ausreichende Fixierung für Zwecke des Urheberrechts, obwohl sich das Spiel jedes Mal ändert.) Und Artikel 2 des Bern Konvention

Externe Links[edit]


after-content-x4