Emulator - Emulator

DOSBox emuliert die Befehlszeilenschnittstelle von DOS.
Eine Emulations- App für den programmierbaren Taschenrechner HP-41C X von 1983 , der auf Apple iOS läuft . Zusätzlich kann die Ausgabe des historischen Thermodruckers dieser Rechnerzeile angezeigt werden.

In Computing , ein Emulator ist Hardware oder Software , die man ermöglicht Computersystem ( die so genannte Host ) zu verhalten sich wie ein anderes Computersystem ( das so genannte 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 zum Beispiel so konzipiert, dass sie HP LaserJet- Drucker emulieren , weil so viel Software für HP-Drucker geschrieben wird. Wenn ein Nicht-HP-Drucker einen HP-Drucker emuliert, wird jede Software, die für einen echten HP-Drucker geschrieben wurde, auch in der Nicht-HP-Druckeremulation ausgeführt und erzeugt einen gleichwertigen Druck. Spätestens seit den 1990er Jahren haben viele Videospiel- Enthusiasten und Hobbyisten Emulatoren verwendet, um klassische (und/oder vergessene) Arcade-Spiele aus den 1980er Jahren mit dem ursprünglichen Maschinencode und den Daten der Spiele aus den 1980er Jahren zu spielen, die von einem System der aktuellen Ära interpretiert werden und um alte Videospielkonsolen zu emulieren .

Ein Hardware-Emulator ist ein Emulator, der die Form eines Hardware-Geräts annimmt. Beispiele sind die DOS-kompatible Karte, die in einigen Macintosh-Computern der 90er Jahre installiert ist , wie dem Centris 610 oder Performa 630 , die es ihnen ermöglichten, Personal Computer (PC)-Softwareprogramme und FPGA- basierte Hardware-Emulatoren auszuführen . Die Church-Turing-These impliziert, dass (theoretisch) jede Betriebsumgebung in jeder anderen Umgebung emuliert werden kann (unter der Annahme, dass Speicherbeschränkungen ignoriert werden). In der Praxis kann es jedoch recht schwierig werden, insbesondere wenn das genaue Verhalten des zu emulierenden Systems nicht dokumentiert ist und (manchmal mühsam) durch Reverse Engineering abgeleitet werden muss . Es sagt auch nichts über Timing-Einschränkungen aus; Wenn der Emulator nicht so schnell arbeitet wie mit der ursprünglichen Hardware, kann die Software in der Emulation viel langsamer ausgeführt werden (möglicherweise werden Timer-Interrupts ausgelöst, die das Verhalten ändern).

"Kann ein Commodore 64 MS-DOS emulieren ?" Ja, ein [Commodore] 64 kann einen IBM-PC [der MS-DOS verwendet] emulieren, genauso wie es möglich ist, den Michigansee mit einem Teelöffel zu retten .

-  Brief an die Computer! und redaktionelle Antwort, April 1988

In Erhaltung

Emulation ist eine Strategie, um die digitale Bewahrung zu verfolgen und Obsoleszenz zu bekämpfen . Die Emulation konzentriert sich auf die Wiederherstellung einer ursprünglichen Computerumgebung, die zeitaufwendig und schwierig zu erreichen sein kann, aber aufgrund ihrer Fähigkeit, eine engere Verbindung zur Authentizität des digitalen Objekts, des Betriebssystems oder sogar der Spieleplattform aufrechtzuerhalten, wertvoll ist. Die Emulation adressiert die ursprüngliche Hardware- und Softwareumgebung des digitalen Objekts und erstellt es auf einer aktuellen Maschine neu. 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. Jeffery Rothenberg, ein früher Befürworter der Emulation als Strategie für die digitale Archivierung , sagt: „Der ideale Ansatz wäre eine einzige erweiterbare , langfristige Lösung, die ein für alle Mal entworfen und einheitlich, automatisch und in organisierter Synchronität angewendet werden kann (z , bei jedem Aktualisierungszyklus) auf alle Arten von Dokumenten und Medien". Er sagt weiter, dass dies nicht nur für veraltete Systeme gelten sollte, sondern auch für zukünftige unbekannte Systeme aufwärts mobil sein sollte. Praktisch gesagt, wenn eine bestimmte Anwendung in einer neuen Version veröffentlicht wird, könnte man, anstatt Kompatibilitätsprobleme und Migration für jedes digitale Objekt, das in der vorherigen Version dieser Anwendung erstellt wurde , zu beheben, einen Emulator für die Anwendung erstellen , der den Zugriff auf alle diese digitalen Dateien ermöglicht Objekte.

Leistungen

Basilisk II emuliert einen Macintosh 68k unter Verwendung von Interpretationscode und dynamischer Neukompilierung.
  • Potenziell bessere Grafikqualität als Originalhardware.
  • Möglicherweise zusätzliche Funktionen, die die Originalhardware nicht hatte.
  • Emulatoren behalten das ursprüngliche Erscheinungsbild und Verhalten des digitalen Objekts bei, das genauso wichtig ist wie die digitalen Daten selbst.
  • Trotz der ursprünglichen Kosten für die Entwicklung eines Emulators kann sich dieser im Laufe der Zeit als die kostengünstigere Lösung erweisen.
  • Reduziert Arbeitsstunden , denn anstatt eine ständige Aufgabe der kontinuierlichen Datenmigration für jedes digitale Objekt fortzusetzen, werden, sobald die Bibliothek früherer und gegenwärtiger Betriebssysteme und Anwendungssoftware in einem Emulator eingerichtet ist, dieselben Technologien für jedes Dokument verwendet, das diese Plattformen verwendet .
  • 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.
  • Emulatoren ermöglichen die Verwendung von Software, die ausschließlich für ein System gilt, auf einem anderen. Beispielsweise könnte ein exklusives PlayStation 2- Videospiel mit einem Emulator auf einem PC gespielt werden. Dies ist besonders nützlich, wenn das Originalsystem schwer zu beschaffen ist und der Analog-Digital-Adapter nicht erhältlich ist oder nicht vorhanden ist.

Hindernis

  • Die Rechtmäßigkeit der Rechte an geistigem Eigentum ist ein Dauerthema. Viele Entwicklungsteams, Unternehmen und Technologieanbieter implementierten manchmal während der Programmentwicklung nicht standardmäßige Funktionen, um ihre Nische auf dem Markt zu etablieren, während sie gleichzeitig laufende Upgrades anwenden, um wettbewerbsfähig zu bleiben. Während dies die Technologiebranche vorangebracht und den Marktanteil der Anbieter erhöht haben mag, haben die Benutzer aufgrund der proprietären Natur der Hard- und Software in einem Albtraum der Erhaltung verloren, da sie nur wenig unterstützende Dokumentation haben.
  • Urheberrechtsgesetze sind noch nicht in Kraft, um das Speichern der Dokumentation und Spezifikationen von proprietärer Software und Hardware in einem Emulatormodul zu behandeln.
  • Emulatoren werden häufig als Werkzeug für Urheberrechtsverletzungen 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 führt dazu, dass Software so programmiert wird, dass sie nicht funktioniert, wenn sie erkennen kann, dass der Host ein Emulator ist; insbesondere einige Videospiele laufen weiter, erlauben dem Spieler jedoch nicht, über eine späte Phase des Spiels hinauszukommen, was oft fehlerhaft oder einfach nur extrem schwierig erscheint. Diese Schutzmaßnahmen erschweren das Entwerfen von Emulatoren, da sie genau genug sein müssen, um das Auslösen der Schutzmaßnahmen zu vermeiden, deren Auswirkungen möglicherweise nicht offensichtlich sind.
  • Emulatoren erfordern bessere Hardware als das ursprüngliche System hat.

In der Neuen Medienkunst

Aufgrund ihrer primären Verwendung digitaler Formate verlässt sich die Kunst der neuen Medien stark auf die Emulation als Konservierungsstrategie. Künstler wie Cory Arcangel sind darauf spezialisiert, veraltete Technologien in ihren Kunstwerken wiederzubeleben und erkennen die Bedeutung eines dezentralisierten und Deinstitutionalisierten Prozesses für die Bewahrung digitaler Kultur. In vielen Fällen besteht das Ziel der Emulation in der Neuen Medienkunst darin, ein digitales Medium so zu erhalten, dass es auf unbestimmte Zeit gespeichert und fehlerfrei reproduziert werden kann, damit keine Abhängigkeit von alternder und veralteter Hardware besteht. Das Paradoxe ist, dass die Emulation und der Emulator auf zukünftigen Computern zum Laufen gebracht werden müssen.

Im zukünftigen Systemdesign

Emulationstechniken werden häufig während des Entwurfs und der Entwicklung neuer Systeme verwendet. Es erleichtert den Entwicklungsprozess, indem es die Möglichkeit bietet, Fehler im Design zu erkennen, zu reproduzieren und zu reparieren, noch bevor das System tatsächlich gebaut wird. Es ist besonders nützlich beim Design von Multi-Core- Systemen, wo Parallelitätsfehler ohne die von virtueller Hardware bereitgestellte kontrollierte Umgebung sehr schwer zu erkennen und zu korrigieren sein können. Dies ermöglicht auch, dass die Softwareentwicklung stattfindet, bevor die Hardware bereit ist, was dazu beiträgt, Designentscheidungen zu validieren und ein wenig mehr Kontrolle zu geben.

Typen

Windows XP mit einem Acorn Archimedes- Emulator, der wiederum einen Sinclair ZX Spectrum- Emulator ausführt.
Tetris läuft auf dem Wzonka-Lad Game Boy Emulator auf AmigaOS , selbst läuft auf E-UAE auf einem modernen Fedora Linux System.

Die meisten Emulatoren emulieren lediglich eine Hardware-Architektur – wenn für die gewünschte Software Betriebssystem-Firmware oder -Software erforderlich ist, muss diese ebenfalls bereitgestellt werden (und kann selbst emuliert werden). Sowohl das Betriebssystem als auch die Software werden dann vom Emulator interpretiert , anstatt von nativer Hardware ausgeführt zu werden. Abgesehen von diesem Interpreter für die Sprache der emulierten Binärmaschine muss auch einige andere Hardware (wie Ein- oder Ausgabegeräte) in virtueller Form bereitgestellt werden; Wenn beispielsweise das Schreiben auf einen bestimmten Speicherplatz die Bildschirmanzeige beeinflussen soll, müsste dies emuliert werden. Während die Emulation im Extremfall bis auf die atomare Ebene gehen könnte und ihre Ausgabe auf einer Simulation der tatsächlichen Schaltung aus einer virtuellen Stromquelle 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, undokumentierten Funktionen, unvorhersehbaren analogen Elementen und Implementierungsfehlern. Dies ist insbesondere bei klassischen Heimcomputern wie dem Commodore 64 der Fall , deren Software oft auf hochentwickelten Low-Level-Programmiertricks beruht, die von Spieleprogrammierern und der „ Demoscene “ erfunden wurden .

Im Gegensatz dazu haben einige andere Plattformen nur sehr wenig direkte Hardwareadressierung verwendet, wie beispielsweise ein Emulator für die PlayStation 4. In diesen Fällen kann eine einfache Kompatibilitätsschicht ausreichen. Dies übersetzt Systemaufrufe für das fremde System in Systemaufrufe für das Host-System, zB die Linux-Kompatibilitätsschicht, die auf *BSD verwendet wird, um native Closed-Source-Linux-Software auf FreeBSD , NetBSD und OpenBSD auszuführen . Während beispielsweise der Grafikprozessor des Nintendo 64 vollständig programmierbar war, verwendeten die meisten Spiele eines der wenigen vorgefertigten Programme, die größtenteils in sich abgeschlossen waren und über FIFO mit dem Spiel kommunizierten ; Daher emulieren viele Emulatoren den Grafikprozessor überhaupt nicht, sondern interpretieren einfach die von der CPU empfangenen Befehle wie das Originalprogramm. Entwickler von Software für eingebettete Systeme oder Videospielkonsolen entwerfen ihre Software oft 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, damit sie getestet werden kann, ohne das zu debuggende Programm auf niedriger Ebene zu kopieren und ohne die Nebenwirkungen eines Debuggers einzuführen . In vielen Fällen wird der Simulator tatsächlich von der Firma hergestellt, die die Hardware bereitstellt, was theoretisch seine Genauigkeit erhöht. Mit mathematischen Coprozessor-Emulatoren können Programme, die mit mathematischen Anweisungen kompiliert wurden, auf Computern ausgeführt werden, auf denen der Coprozessor nicht installiert ist, aber die zusätzliche Arbeit der CPU kann das System verlangsamen. Wenn kein mathematischer Coprozessor auf der CPU installiert oder vorhanden ist, wird die CPU, wenn sie einen Coprozessorbefehl ausführt, einen bestimmten Interrupt machen (der Coprozessor ist nicht verfügbar) und die mathematischen Emulatorroutinen aufruft. Wenn der Befehl erfolgreich emuliert wurde, fährt das Programm mit der Ausführung fort.

Struktur und Organisation

Typischerweise ist ein Emulator in Module unterteilt , die grob den Subsystemen des emulierten Computers entsprechen. Am häufigsten besteht ein Emulator aus den folgenden Modulen:

  • ein CPU-Emulator oder CPU-Simulator (die beiden Begriffe sind in diesem Fall meist 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 Input/Output (I/O) Geräteemulatoren

Busse werden oft nicht emuliert, entweder aus Gründen der Leistungsfähigkeit oder der Einfachheit, und virtuelle Peripheriegeräte kommunizieren direkt mit der CPU oder dem Speichersubsystem.

Speichersubsystem

Es ist möglich, die Emulation des Speichersubsystems auf ein einfaches Array von Elementen zu reduzieren, von denen jedes wie ein emuliertes Wort bemessen ist; Dieses Modell versagt jedoch sehr schnell, sobald eine Stelle 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, als eigenes Modul erstellt oder manchmal in den CPU-Simulator integriert werden). Auch wenn der emulierte Computer keine MMU besitzt, gibt es in der Regel andere Faktoren, die die Äquivalenz zwischen logischem und physischem Speicher durchbrechen: Viele (wenn nicht die meisten) Architekturen bieten Memory-mapped I/O ; sogar solche, bei denen nicht oft ein Block des logischen Speichers auf ROM abgebildet ist , was bedeutet, dass das Speicherarray-Modul verworfen werden muss, wenn die Nur-Lese-Natur des ROM emuliert werden soll. Auch Funktionen wie Bankumschaltung oder Segmentierung können die Speicheremulation erschweren. Als Ergebnis implementieren die meisten Emulatoren mindestens zwei Prozeduren zum Schreiben in und Lesen aus dem logischen Speicher, und es ist die Pflicht dieser Prozeduren, jeden Zugriff auf die richtige Position des richtigen Objekts abzubilden.

Bei einem Adressierungssystem mit Basislimit , bei dem der Speicher von Adresse 0 bis Adresse ROMSIZE-1 Nur-Lese-Speicher ist, 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

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 , bei dem es sich um ein Computerprogramm handelt, das dem Ausführungsfluss des emulierten Programmcodes folgt und für jeden angetroffenen Maschinencodebefehl Operationen auf dem Hostprozessor ausführt, die den ursprünglichen Befehlen semantisch äquivalent sind. 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 Softwarereimplementierung entsteht, die im Wesentlichen die ursprüngliche Hardwareimplementierung widerspiegelt.

Das folgende Beispiel veranschaulicht, wie eine CPU-Simulation von einem Interpreter durchgeführt werden kann. In diesem Fall werden Interrupts vor jedem ausgeführten Befehl überprüft, obwohl dieses Verhalten in echten Emulatoren aus Leistungsgründen selten ist (es ist im Allgemeinen schneller, ein Unterprogramm zu verwenden, um die Arbeit eines Interrupts zu erledigen).

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 mehr als ausreichend ist, um Computer von vor mehr als etwa einem Jahrzehnt auf modernen Maschinen zu emulieren. Die der Interpretation innewohnende Geschwindigkeitseinbuße kann jedoch ein Problem sein, wenn Computer emuliert werden, deren Prozessorgeschwindigkeit in der gleichen Größenordnung wie die des Host- Rechners liegt . Bis vor wenigen Jahren wurde die Emulation in solchen Situationen von vielen als völlig unpraktisch angesehen.

Was es ermöglichte, diese Einschränkung zu durchbrechen, waren die Fortschritte bei dynamischen Neukompilierungstechniken . Eine einfache a-priori- Übersetzung von emuliertem Programmcode in Code, der auf der Host-Architektur lauffähig ist, ist normalerweise aus mehreren Gründen unmöglich:

Verschiedene Formen der dynamischen Neukompilierung, einschließlich der beliebten Just-In-Time-Compiler- Technik (JIT) , versuchen, diese Probleme zu umgehen, indem sie warten, bis der Kontrollfluss des Prozessors an eine Stelle springt, die nicht übersetzten Code enthält, und erst dann ("just in time") a . übersetzt Block des Codes in ausführbaren Hostcode umwandeln. Der übersetzte Code wird in einem Code- Cache gespeichert , und der ursprüngliche Code geht nicht verloren oder wird beeinträchtigt; Auf diese Weise können sogar Datensegmente (sinnlos) vom Recompiler übersetzt werden, was nur eine Verschwendung von Übersetzungszeit bedeutet. Geschwindigkeit ist möglicherweise nicht wünschenswert, da einige ältere Spiele nicht auf die Geschwindigkeit schnellerer Computer ausgelegt sind. Ein Spiel, das für einen 30-MHz-PC mit einem Level-Timer von 300 Spielsekunden entwickelt wurde, gibt dem Spieler auf einem 300-MHz-PC möglicherweise nur 30 Sekunden. Andere Programme, wie zum Beispiel einige DOS-Programme, laufen möglicherweise nicht einmal auf schnelleren Computern. Insbesondere bei der Emulation von Computern, die „closed-box“ waren, bei denen Änderungen am Kern des Systems nicht typisch waren, kann die Software Techniken verwenden, die von spezifischen Eigenschaften des Computers, auf dem sie lief, abhängen (z der Emulationsgeschwindigkeit ist wichtig, damit solche Anwendungen richtig emuliert werden.

Eingang/Ausgang (E/A)

Die meisten Emulatoren nicht, wie bereits erwähnt, das Haupt emulieren Systembus ; jedes I/O-Gerät wird daher oft als Sonderfall behandelt, und es wird keine einheitliche 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; Designs, die auf einer einheitlichen Standard-I/O- 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 innerhalb des Emulators verwendet werden. Eine vereinheitlichte I/O-API muss nicht unbedingt die Struktur des realen Hardwarebusses widerspiegeln: Das Busdesign wird durch mehrere elektrische Einschränkungen und den Bedarf an Hardware- Parallelitätsmanagement eingeschränkt , die bei einer Softwareimplementierung meist ignoriert werden können.

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

  • Verwaltung von Interrupts durch eine Prozedur, die Flags setzt, die vom CPU-Simulator gelesen werden können, wenn ein Interrupt ausgelöst wird, wodurch die virtuelle CPU "nach (virtuellen) Interrupts abfragen" kann.
  • Schreiben zu und von physischen Speicher, mit Hilfe von zwei Verfahren , die ähnlich zu denen das Lesen mit logischen Speicher handelt (obwohl, im Gegensatz zu den letzteren die erstere kann oft weggelassen werden, und direkte Hinweise auf die Speicheranordnung verwendet werden , statt)

Vergleich mit Simulation

Das Wort „Emulator“ wurde 1963 bei IBM während der Entwicklung der NPL ( IBM System/360 ) Produktlinie geprägt, unter Verwendung einer „neuen Kombination von Software , Mikrocode und Hardware “. Sie entdeckten, dass die Simulation mit zusätzlichen in Mikrocode und Hardware implementierten Befehlen anstelle einer Softwaresimulation, die nur Standardbefehle verwendet, um Programme auszuführen, die für frühere IBM-Computer geschrieben wurden, die Simulationsgeschwindigkeit drastisch erhöht. Früher hat IBM Simulatoren für zB den 650 auf dem 705 bereitgestellt . Zusätzlich zu Simulatoren hatte IBM Kompatibilitätsfunktionen auf dem 709 und 7090 , für die es dem IBM 709-Computer ein Programm zur Verfügung stellte, um Legacy-Programme auszuführen, die für den IBM 704 auf dem 709 und später auf dem IBM 7090 geschrieben wurden. Dieses Programm verwendete die Anweisungen durch das Kompatibilitätsmerkmal zu Trap-Befehlen hinzugefügt, die eine besondere Behandlung erfordern; alle anderen 704-Anweisungen liefen auf einer 7090 genauso. Die Kompatibilitätsfunktion auf der 1410 erforderte nur das Einstellen eines Konsolen-Kippschalters, kein Unterstützungsprogramm.

Als 1963 zum ersten Mal Mikrocode verwendet wurde, um diesen Simulationsprozess zu beschleunigen, prägten IBM-Ingenieure den Begriff "Emulator", um das Konzept zu beschreiben. In den 2000er Jahren ist es üblich geworden, das Wort "Emulieren" im Zusammenhang mit Software zu verwenden. Vor 1980 bezog sich "Emulation" jedoch nur auf eine Emulation mit einer Hardware- oder Mikrocode-Unterstützung, während sich "Simulation" auf eine reine Software-Emulation bezog. Zum Beispiel ist ein Computer, der speziell zum Ausführen von Programmen gebaut wurde, die für eine andere Architektur entwickelt wurden, ein Emulator. Im Gegensatz dazu könnte ein Simulator ein Programm sein, das auf einem PC läuft, auf dem alte Atari-Spiele simuliert werden können. Puristen bestehen weiterhin auf dieser Unterscheidung, aber derzeit bedeutet der Begriff "Emulation" oft die vollständige Nachahmung einer Maschine, die Binärcode ausführt, während sich "Simulation" oft auf Computersimulation bezieht , bei der ein Computerprogramm verwendet wird, um ein abstraktes Modell zu simulieren. Computersimulation wird in praktisch jedem wissenschaftlichen und technischen Bereich verwendet, und die Informatik ist keine Ausnahme, mit mehreren Projekten, die abstrakte Modelle von Computersystemen simulieren , wie z. B. die Netzwerksimulation , die sich sowohl praktisch als auch semantisch von der Netzwerkemulation unterscheidet.

Logiksimulatoren

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

Funktionssimulatoren

Funktionale Simulation ist die Verwendung eines Computerprogramms, um die Ausführung eines zweiten Computerprogramms zu simulieren, das in symbolischer Assemblersprache oder Compilersprache geschrieben ist, anstatt in binärem Maschinencode . Durch die Verwendung 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 funktionale Simulator wurde von Autonetics um 1960 zum Testen von Assemblersprachprogrammen für die spätere Ausführung im Militärcomputer D-17B geschrieben . Dies ermöglichte es, Flugprogramme zu schreiben, auszuführen und zu testen, bevor die Computerhardware der D-17B gebaut wurde. Autonetics programmierte auch einen funktionalen Simulator zum Testen von Flugprogrammen für die spätere Ausführung im Militärcomputer D-37C .

Videospielkonsolen

Emulatoren für Videospielkonsolen sind Programme, die es einem PC oder einer Videospielkonsole ermöglichen, eine andere Videospielkonsole zu emulieren. 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, bestehende Spiele zu modifizieren, und im Entwicklungsprozess von "Home Brew" DIY- Demos und bei der Erstellung neuer Spiele für ältere Systeme. Das Internet hat zur Verbreitung von Konsolenemulatoren beigetragen, da die meisten – wenn nicht alle – nicht im Einzelhandel erhältlich 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

Terminalemulatoren sind Softwareprogramme, die modernen Computern und Geräten interaktiven Zugriff auf Anwendungen ermöglichen, die auf Mainframe-Computerbetriebssystemen oder anderen Hostsystemen wie HP-UX oder OpenVMS ausgeführt werden . Terminals wie das IBM 3270 oder VT100 und viele andere werden nicht mehr als physische Geräte produziert. Stattdessen simuliert Software, die auf modernen Betriebssystemen läuft, ein "dummes" Terminal und ist in der Lage, die grafischen und Textelemente der Host-Anwendung zu rendern, Tastenanschläge zu senden und Befehle unter Verwendung des entsprechenden Terminal-Protokolls zu verarbeiten. Einige Terminalemulationsanwendungen umfassen Attachmate Reflection , IBM Personal Communications und Micro Focus Rumba.

Identitätsdiebstahl durch Malware

Aufgrund ihrer Popularität wurden Emulatoren von Malware imitiert. Die meisten dieser Emulatoren sind für Videospielkonsolen wie Xbox 360, Xbox One, Nintendo 3DS usw. gedacht. Im Allgemeinen machen solche Emulatoren derzeit unmögliche Ansprüche, wie zum Beispiel die Möglichkeit, Xbox One- und Xbox 360- Spiele in einem einzigen Programm auszuführen .

Rechtsfragen

Siehe Artikel Konsolenemulator – Rechtliche Probleme

Vereinigte Staaten

Als Computer und globale Computernetzwerke immer weiter vorankamen und die Entwickler von Emulatoren in ihrer Arbeit immer geschickter wurden, 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 haben während ihrer Produktion erhebliche Fortschritte in Richtung Emulation gemacht. Dies führte zu Bemühungen von Konsolenherstellern, die inoffizielle Emulation zu stoppen, aber konsequente Fehler wie Sega gegen Accolade 977 F.2d 1510 (9. Cir. 1992), Sony Computer Entertainment, Inc. gegen Connectix Corporation 203 F.3d 596 ( 2000) und Sony Computer Entertainment America v. Bleem 214 F.3d 1022 (2000) hatten den gegenteiligen Effekt. Nach allen rechtlichen Präzedenzfällen ist die Emulation innerhalb der Vereinigten Staaten legal. Die unbefugte Verbreitung von urheberrechtlich geschütztem Code bleibt jedoch gemäß dem länderspezifischen Urheberrecht und dem internationalen Urheberrecht gemäß der Berner Übereinkunft illegal . Nach US-amerikanischem Recht ist der Erhalt einer gedumpten Kopie des BIOS des Originalgeräts gemäß dem Urteil Lewis Galoob Toys, Inc. gegen Nintendo of America, Inc. , 964 F.2d 965 (9. Cir. 1992) als faire Verwendung zulässig, solange da der Benutzer eine legal erworbene Kopie des Geräts erhalten hat. Um dies abzumildern, können jedoch mehrere Emulatoren für Plattformen wie Game Boy Advance ohne BIOS-Datei ausgeführt werden, indem sie eine High-Level-Emulation verwenden, um BIOS-Subroutinen zu einem geringen Preis in der Emulationsgenauigkeit zu simulieren.

Siehe auch

Verweise

Externe Links