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.