Por que é tão difícil desenvolver um emulador de console de jogos?

14

Eu sempre achei os emuladores bastante fascinantes. Eu gostaria seriamente de criar um emulador para um console de ganeração ou dispositivo portátil mais antigo. Isso me ajudaria a ter uma maior apreciação do hardware e dos jogos que foram criados para esse hardware. No entanto, as pessoas estão sempre dizendo o quão difícil é e que eu nem deveria tentar. Eu gostaria de saber por que isso acontece.

Além disso, gostaria de algumas sugestões sobre um bom lugar para começar e onde posso encontrar as informações necessárias?

Mike
fonte

Respostas:

15

SO Pergunta

Este parece ser um recurso popular sobre como eles funcionam.

TL; DR - A arquitetura é totalmente diferente e são necessários muitos recursos paralelos para alcançar a arquitetura original.

A arquitetura da CPU para consoles de jogos geralmente é um pouco exótica em comparação com uma máquina de desktop comum. Emulação significa executar no software tudo o que o hardware original fez. Ou seja, enquanto o console original pode ter chips gráficos, de áudio etc. dedicados, além de uma CPU com um conjunto de instruções diferente, o emulador deve executar todas as funções desses recursos paralelos em velocidade.

A menos que a GPU do console seja antiga, quase certamente deve ser emulada na GPU da máquina host, pois as placas gráficas modernas, mesmo as baratas, têm muitas vezes a taxa de transferência (para cargas de trabalho gráficas) até das CPUs multicore mais caras. Para aumentar essa dificuldade, o fato de que a comunicação entre CPU, GPU, quaisquer outros DSPs integrados e memória foi provavelmente altamente otimizada no console para aproveitar as especificidades da configuração de hardware e, portanto, esses recursos também devem corresponder à taxa.

Para compor todas essas dificuldades, geralmente pouco se sabe sobre as especificidades do hardware do console, pois isso é mantido em segredo por design. A engenharia reversa está se tornando cada vez menos viável para os amadores.

Para colocar as coisas em perspectiva, um simulador de arquitetura (um programa que pode executar, por exemplo, um programa PowerPC em uma máquina x86 e coletar todo tipo de estatística) pode ser executado entre 1000x e 100000x mais lentamente que em tempo real. Uma simulação RTL (uma simulação de todos os portões e flip-flops que compõem um chip) de uma CPU moderna geralmente pode ser executada apenas entre 10Hz e algumas centenas de Hz. Mesmo a emulação muito otimizada provavelmente é entre 10 e 100 vezes mais lenta que o código nativo, limitando assim o que pode ser emulado de forma convincente hoje em dia (principalmente devido à interatividade em tempo real implicada por um emulador de console de jogos).

O Pato Comunista
fonte