Como funcionam os emuladores?
Existem muitas maneiras diferentes de construir emuladores, mas no final todos eles se esforçam para conseguir o mesmo: fornecer um ambiente no qual o código foreigh possa rodar, de preferência de tal forma que o código não tenha como distinguir esta plataforma emulada do hardware orignal para o qual foi projetado.Essencialmente, você're criando a matriz. Faça o software pensar que as coisas ao seu redor são reais.
Emulação é'não é estritamente usado para emulação de console de videogame, mas isso'é um caso muito útil, então I'vai focar nisso.
Existem 2 maneiras de se construir um software de emulação:
- A maneira mais simples é imitar o hardware em si, a estrutura interna da máquina original. Você pega o código e executa a operação solicitada como o hardware original o faria. Isto é chamado de emulação de baixo nível (LLE), e it's tipicamente é muito preciso dado que você're basicamente escrevendo um modelo de software do que você're tentando emular. Mas este método também é bastante caro em termos computacionais. Nem tudo precisa de ser replicado em perfeitos detalhes. Existe outra forma?
- High level Emulation (HLE), pelo contrário, tenta replicar o comportamento da plataforma emulada em vez de a modelar perfeitamente. Afinal, quem se importa se você'está fazendo as coisas de maneira diferente desde que o resultado final seja o mesmo?
emuladores HLE empregam táticas como a recompilação dinâmica para tentar extrair mais desempenho também. O problema com esta abordagem é que você'está tentando fornecer uma função similar ao que o hardware faz sem replicar o hardware em questão. O que acontece quando os desenvolvedores de jogos usam truques especiais e não documentados que os emuladores fizeram't consideram? Bem, você tem problemas. Com o LLE, o modelo de software irá (esperançosamente) executar as instruções como pretendido, dado que está a tentar imitar a máquina. Mas o HLE pode acabar com cenários onde os bugs ocorrem porque os devs fizeram algo não planejado.
Existe obviamente algum nível de sobreposição entre as 2 abordagens.
Também, considere que a maioria dos softwares de emulação não é estritamente um ou outro, e frequentemente emula ambos dependendo do que está sendo especificamente emulado (imitar uma cpu de 1mhz dos anos 70 é provavelmente bom, mas você não't gostaria de modelar o comportamento completo de um drive de disco, por exemplo)