Emulador
# Emulador

Na computação, um emulador é um software que reproduz as funções de um determinado ambiente, a fim de permitir a execução de outros softwares sobre ele. Pode ser pela transcrição de instruções de um processador alvo para o processador no qual ele está rodando, ou pela interpretação de chamadas para simular o comportamento de um hardware específico. O emulador também é responsável pela simulação dos circuitos integrados ou chips do sistema de hardware em um software. Basicamente, um emulador expõe as funções de um sistema para reproduzir seu comportamento, permitindo que um software criado para uma plataforma funcione em outra. Também são disponíveis emuladores de consoles de videogames.

## Visão geral

Os ambientes computacionais geralmente são formados por camadas. A quantidade e o papel de cada camada pode variar de acordo com o ambiente, e seu grau de dependência. Alguns ambientes são puramente físicos como os terminais de mainframe, e portanto, sua emulação cabe apenas o tratamento dos dados enviados do terminal ou para ele, e reproduzir a interação com o usuário. Outros ambientes podem não possuir um firmware (algumas vezes chamado de bios), sendo que os programas que serão executados conhecem todo o hardware, e sua emulação seria basicamente a interpretação das chamadas ao hardware para reproduzir seu comportamento. Alguns ambientes possuem firmware mas não possuem sistema operacional. Nestes casos será necessário emular também o firmware ou obter um com o fabricante.

## História

O primeiro emulador foi criado em 1964 por Larry Moss, na época funcionário da IBM, consistindo em um Software que fazia com que os programas criados para o mainframe IBM 7070 rodassem na mais nova linha de computadores da IBM, os System/360.
O emulador foi um sucesso e ajudou bastante o System/360 a se tornar um best-seller na década de 1970.

## Popularização

A popularização dos emuladores veio junto com a Internet e os emuladores de vídeo games. As imagens extraídas de cartuchos de vídeo games são chamadas de ROMs e aliadas à programação em baixo nível de jogos para sistemas antigos tornou fácil a possibilidade de criação de emuladores de sistemas como o Chip-8 e depois de vídeo games mais populares como o Atari 2600 e NES.
Apesar de um emulador nem sempre ser a coisa mais fácil de configurar, com pouco conhecimento hoje já é possível rodar um jogo de Playstation em um PC através de um emulador sem muitos problemas, muitas vezes até com qualidade superior ao próprio vídeo game, já que podem-se aplicar efeitos como anti-aliasing que o vídeo game não possui e rodar os jogos em resoluções muito mais altas que o original.

## Aplicações/Vantagens

* Rodar jogos de vídeo games em microcomputadores.
* Testar códigos cross-compilado com maior facilidade.
* Reaproveitamento de softwares escritos para sistemas antigos.
* Rodar jogos de diferentes plataformas.

## Desvantagens

* Para obtermos uma execução satisfatória do sistema que está sendo emulado, ou seu uso em ambiente de produção, o emulador e o ambiente que o executa precisam possuir um desempenho superior ao do sistema original.
* Quanto maior a complexidade, ou a incompatibilidade entre o ambiente emulado e o que está executando o emulador, maior a complexidade da implementação do emulador, e maior exigência de hardware.
* Alguns periféricos e características do sistema original, por serem físicos, serão emulados apenas em nível de software, podendo não oferecer transparência ao usuário final.

## Uso comercial de emuladores
### Emuladores no geral

O processo de emular não constitui crime, dependendo do caso. Vários processos já foram movidos com este assunto e nenhum obteve êxito. Um exemplo de um processo perdido foi o da Creative Labs, fabricante da placa de som Sound Blaster, que na época era hardware básico para algumas aplicações que utilizavam sons. Outras placas de som emularam o hardware da Sound Blaster para ficarem compatíveis com tais aplicativos.
Quando emular esta associado a um hardware, com exemplo vídeo games, o emulador faz o trabalho do console, que por sua vez necessita de ROMs que é o jogo copiado de um cartucho ou CD.
As ROMs ou jogos para emuladores são softwares como qualquer outro. Portanto é crime obter uma ROM ou jogo e executá-lo em um emulador ou hardware sem que você tenha o jogo original.

### Computadores em computadores

Dentre os emuladores comerciais que emulam computadores estão o Softmac que emula Macintosh no PC. Sistemas mais antigos como Atari ST também possuem emuladores oficiais entre eles o Gemulator.

### Vídeo games em computadores

Lançado em 1999, o Virtual Game Station (VGS) foi um emulador de Playstation desenvolvido pela Connectix originalmente para Macintosh e posteriormente portado para PC. A Connectix sofreu ações judiciais por parte da Sony, desenvolvedora do Playstation. Após algum tempo de batalhas judiciais, o emulador foi adquirido pela Sony e descontinuado. A empresa encerrou suas atividades em 2003.
Também lançado em 1999, o bleem! foi um emulador comercial de Playstation para PC desenvolvido pela bleem Company. Posteriormente ganhou uma versão para Dreamcast, chamada de bleemcast!. A Sony também moveu ações judicias contra a bleem Company. Apesar da Sony não ter vencido nenhum dos processos judiciais, os custos advocatícios, o surgimento de emuladores gratuitos e o encerramento na produção do Dreamcast fizeram com que a bleem Company terminasse suas atividades em 2001.

