Como funciona um emulador?

Sempre achei muito interessante a idéia de emular jogos antigos, de video-games da minha infância, acho que todo mundo que joga e programa também acha, e, com as aulas de Arquitetura de Computadores que venho tendo na faculdade, o interesse voltou. Pesquisando sobre o assunto, descobri que criar um emulador de um console dos mais antigos não é nada de outro mundo, como sempre imaginei, então resolvi tentar. Aproveitando o embalo, pretendo escrever uma série de artigos explicando passo a passo como criar um emulador de Chip-8, que é um dos mais simples que você pode criar.

Certo, mas o que é um emulador mesmo?

É um programa que simula o funcionamento de algum sistema. Nele vão existir partes que simulam uma CPU, a memória, os periféricos de entrada, o vídeo. Enfim, todo o hardware que se deseja simular. Além do sistema, você precisará de uma ROM, que é uma cópia exata do conteúdo do cartucho do video-game. É nela que está o jogo.

E como eu faço isso?

Primeiro, você precisa conhecer muito bem o sistema que quer emular. Depois você precisa identificar e interpretar todos os comandos do sistema, os opcodes (operation codes). Por exemplo, um comum a diversas máquinas é:

ADD x,n

que significa:

x = x + n

Então, onde você encontrar esse opcode, deve executar este comando. Fazendo isso com todos, você terminará com um emulador completo. Simples, não?