Emulator - Emulator

DOSBox emuluje interfejs wiersza poleceń systemu DOS.
Emulacji aplikacja do 1983 programowalny kalkulator HP-41C X działa na Apple iOS . Dodatkowo można wyświetlić wyjście historycznej drukarki termicznej tej linii kalkulatora.

W informatyce , emulator jest sprzętowy lub oprogramowanie , które umożliwia jeden system komputerowy (zwany gospodarz ), aby zachowywać się jak w innym systemie komputerowym (zwanej gość ). Emulator zazwyczaj umożliwia systemowi hosta uruchamianie oprogramowania lub korzystanie z urządzeń peryferyjnych zaprojektowanych dla systemu gościa. Emulacja odnosi się do zdolności programu komputerowego w urządzeniu elektronicznym do emulowania (lub naśladowania) innego programu lub urządzenia.

Na przykład wiele drukarek jest zaprojektowanych do emulacji drukarek HP LaserJet, ponieważ tak wiele oprogramowania jest napisanych dla drukarek HP. Jeśli drukarka innej firmy emuluje drukarkę HP, każde oprogramowanie napisane dla prawdziwej drukarki HP będzie również działać w emulacji drukarki innej firmy i zapewni równoważne drukowanie. Co najmniej od lat 90. wielu entuzjastów gier wideo i hobbystów używało emulatorów do grania w klasyczne (i/lub zapomniane) gry zręcznościowe z lat 80., korzystając z oryginalnego kodu maszynowego i danych z lat 80., które są interpretowane przez system z obecnej epoki i emulować stare konsole do gier wideo .

Emulator sprzętowy to emulator, który przybiera postać urządzenia sprzętowego. Przykładem może być karta kompatybilna z DOS zainstalowana w niektórych komputerach Macintosh z lat 90. , takich jak Centris 610 lub Performa 630 , która umożliwiała im uruchamianie programów komputerowych (PC) i emulatorów sprzętowych opartych na układach FPGA . Hipoteza Churcha-Turinga oznacza, że (teoretycznie) każde środowisko pracy może być emulowane w jakimkolwiek innym środowisku (przy założeniu ograniczenia pamięci są ignorowane). Jednak w praktyce może to być dość trudne, szczególnie gdy dokładne zachowanie emulowanego systemu nie jest udokumentowane i musi być (czasem żmudnie) wydedukowane za pomocą inżynierii odwrotnej . Nie mówi też nic o ograniczeniach czasowych; jeśli emulator nie działa tak szybko, jak przy użyciu oryginalnego sprzętu, oprogramowanie wewnątrz emulacji może działać znacznie wolniej (prawdopodobnie wyzwalając przerwania czasowe, które zmieniają zachowanie).

„Czy Commodore 64 może emulować MS-DOS ?” Tak, [Commodore] 64 może emulować komputer IBM [który używa MS-DOS], w tym samym sensie, w jakim możliwe jest ratowanie jeziora Michigan za pomocą łyżeczki .

—  List do obliczenia! i odpowiedź redakcyjna, kwiecień 1988

W konserwacji

