# Emulatore

Un emulatore, in informatica e nel senso più generale possibile, è un componente che replica le funzioni di un determinato sistema su un secondo sistema differente dal primo.

## Descrizione

Un software d'emulazione o più comunemente un emulatore è un programma che permette l'esecuzione di software originariamente scritto per un ambiente (hardware o software) diverso all'interno del quale l'emulatore viene eseguito. Ciò consente di utilizzare programmi che non potrebbero girare sui sistemi operativi presenti sui vari personal computer.
Un programma scritto per computer con sistema operativo Windows ad esempio non funziona (in gergo gira) su un computer con sistema operativo differente come ad esempio una distribuzione Linux. In questi casi si crea sulla macchina ospitante un emulatore che riproduce virtualmente l'ambiente che è stato previsto per l'esecuzione di quel programma.
Esistono varie categorie di emulatori, così come esistono diversi metodi per emulare una piattaforma. È possibile emulare completamente un ambiente sia hardware che software oppure soltanto uno dei due. Emulare un ambiente software è tecnicamente meno complicato poiché può essere sufficiente un semplice traduttore di istruzioni che renda comprensibile all'ambiente sul quale l'emulatore gira le istruzioni del programma emulato (ad esempio Microsoft Virtual PC). Nel caso invece dell'emulazione hardware invece sarà necessario simulare la circuiteria elettronica e il comportamento fisico del sistema come avviene ad esempio nel MAME.

### Differenze coi "simulatori" e "virtual machine"

Gli emulatori si distinguono dai simulatori, ed entrambi dalle cosiddette virtual machine o macchine virtuali. Sebbene il risultato finale possa considerarsi (dagli utenti finali) lo stesso, la differenza tra i tre è fondamentale.
* Un emulatore necessita sempre del software del sistema emulato (ottenuto con un processo detto spesso dumping), limitandosi quindi ad emulare l'hardware, in modo da poter interpretare correttamente i file contenenti i dump del software (che rimane scritto in un linguaggio comprensibile soltanto al sistema emulato e non al sistema emulante, o sistema host). L'emulatore si prefigge lo scopo di replicare il funzionamento di un sistema. Una categoria particolare di emulatori sono quelli che fanno uso di emulazione ad alto livello (high-level emulation), che si pongono a metà strada tra un emulatore e un simulatore, in quanto ricreano le funzionalità di un sistema emulato facendo uso di funzioni simili o equivalenti nel sistema emulante, raggiungendo alte velocità di esecuzione a scapito dell'accuratezza. Un esempio è l'emulatore di Nintendo 64 UltraHLE che trasla le funzioni del processore e del sistema grafico della console su funzioni equivalenti dei processori e delle schede grafiche per PC.
* Un simulatore, invece, si prefigge di arrivare allo stesso risultato riscrivendo però (in tutto o in parte) le routine del programma da simulare, in modo da renderlo comprensibile alla macchina su cui gira. Non essendoci alcuna emulazione dell'hardware (cosa che prende diversi cicli-macchina), un simulatore è per forza di cose più veloce, tuttavia è spesso poco preciso nel riproporre fedelmente il software simulato e inoltre la maggioranza delle volte il suo codice sorgente non è disponibile (mentre per buona parte degli emulatori non è così). Per tali motivi, se i simulatori hanno dalla loro una notevole velocità di esecuzione, gli emulatori hanno l'accuratezza (che comprende, ovviamente, anche eventuali bug del software e/o della macchina originale). Uno dei tanti esempi di simulatori in questo senso è la raccolta "Microsoft Return of Arcade" prodotta dalla Microsoft per PC nella seconda metà degli anni 90, che ripropone alcuni coin-op storici. Il simulatore si prefigge lo scopo di replicare il comportamento di un sistema.
* Le virtual machine, infine, si possono considerare un "PC nel PC". Ossia, mediante una virtual machine è possibile installare un secondo sistema operativo in una macchina virtuale e farci girare software in un ambiente considerato più "protetto" che non la macchina host vera e propria. Come si può immaginare, al di là della lentezza (comunque relativa e proporzionale alla potenza della macchina host), non vi è alcun limite. Questi sistemi a volte emulano anche parti di hardware, e altre volte si limitano a replicare l'hardware della macchina host. Tuttavia, non emulano mai macchine con architettura completamente diversa (a partire dalla CPU) e quindi, per alcuni puristi, non sono considerati emulatori nel senso stretto del termine.

### Utilizzo

Un uso popolare degli emulatori è quello che permette di utilizzare videogiochi scritti per computer o console non più in vendita o di difficile reperibilità, come i computer della serie Amiga, il Commodore 64, lo ZX Spectrum, il BBC Micro, l'MSX, la PSX e le vecchie console Nintendo.

## Emulatori famosi

* Dolphin, emulatore di GameCube e Wii
* Cemu, emulatore di Wii U
* Citra, emulatore di Nintendo 3DS
* SuperNDS, emulatore di Nintendo DS
* Yuzu, emulatore di Nintendo Switch
* DOSBox, emulatore di MS-DOS
* ePSXe, il più noto emulatore di PlayStation
* MAME, il principale e più noto emulatore di piattaforme arcade
* MESS, emulatore di computer e console
* Nestopia, emulatore del Nintendo Entertainment System
* NO$GBA, emulatore del Game Boy Advance, Nintendo DS e della PocketStation
* PCSX2, emulatore di PlayStation 2
* Project64, emulatore di Nintendo 64
* SSF, emulatore di Sega Saturn
* VICE, emulatore dei computer a 8 bit prodotti dalla Commodore
* PPSSPP, emulatore di PlayStation Portable