EMU O QUÊ???
Na informática entende-se um emulador como um software ou hardware que permite rodar programas criados para uma plataforma diferente numa outra plataforma. Concretamente, quando falamos de um emulador, estamos falando de um programa capaz de simular um outro computador, permitindo assim, rodar todos os programas feitos para este (o qual é emulado).
Isto não é uma tarefa fácil, pois é necessário interpretar instruções de um
processador para outro. Adicionada a esta tarefa, está toda a simulação dos restantes
componentes de um computador, nomeadamente os co-processadores, o processador gráfico, o
processador sonoro e todos os circuítos de entrada e saída.
O que torna difícil uma emulação não é a complexidade do computador a emular, mas sim
a sua velocidade, que está diretamente relacionada com o tipo de processador, isto é, se
se trata de um processador de 8, 16 ou 32 bit's. Cada instrução de um processador (CPU)
demora um determinado tempo, designado por cíclos. Como para traduzir um commando de um
CPU, que demora por exemplo 2 cíclos, necessitamos de uma pequena rotina na linguagem do
CPU que vai emular e que é constituída por digamos 10 cíclos, a emulação vai ser 5
vezes mais lenta se ambos os CPU's trabalharem à mesma velocidade. Devemos considerar
tambem, que um processador de 16 bit's tem instruções mais complexas do que um
processador de 8 bit's, por isso uma rotina para emular uma instrução se torna mais
comprida e logo demora mais cíclos. Daqui resulta que o processador a emular tem que ser
suficientemente mais rápido do que o CPU a emular e, de preferência, deve ser um
processador de mais bit's.
NÃO é possível emular por exemplo um PowerPC num Pentium a uma velocidade minimamente
aceitável, pois cada cada comando do PowerPC teria de ser transcrito por muitos comandos
do Pentium, quando ambos os processadores trabalham a velocidades semelhantes. Logo nunca
poderá existir na geração dos processadores Pentium, Pentium Pro e Pentium II
emuladores das consoles Nintendo 64, Sega Saturn e Sony Playstation: uma possível
emulação seria tão lenta que de nada serviria! Finalmente gostaria de apontar para o
fato de haver diversas técnicas na emulação:
1) A forma mais básica de escrever um emulador é fazer
uma rotina em Assembler ou C, que traduz todas as instruções do CPU a emular, e que
simula todo o resto do computador. Arranja-se então umas ROM's e ai está o emulador.
O problema é que os ROM's com o sistema operacional, ou parte dele, como por exemplo no
caso do Apple Macintosh, não podem ser livremente copiados!
2) Quando se pretende emular um computador que recorre a um
sistema operacional baseado em objectos e por isso baseado em API's, pode-se reescrever
todo o sistema operacional na linguagem do CPU que emula, necessitando-se somente uma
emulação do CPU. O emulador torna-se muito mais rápido, porque todos os API's estão
presentes na linguagem nativa do CPU e não há problemas de direitos de autor.
3) Finalmente, existem emuladores que compilam os programas a
emular, ou seja, traduzem-nos na linguagem do CPU que emula, para depois poderem ser
executados as vezes necessárias a uma velocidade mais elevada.
O método mais compatível e mais fiel é contudo o primeiro, pois o que se pretende
normalmente num emulador é simular um computador, tendo a sensação de usá-lo. Isso só
se consegue com os ROM's originais e com os seus bugs... Este documento irá ser
gradualmente atualizado conforme a minha disponibilidade. Agradeço todas as sugestões e
dúvidas.