Emulacja to jedna ze strategii w dążeniu do zachowania zasobów cyfrowych i walki z ich starzeniem się . Emulacja skupia się na odtworzeniu oryginalnego środowiska komputerowego, co może być czasochłonne i trudne do osiągnięcia, ale cenne ze względu na możliwość utrzymywania bliższego związku z autentycznością obiektu cyfrowego, systemu operacyjnego, a nawet platformy do gier. Emulacja dotyczy oryginalnego środowiska sprzętowego i programowego obiektu cyfrowego i odtwarza je na bieżącej maszynie. Emulator umożliwia użytkownikowi dostęp do dowolnego rodzaju aplikacji lub systemu operacyjnego na obecnej platformie , podczas gdy oprogramowanie działa tak, jak w swoim oryginalnym środowisku. Jeffery Rothenberg, wczesny zwolennik emulacji jako strategii ochrony zasobów cyfrowych , twierdzi, że „idealne podejście zapewniłoby pojedyncze, rozszerzalne , długoterminowe rozwiązanie, które można zaprojektować raz na zawsze i zastosować jednolicie, automatycznie i w zorganizowanej synchronizacji (na przykład , w każdym cyklu odświeżania) do wszystkich typów dokumentów i nośników”. Ponadto stwierdza, że ​​powinno to dotyczyć nie tylko przestarzałych systemów, ale także zwiększać mobilność w stosunku do przyszłych nieznanych systemów. Praktycznie rzecz biorąc, gdy dana aplikacja zostanie wydana w nowej wersji, zamiast rozwiązywać problemy ze zgodnością i migracją dla każdego cyfrowego obiektu utworzonego w poprzedniej wersji tej aplikacji , można stworzyć emulator aplikacji , umożliwiający dostęp do wszystkich wspomnianych cyfrowych przedmioty.

Korzyści

Basilisk II emuluje Macintosh 68k przy użyciu kodu interpretacyjnego i dynamicznej rekompilacji.
  • Potencjalnie lepsza jakość grafiki niż oryginalny sprzęt.
  • Potencjalnie dodatkowe funkcje, których nie miał oryginalny sprzęt.
  • Emulatory zachowują oryginalny wygląd, styl i zachowanie obiektu cyfrowego, co jest tak samo ważne jak same dane cyfrowe.
  • Pomimo początkowych kosztów opracowania emulatora, z czasem może on okazać się bardziej opłacalnym rozwiązaniem.
  • Zmniejsza liczbę godzin pracy , ponieważ zamiast kontynuować ciągłe zadanie ciągłej migracji danych dla każdego obiektu cyfrowego, po ustanowieniu biblioteki przeszłych i obecnych systemów operacyjnych i oprogramowania aplikacyjnego w emulatorze, te same technologie są używane dla każdego dokumentu korzystającego z tych platform .
  • Wiele emulatorów zostało już opracowanych i wydanych na licencji GNU General Public License w środowisku open source , co pozwala na współpracę na szeroką skalę.
  • Emulatory umożliwiają korzystanie z oprogramowania przeznaczonego wyłącznie dla jednego systemu w innym. Na przykład ekskluzywna gra wideo na PlayStation 2 może być odtwarzana na komputerze za pomocą emulatora. Jest to szczególnie przydatne, gdy oryginalny system jest trudny do uzyskania, a adapter analogowo-cyfrowy nie może zostać uzyskany lub nie istnieje.

Przeszkody

  • Kwestia legalności dotycząca praw własności intelektualnej jest wciąż kwestią. Wiele zespołów programistycznych, firm i dostawców technologii czasami wdrażało niestandardowe funkcje podczas tworzenia programu, aby ustanowić swoją niszę na rynku, jednocześnie stosując ciągłe aktualizacje, aby zachować konkurencyjność. Chociaż mogło to doprowadzić do postępu w branży technologicznej i zwiększyć udział dostawców w rynku , pozostawiło użytkowników zagubionych w koszmarze konserwacji z niewielką ilością dokumentacji pomocniczej ze względu na zastrzeżony charakter sprzętu i oprogramowania.
  • Prawa autorskie nie obowiązują jeszcze w odniesieniu do zapisywania dokumentacji i specyfikacji oprogramowania i sprzętu prawnie zastrzeżonego w module emulatora.
  • Emulatory są często używane jako narzędzie do naruszania praw autorskich , ponieważ pozwalają użytkownikom grać w gry wideo bez konieczności kupowania konsoli i rzadko podejmują jakiekolwiek próby zapobiegania używaniu nielegalnych kopii. Prowadzi to do szeregu niejasności prawnych dotyczących emulacji i prowadzi do tego, że oprogramowanie jest zaprogramowane tak, aby odmawiało pracy, jeśli może stwierdzić, że host jest emulatorem; w szczególności niektóre gry wideo będą nadal działać, ale nie pozwolą graczowi przejść poza pewien późny etap gry, często wyglądając na wadliwe lub po prostu niezwykle trudne. Te zabezpieczenia utrudniają projektowanie emulatorów, ponieważ muszą być wystarczająco dokładne, aby uniknąć uruchamiania zabezpieczeń, których efekty mogą nie być oczywiste.
  • Emulatory wymagają lepszego sprzętu niż oryginalny system.

