Emulator - program komputerowy, który duplikuje funkcje jednego systemu informatycznego w innym, dzięki czemu ów drugi system zwraca te same rezultaty, co pierwszy. Mówimy wtedy, że pierwszy system jest emulowany przez drugi.

Jedną z form emulatorów są programy, które umożliwiają uruchamianie aplikacji na komputerze lub systemie operacyjnym innym niż ten na który zostały napisane np. uruchomienie emulatora Amigi w systemie operacyjnym Windows, czy emulatora konsoli do gier Nintendo w systemie Linux. Oczywiście, emulatory są tak programowane, aby jak najdokładniej potrafiły 'udawać' emulowaną maszynę z lepszym lub gorszym efektem (są np. trudności z poprawnym oddaniem palety barw, czy dźwięków oraz z obsługą urządzeń zewnętrznych takich jak np. pady jednak wiele emulatorów posiada praktycznie 100% zgodność z oryginalną maszyną).

Programy te mogą też emulować poszczególne funkcje oprogramowania i sprzętu standardowo niedostępne w ramach danego systemu, np. karty dźwiękowe. Tworzone są też emulatory kalkulatorów Texas Instruments, BBS-ów i wielu innych systemów informatycznych.

Spis treści

[edytuj] Działanie emulatora

Zwykle emulator jest podzielony na moduły, które odpowiadają ogólnie podsystemom emulowanego komputera. Najczęściej emulator składa się z następujących modułów:

  • emulator CPU lub symulator CPU (w tym wypadku zwykle można obu pojęć używać zamiennie)
  • moduł pamięci
  • emulatory urządzeń wejścia-wyjścia

W celu osiągnięcia lepszej wydajności i prostoty emulatora szyny nie są zwykle emulowane. Wirtualne urządzenia komunikują się bezpośrednio z procesorem i pamięcią.

[edytuj] Symulacja CPU

Symulator CPU to często najbardziej skomplikowana część emulatora (wyjątkiem jest tu np. rodzina 8-bitowych Atari posiadająca skomplikowaną architekturę oraz dwa procesory). Wiele emulatorów jest pisanych przy użyciu już gotowych symulatorów CPU po to, aby móc skoncentrować się na pełnej emulacji innych części konkretnego komputera.

W najprostszej formie symulator CPU to interpreter, który wykonuje po jednej instrukcje emulowanego programu.

Poniższy przykład pokazuje jak można symulować CPU poprzez interpreter. W tym przypadku przerwania są sprawdzane i obsługiwane przed każdą kolejną instrukcją, jednak takie zachowanie jest rzadkie w prawdziwych emulatorach z powodu małej wydajności.

void Wykonaj(void)
{
if(Przerwanie!=PRZERW_BRAK)
{
Superużytkownik=TRUE;
ZapiszPamięć(++WskaźnikStosu, LicznikRozkazów);
LicznikRozkazów=WskaźnikPrzerwania;
}
switch(OdczytajPamięć(LicznikRozkazów++))
{
/*
* Tutaj znajduje się obsługa wszystkich
* pojedynczych instrukcji procesora.
*/
default:
Przerwanie=PRZERW_BŁĄD;
}
}

Interpretacja to bardzo popularna metoda symulacji procesora, ponieważ jest o wiele prostsza w implementacji niż szybsze metody, a jej prędkość jest wystarczająca do emulacji komputerów około dziesięcioletnich na komputerach współczesnych.

Mimo to prędkość interpretacji jest niewystarczająca do emulacji procesorów, których prędkość jest tego samego rzędu wielkości co prędkość głównego komputera. Jeszcze do niedawna emulację w takich przypadkach uznawano za zupełnie niepraktyczną.

Większa prędkość emulacji jest możliwa dzięki dynamicznej rekompilacji. Proste tłumaczenie a priori kodu emulowanego programu na docelowy komputer jest zwykle niemożliwe z wielu powodów:

  • kod może być samomodyfikujący się, nawet gdyby ta samomodyfikacja była dokonywana jedynie przez emulowany system operacyjny przy odczytywaniu kodu programów użytkownika (np. z dysku).
  • może nie istnieć sposób na odróżnienie danych (które nie powinny być tłumaczone) od kodu wykonywalnego.

Różne formy dynamicznej rekompilacji, w tym popularna technika Just In Time próbują obejść te problemy poprzez dokonywanie tłumaczenia bloków kodu na nowy procesor dopiero przy napotkaniu przez wykonywany kod instrukcji skoku na nieprzetłumaczone miejsce i przechowywanie już przetłumaczonych części w cache.

Z drugiej strony prędkość emulacji może być zbyt duża, np. przy emulacji procesora 1MHz na procesorze 1GHz. Część emulowanych programów (zwłaszcza z konsol do gier) nie jest przystosowanych do działania na różnych prędkościach procesora i emulator musi ograniczać prędkość wykonywania rozkazów do oryginalnej.

[edytuj] Ciekawostki

[edytuj] Przykładowe emulatory: dostępne na PC, emulujące prace Konsol

Dreamcast:

  • Chankast
  • DEmul
  • DreamEMU
  • Dreamer

Game Boy Color:

  • Rew
  • D-Boy
  • TGB-Dual

Game Boy Advance:

  • BatGBA
  • Boycott Advance
  • DreamGBA
  • Visual Boy Advance
  • No$GBA

Game Cube:

  • Dolphin
  • Dolwin
  • GCEmu
  • Gcube

Nintendo Dual Screen:

  • No$GBA
  • iDeaS
  • DeSmuME
  • Ensata
  • Dualis
  • DSemu

Playstation:

  • Bleem!
  • Epsxe
  • Pcsx
  • Virtual Game Station (VGS)

Playstation 2:

  • Bgm2Wav
  • Fargo
  • Pcsx2
  • PS2emu

[edytuj] Zobacz też