### Vídeo games em vídeo games

A Microsoft utiliza emulação no Xbox One para executar jogos de seu console anterior, o Xbox 360, e utilizou o mesmo método no Xbox 360 para executar jogos de Xbox. O Xbox Live Arcade traz jogos antigos mas eles não são emulados e sim reprogramados e rodam nativamente no hardware do console.
A Sony usa um emulador para emular o PlayStation original no PlayStation Portable. Esse emulador também é usado em todos os modelos de PS3 para emular jogos do primeiro console. A Sony ainda usou um emulador de Emotion Engine nos modelos de 80GB/60GB-europeus para emular o PlayStation 2. Esse emulador é capaz de setar jogos do PS2 em altas resoluções: 720p e 1080p.
A Nintendo usa extensamente emuladores no Wii Virtual Console. Entre os sistemas emulados, estão o NES, Super Nintendo, Mega Drive, Neo-Geo, PC Engine e Nintendo 64. Entretanto, os jogos de Gamecube não são emulados e sim rodam nativamente no hardware do console.
A partir de 2006 muitas empresas lançaram jogos em coletâneas que rodam em um emulador. Esses emuladores oferecem uma emulação mais refinada se comparada aos emuladores de terceiros. Entre as empresas/jogos estão:
* Sega (Sega Genesis Collection)
* Namco (Namco Museum)
* Capcom (Capcom Classics Collection)
* Taito (Taito Classics)
* Atari (Atari Anthology)
Recentemente algumas empresas embutiram jogos antigos emulados em jogos comerciais como um bônus para o jogador. Entre eles estão:
* Prince of Persia: Sands of Time - (Prince of Persia original do PC)
* Ninja Gaiden (Xbox) - (Ninja Gaiden 1, 2 e 3 versão NES)
* Tekken 5 - (Tekken 1, 2 e 3 do Arcade)
* Zelda: Wind Waker - (Zelda: Ocarina of Time de Nintendo 64)
* Mortal Kombat: Shaolin Monks - (Mortal Kombat 2 do Arcade)

## Uso não-comercial (caseiro) de emuladores

Muitos emuladores são livres e programados por terceiros. São denominados também de homebrews. Entre eles estão:

### Computadores em computadores

Algumas arquiteturas de computadores podem ser emuladas em outro computador. Entre eles o x86 (PC comum) (Bochs), o MSX (BRSMS), DOS (DOSBox), AmigaOS (WinUAE), Mac OS (PearPC). É importante esclarecer que um emulador é diferente de uma máquina virtual usadas em sistemas como VMWare, VirtualPC e QEMU. Num emulador, todos os recursos do sistema são processados nele ao contrário da virtualização que é uma ponte entre o hardware nativo e as chamadas do sistema operacional. Outro erro comum é dizer que o WINE é um emulador de Windows - ele é um conjunto de APIs que cria uma camada de compatibilidade ao contrário de emulador que processa todo sistema num único conjunto de software.

### Vídeo games em computadores

A lista de consoles de vídeo games emulados é extensa, é raro um sistema não ser emulado geralmente os mais novos levam tempo para conseguir emular. Entre eles, o Xbox ainda não é satisfatoriamente emulado apesar de existir emuladores prematuros para ele. O PlayStation 2 é bem emulado no PCSX2 mas necessita de um potente computador; O Dreamcast também é bem emulado no nullDC. O PlayStation Portable e Nintendo DS ainda não são 100% emulados, mas no caso do DS o emulador NO$GBA roda perfeitamente alguns jogos. Os videogames da nova geração: Xbox 360 e PlayStation 3 não são emulados. Já o Wii já possui emulação primária a partir da versão open-source do Dolphin (originalmente um emulador de GameCube).

### Vídeo games em vídeo games

É possível emular consoles de videogames antigos num vídeo game atual. Para isso os consoles devem estar destravados com um Modchip ou ter seu sistema firmware modificado para possibilitar o uso de programas não-autorizados. O primeiro emulador a conseguir esse feito foi PNESX que possibilitou emular o NES num PlayStation. O Xbox por ser um PC x86 teve dezenas de emuladores convertidos e adaptados para ele. O PlayStation 2 e o Gamecube também tiveram emuladores para rodar Super Nintendo e Mega Drive. O Nintendo DS pode suportar a emulação de Super Nintendo, Game Boy Color, Atari 2600 e Mega Drive. O Wii suporta o emulador de SNES, Sega Genesis e Master System. O Xbox 360 suporta os emuladores de Playstation 1, Mega Drive, Super Nintendo, Nintendo 64 e Arcade (CPS-1, CPS-2 e Neo-Geo).