W sztuce nowych mediów

Ze względu na swoje główne zastosowanie formatów cyfrowych sztuka nowych mediów w dużej mierze opiera się na emulacji jako strategii zachowania. Artyści tacy jak Cory Arcangel specjalizują się we wskrzeszaniu przestarzałych technologii w swoich dziełach sztuki i uznają znaczenie zdecentralizowanego i zdeinstytucjonalizowanego procesu dla zachowania kultury cyfrowej. W wielu przypadkach celem emulacji w sztuce nowych mediów jest zachowanie nośnika cyfrowego, aby można go było zapisywać w nieskończoność i bezbłędnie odtwarzać, aby nie było uzależnienia od sprzętu, który starzeje się i staje się przestarzały. Paradoks polega na tym, że emulacja i emulator muszą działać na przyszłych komputerach.

W przyszłych projektach systemów

Techniki emulacji są powszechnie stosowane podczas projektowania i opracowywania nowych systemów. Ułatwia proces rozwoju, zapewniając możliwość wykrywania, odtwarzania i naprawy wad projektu jeszcze przed faktycznym zbudowaniem systemu. Jest to szczególnie przydatne przy projektowaniu systemów wielordzeniowych , gdzie błędy współbieżności mogą być bardzo trudne do wykrycia i skorygowania bez kontrolowanego środowiska zapewnianego przez wirtualny sprzęt. Pozwala to również na rozwój oprogramowania, zanim sprzęt będzie gotowy, co pomaga w walidacji decyzji projektowych i daje nieco większą kontrolę.

Rodzaje

Windows XP z emulatorem Acorn Archimedes , który z kolei działa z emulatorem Sinclair ZX Spectrum .
Tetris działa na emulatorze Wzonka-Lad Game Boy na AmigaOS , który sam działa na E-ZEA na nowoczesnym systemie Fedora Linux .

Większość emulatorów po prostu emuluje architekturę sprzętową — jeśli oprogramowanie układowe lub oprogramowanie systemu operacyjnego jest wymagane dla żądanego oprogramowania, musi ono być również dostarczone (i może być emulowane). Zarówno system operacyjny, jak i oprogramowanie będą wówczas interpretowane przez emulator, a nie uruchamiane przez natywny sprzęt. Oprócz tego interpretera dla języka emulowanej maszyny binarnej , niektóre inne urządzenia (takie jak urządzenia wejściowe lub wyjściowe) muszą być również dostarczone w formie wirtualnej; na przykład, jeśli zapisywanie w określonej lokalizacji pamięci miałoby wpływać na to, co jest wyświetlane na ekranie, musiałoby to być emulowane. Chociaż emulacja może, jeśli zostanie doprowadzona do skrajności, zejść do poziomu atomowego, opierając swoje wyjście na symulacji rzeczywistych obwodów z wirtualnego źródła zasilania, byłoby to bardzo niezwykłe rozwiązanie. Emulatory zazwyczaj zatrzymują się na symulacji udokumentowanych specyfikacji sprzętu i logiki cyfrowej. Wystarczająca emulacja niektórych platform sprzętowych wymaga ekstremalnej dokładności, aż do poziomu pojedynczych cykli zegara, nieudokumentowanych funkcji, nieprzewidywalnych elementów analogowych i błędów implementacji. Dzieje się tak szczególnie w przypadku klasycznych komputerów domowych, takich jak Commodore 64 , których oprogramowanie często opiera się na wysoce wyrafinowanych sztuczkach programowania niskiego poziomu wymyślonych przez programistów gier i „ demoscenę ”.

