Porque é que os emuladores estão tão mal optimizados?
Emulação é lenta quase por natureza.
No caso dos emuladores de consoles de jogos, por exemplo, você tem um dispositivo estrangeiro rodando hardware estrangeiro usando um conjunto de instruções estrangeiro.
Considerar um emulador NES por exemplo:
- Você precisa emular um microprocessador 6502, ou seja, traduzir cada uma das instruções do conjunto de instruções 6502 para o ISA nativo da máquina host (x86,ARM...). Se você quer uma emulação muito precisa, emular o comportamento conhecido do 6502 pode não ser suficiente. Você quer emular a estrutura e mecanismos internos da CPU ao invés de uma simples procura entre os dois conjuntos de instruções.
- Você precisa emular a função de várias outras peças de hardware, como a NES PPU. Você está fazendo puramente em software o que foi feito em hardware na máquina real. As mesmas regras se aplicam como acima. Se você quer precisão perfeita, executar uma simples pesquisa de instruções pode não ser suficiente.
Emulação para um console 2D como o NES é bastante trivial hoje em dia, mas você tem consoles modernos como o WII ou PS2 que na verdade são bastante poderosos também. Esses consoles têm processadores operando na faixa de centenas de mhz/GHZ, às vezes com vários núcleos, e uma GPU 3D razoavelmente capaz.
E em todos os casos, você precisará fazer o acima. Independentemente de você estar recebendo instruções de 10K por segundo ou 10 milhões.