W przeciwieństwie do tego, niektóre inne platformy w bardzo niewielkim stopniu wykorzystywały bezpośrednie adresowanie sprzętowe, takie jak emulator PlayStation 4. W takich przypadkach może wystarczyć prosta warstwa kompatybilności . Przekłada to wywołania systemowe dla obcego systemu na wywołania systemowe dla systemu hosta, np. warstwę kompatybilności z Linuksem używaną na *BSD do uruchamiania natywnego oprogramowania Linuksa z zamkniętym kodem źródłowym na FreeBSD , NetBSD i OpenBSD . Na przykład, podczas gdy procesor graficzny Nintendo 64 był w pełni programowalny, większość gier korzystała z jednego z kilku gotowych programów, które w większości były samowystarczalne i komunikowały się z grą za pośrednictwem FIFO ; dlatego wiele emulatorów w ogóle nie emuluje procesora graficznego, ale po prostu interpretuje polecenia otrzymane z procesora tak, jak robiłby to oryginalny program. Twórcy oprogramowania dla systemów wbudowanych lub konsol do gier wideo często projektują swoje oprogramowanie na szczególnie dokładnych emulatorach zwanych symulatorami, zanim wypróbują je na prawdziwym sprzęcie. Dzieje się tak, aby oprogramowanie mogło być produkowane i testowane, zanim ostateczny sprzęt pojawi się w dużych ilościach, aby można go było przetestować bez poświęcania czasu na kopiowanie programu do debugowania na niskim poziomie i bez wprowadzania skutków ubocznych debuggera . W wielu przypadkach symulator jest faktycznie produkowany przez firmę dostarczającą sprzęt, co teoretycznie zwiększa jego dokładność. Emulatory koprocesora matematycznego umożliwiają uruchamianie programów skompilowanych z instrukcjami matematycznymi na maszynach, które nie mają zainstalowanego koprocesora, ale dodatkowa praca wykonywana przez procesor może spowolnić system. Jeśli koprocesor matematyczny nie jest zainstalowany lub obecny w CPU, kiedy CPU wykonuje jakąkolwiek instrukcję koprocesora, wykona określone przerwanie (koprocesor niedostępny), wywołując procedury emulatora matematycznego. Gdy instrukcja zostanie pomyślnie emulowana, program kontynuuje wykonywanie.

Struktura i organizacja

Zazwyczaj emulator jest podzielony na moduły, które w przybliżeniu odpowiadają podsystemom emulowanego komputera. Najczęściej emulator składać się będzie z następujących modułów:

  • emulator procesora lub symulator procesora (w tym przypadku oba terminy są w większości wymienne), chyba że emulowany cel ma taką samą architekturę procesora jak host, w którym to przypadku można użyć warstwy maszyny wirtualnej
  • moduł podsystemu pamięci
  • różne emulatory urządzeń wejścia/wyjścia (I/O)

Magistrale często nie są emulowane ze względu na wydajność lub prostotę, a wirtualne urządzenia peryferyjne komunikują się bezpośrednio z procesorem lub podsystemem pamięci.

Podsystem pamięci

Możliwe jest zredukowanie emulacji podsystemu pamięci do prostej tablicy elementów, z których każdy ma rozmiar emulowanego słowa; jednak ten model zawodzi bardzo szybko, gdy tylko dowolna lokalizacja w pamięci logicznej komputera nie pasuje do pamięci fizycznej . Jest tak oczywiście w przypadku, gdy emulowany sprzęt pozwala na zaawansowane zarządzanie pamięcią (w takim przypadku logikę MMU można osadzić w emulatorze pamięci, stworzyć własny moduł lub czasami zintegrować z symulatorem procesora). Nawet jeśli emulowany komputer nie jest wyposażony w MMU, zwykle istnieją inne czynniki, które łamią równoważność między pamięcią logiczną i fizyczną: wiele (jeśli nie większość) architektur oferuje I/O mapowane w pamięci ; nawet te, które nie często mają blok pamięci logicznej mapowany na ROM , co oznacza, że ​​moduł tablicy pamięci musi zostać odrzucony, jeśli ma być emulowany charakter pamięci ROM tylko do odczytu. Funkcje takie jak przełączanie banków lub segmentacja mogą również komplikować emulację pamięci. W rezultacie większość emulatorów implementuje co najmniej dwie procedury zapisu i odczytu z pamięci logicznej, a obowiązkiem tych procedur jest mapowanie każdego dostępu do właściwej lokalizacji właściwego obiektu.

W systemie adresowania z limitem podstawowym , w którym pamięć od adresu 0 do adresu ROMSIZE-1 jest pamięcią tylko do odczytu, podczas gdy reszta to pamięć RAM, coś podobnego do następujących procedur byłoby typowe:

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;
    }
}

Symulator procesora

Symulator procesora jest często najbardziej skomplikowaną częścią emulatora. Wiele emulatorów jest pisanych przy użyciu "wstępnie zapakowanych" symulatorów procesora, aby skoncentrować się na dobrej i wydajnej emulacji konkretnej maszyny. Najprostszą formą symulatora procesora jest interpreter , który jest programem komputerowym, który podąża za przebiegiem wykonywania emulowanego kodu programu i, dla każdej napotkanej instrukcji kodu maszynowego, wykonuje operacje na procesorze hosta, które są semantycznie równoważne oryginalnym instrukcjom. Jest to możliwe dzięki przypisaniu zmiennej do każdego rejestru i flagi symulowanego procesora. Logika symulowanego procesora może być następnie mniej lub bardziej bezpośrednio przełożona na algorytmy oprogramowania, tworząc ponowne wdrożenie oprogramowania, które zasadniczo odzwierciedla oryginalną implementację sprzętową.

Poniższy przykład ilustruje, w jaki sposób interpreter może przeprowadzić symulację procesora. W tym przypadku przerwania są sprawdzane przed wykonaniem każdej instrukcji, chociaż takie zachowanie jest rzadkie w prawdziwych emulatorach ze względu na wydajność (ogólnie szybciej jest użyć podprogramu do wykonania pracy przerwania).

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;
    }
}

Interpretery są bardzo popularne jako symulatory komputerowe, ponieważ są znacznie prostsze do wdrożenia niż bardziej efektywne czasowo rozwiązania alternatywne, a ich szybkość jest więcej niż wystarczająca do emulowania komputerów sprzed około dekady na nowoczesnych maszynach. Jednak kara szybkości wynikająca z interpretacji może stanowić problem podczas emulacji komputerów, których szybkość procesora jest tego samego rzędu co maszyna hosta. Jeszcze nie tak dawno emulacja w takich sytuacjach była przez wielu uważana za całkowicie niepraktyczną.

Tym, co pozwoliło przełamać to ograniczenie, były postępy w dynamicznych technikach rekompilacji . Proste tłumaczenie a priori emulowanego kodu programu na kod uruchamialny w architekturze hosta jest zwykle niemożliwe z kilku powodów:

  • kod może być modyfikowany w pamięci RAM , nawet jeśli jest modyfikowany tylko przez emulowany system operacyjny podczas ładowania kodu (np. z dysku)
  • może nie być sposobu na niezawodne odróżnienie danych (które nie powinny być tłumaczone) od kodu wykonywalnego .

Różne formy dynamicznej rekompilacji, w tym popularna technika kompilatora Just In Time (JIT) , próbują obejść te problemy, czekając, aż przepływ sterowania procesorem przeskoczy do lokalizacji zawierającej nieprzetłumaczony kod i dopiero wtedy („just in time”) przetłumaczy blok kodu do kodu hosta, który można wykonać. Przetłumaczony kod jest przechowywany w pamięci podręcznej kodu , a oryginalny kod nie zostaje utracony ani naruszony; w ten sposób nawet segmenty danych mogą być (bezsensownie) tłumaczone przez rekompilator, co skutkuje jedynie stratą czasu na tłumaczenie. Szybkość może nie być pożądana, ponieważ niektóre starsze gry nie zostały zaprojektowane z myślą o szybkości szybszych komputerów. Gra zaprojektowana dla komputera PC 30 MHz z licznikiem poziomu wynoszącym 300 sekund może dać graczowi tylko 30 sekund na komputerze PC 300 MHz. Inne programy, takie jak niektóre programy DOS, mogą nawet nie działać na szybszych komputerach. Szczególnie w przypadku emulacji komputerów typu „closed-box”, w których zmiany w jądrze systemu nie były typowe, oprogramowanie może wykorzystywać techniki zależne od specyfiki komputera, na którym pracował (np. szybkość jego procesora), a tym samym precyzyjnego sterowania Szybkość emulacji jest ważna, aby takie aplikacje były odpowiednio emulowane.

Wejście/wyjście (I/O)

Większość emulatorów, jak wspomniano wcześniej, nie emuluje głównej magistrali systemowej ; dlatego każde urządzenie I/O jest często traktowane jako przypadek specjalny i nie jest dostarczany spójny interfejs dla wirtualnych urządzeń peryferyjnych. Może to skutkować zwiększeniem wydajności, ponieważ każdy moduł we/wy można dostosować do charakterystyki emulowanego urządzenia; projekty oparte na standardowym, zunifikowanym interfejsie API I/O mogą jednak konkurować z takimi prostszymi modelami, jeśli są dobrze przemyślane, i mają dodatkową zaletę „automatycznego” dostarczania usługi wtyczek, dzięki której urządzenia wirtualne innych firm mogą być używany w emulatorze. Zunifikowany interfejs API we/wy niekoniecznie musi odzwierciedlać strukturę rzeczywistej magistrali sprzętowej: projekt magistrali jest ograniczony kilkoma ograniczeniami elektrycznymi i potrzebą zarządzania współbieżnością sprzętową, które można w większości zignorować w implementacji oprogramowania.

Nawet w emulatorach, które traktują każde urządzenie jako przypadek szczególny, zazwyczaj istnieje wspólna podstawowa infrastruktura dla:

  • zarządzanie przerwaniami za pomocą procedury, która ustawia flagi czytelne dla symulatora procesora za każdym razem, gdy zostanie wywołane przerwanie, umożliwiając wirtualnemu procesorowi "odpytywanie o (wirtualne) przerwania"
  • zapisywanie i odczytywanie z pamięci fizycznej za pomocą dwóch procedur podobnych do tych, które dotyczą pamięci logicznej (choć w przeciwieństwie do tych ostatnich często można pominąć tę pierwszą , a zamiast niej zastosować bezpośrednie odwołania do tablicy pamięci)

Porównanie z symulacją

Słowo „emulator” został ukuty w 1963 roku w IBM podczas rozwoju NPL ( IBM System / 360 ) linii produkcyjnej, przy użyciu „nowej kombinacji z oprogramowania , mikrokodu i sprzętu ”. Odkryli, że symulacja przy użyciu dodatkowych instrukcji zaimplementowanych w mikrokodzie i sprzęcie zamiast symulacji programowej wykorzystującej tylko standardowe instrukcje do wykonywania programów napisanych dla wcześniejszych komputerów IBM radykalnie zwiększyła szybkość symulacji. Wcześniej IBM dostarczał symulatory np. 650 na 705 . Oprócz symulatorów, IBM posiadał funkcje kompatybilności na 709 i 7090 , dla których dostarczył komputerowi IBM 709 program do uruchamiania starszych programów napisanych dla IBM 704 na 709 i później na IBM 7090. Ten program używał instrukcji dodana przez funkcję kompatybilności do instrukcji pułapek wymagających specjalnej obsługi; wszystkie inne instrukcje 704 działały tak samo na 7090. Funkcja kompatybilności w 1410 wymagała tylko ustawienia przełącznika konsoli, a nie programu wsparcia.

W 1963 roku, kiedy po raz pierwszy zastosowano mikrokod do przyspieszenia tego procesu symulacji, inżynierowie IBM ukuli termin „emulator”, aby opisać tę koncepcję. W 2000 roku powszechne stało się używanie słowa „emulować” w kontekście oprogramowania. Jednak przed 1980 r. „emulacja” odnosiła się tylko do emulacji ze sprzętem lub mikrokodem, podczas gdy „symulacja” odnosiła się do czystej emulacji programowej. Na przykład emulatorem jest komputer specjalnie zbudowany do uruchamiania programów zaprojektowanych dla innej architektury. Symulatorem natomiast może być program działający na komputerze PC, dzięki któremu można na nim symulować stare gry na Atari. Puryści nadal nalegają na to rozróżnienie, ale obecnie termin „emulacja” często oznacza całkowitą imitację maszyny wykonującej kod binarny, podczas gdy „symulacja” często odnosi się do symulacji komputerowej , w której do symulacji abstrakcyjnego modelu używa się programu komputerowego. Symulacja komputerowa jest wykorzystywana praktycznie w każdej dziedzinie naukowej i inżynierskiej, a informatyka nie jest wyjątkiem, z kilkoma projektami symulującymi abstrakcyjne modele systemów komputerowych, takimi jak symulacja sieci , która zarówno praktycznie, jak i semantycznie różni się od emulacji sieci.

Symulatory logiczne

Symulacja logiczna to wykorzystanie programu komputerowego do symulacji działania obwodu cyfrowego, takiego jak procesor. Odbywa się to po zaprojektowaniu obwodu cyfrowego w równaniach logicznych, ale przed wykonaniem obwodu w sprzęcie.

Symulatory funkcjonalne

Symulacja funkcjonalna to użycie programu komputerowego do symulacji wykonania drugiego programu komputerowego napisanego w symbolicznym języku asemblera lub języku kompilatora , a nie w binarnym kodzie maszynowym . Korzystając z symulatora funkcjonalnego, programiści mogą wykonywać i śledzić wybrane sekcje kodu źródłowego w celu wyszukiwania błędów programistycznych (bugów), bez generowania kodu binarnego. Różni się to od symulowania wykonania kodu binarnego, który jest emulacją oprogramowania. Pierwszy funkcjonalny symulator został napisany przez Autonetics około 1960 roku do testowania programów asemblerowych do późniejszego wykonania w wojskowym komputerze D-17B . Umożliwiło to pisanie, wykonywanie i testowanie programów lotu przed zbudowaniem sprzętu komputerowego D-17B. Autonetics zaprogramował również funkcjonalny symulator do testowania programów lotu do późniejszego wykonania w wojskowym komputerze D-37C .

Konsole do gier wideo

Emulatory konsoli do gier wideo to programy umożliwiające komputerowi osobistemu lub konsoli do gier wideo emulowanie innej konsoli do gier wideo. Są one najczęściej używane do grania w starsze gry wideo z lat 80. i 2000. na nowoczesnych komputerach osobistych i bardziej współczesnych konsolach do gier wideo. Wykorzystywane są również do tłumaczenia gier na inne języki, do modyfikowania istniejących gier, a także w procesie tworzenia dem „home brew” DIY oraz przy tworzeniu nowych gier na starsze systemy. Internet pomógł w rozprzestrzenianiu emulatory konsoli, jak większość - jeśli nie wszystkie - będzie niedostępny do sprzedaży w punktach sprzedaży detalicznej. Przykładami emulatorów konsol, które zostały wydane w ciągu ostatnich kilku dekad, są: RPCS3 , Dolphin , Cemu , PCSX2 , PPSSPP , ZSNES , Citra , ePSXe , Project64 , Visual Boy Advance , Nestopia i Yuzu .

Terminal

Emulatory terminali to programy, które zapewniają nowoczesnym komputerom i urządzeniom interaktywny dostęp do aplikacji działających w systemach operacyjnych komputerów mainframe lub innych systemach hosta, takich jak HP-UX lub OpenVMS . Terminale takie jak IBM 3270 czy VT100 i wiele innych nie są już produkowane jako urządzenia fizyczne. Zamiast tego oprogramowanie działające w nowoczesnych systemach operacyjnych symuluje „głupi” terminal i jest w stanie renderować elementy graficzne i tekstowe aplikacji hosta, wysyłać naciśnięcia klawiszy i przetwarzać polecenia przy użyciu odpowiedniego protokołu terminala. Niektóre aplikacje emulujące terminal to Attachmate Reflection , IBM Personal Communications i Micro Focus Rumba .

Podszywanie się pod złośliwe oprogramowanie

Ze względu na swoją popularność emulatory podszywają się pod złośliwe oprogramowanie. Większość z tych emulatorów jest przeznaczona dla konsol do gier wideo, takich jak Xbox 360, Xbox One, Nintendo 3DS itp. Ogólnie rzecz biorąc, takie emulatory mają obecnie niemożliwe roszczenia, takie jak możliwość uruchamiania gier Xbox One i Xbox 360 w jednym programie.

Zagadnienia prawne

Zobacz artykuł Emulator konsoli — Kwestie prawne

Stany Zjednoczone

Ponieważ komputery i globalne sieci komputerowe nadal się rozwijały, a twórcy emulatorów stawali się coraz bardziej wykwalifikowani w swojej pracy, czas między komercyjnym wydaniem konsoli a jej udaną emulacją zaczął się skracać. Konsole piątej generacji, takie jak Nintendo 64 , PlayStation i konsole szóstej generacji , takie jak Game Boy Advance , odnotowały znaczny postęp w kierunku emulacji podczas ich produkcji. Doprowadziło to do wysiłków producentów konsol, aby zatrzymać nieoficjalną emulację, ale konsekwentne niepowodzenia, takie jak Sega v. Accolade 977 F.2d 1510 (9th Ok. 1992), Sony Computer Entertainment, Inc. v. Connectix Corporation 203 F.3d 596 ( 2000) i Sony Computer Entertainment America przeciwko Bleem 214 F.3d 1022 (2000), przyniosły odwrotny skutek. Zgodnie ze wszystkimi precedensami prawnymi, emulacja jest legalna w Stanach Zjednoczonych. Jednak nieautoryzowane rozpowszechnianie kodu chronionego prawem autorskim pozostaje nielegalne, zarówno zgodnie z prawem autorskim w danym kraju, jak i międzynarodowym prawem autorskim na mocy Konwencji Berneńskiej. Zgodnie z prawem Stanów Zjednoczonych uzyskanie porzuconej kopii oryginalnego systemu BIOS maszyny jest legalne na mocy orzeczenia Lewis Galoob Toys, Inc. przeciwko Nintendo of America, Inc. , 964 F.2d 965 (9. ok. 1992 r.) jako dozwolony użytek, o ile ponieważ użytkownik uzyskał legalnie zakupioną kopię maszyny. Aby to złagodzić, kilka emulatorów dla platform takich jak Game Boy Advance może działać bez pliku BIOS, używając emulacji wysokiego poziomu do symulacji podprogramów BIOS przy niewielkim koszcie dokładności emulacji.

Zobacz też

Bibliografia

Zewnętrzne linki