pro[zind]

Comment programmer un émulateur NES ?

dans Bloc-notes

Par Guillaume Roche 1,2 organisé par CourtBouillon, Genymobile et l'AFPy (via Meetup).

Pour ce meetup de rentrée, Guillaume nous parle d’émulation, de simulation, de virtualisation… et d’un peu de C++ !

Ces différents concepts permettent d'exécuter des programmes hors du cadre matériel et logiciel pour lequel ils ont été conçu. Si le cas d'usage le plus populaire aujourd'hui est le rétro-gaming, Il en existe une multitude. Il est d'ailleurs probable que vous utilisiez au quotidien ces technologies.

Passionné par ces aspects, je me suis lancé le défi d'implémenter un émulateur d'une console NES. Pourquoi la NES ? C'est une machine relativement simple, extrêmement bien documentée, et de nombreux émulateurs open-source existants peuvent nous aider.

Je vous propose de découvrir avec moi une architecture possible d'un émulateur, et comment en implémenter un en nous focalisant sur le CPU, la mémoire, et les fameuses ROMs. Nous évoquerons également comment rendre notre émulateur le plus fidèle possible. Enfin, nous verrons quelle stratégie de tests peuvent s’appliquer sur des projets d'émulateurs.


Notes personnelles

  • Définitions
    • Simulation? Réimplémenter le comportent d'un OS (WINE)
    • Émulation? Réimplémenter le hardware
    • Virtualisation? Émulation avec accès direct au hardware
  • implementation
    • NES CPU : MOS 6502
    • les registres: un objet
    • Initialisation CPU
    • types d'instruction
    • le code C++ de cet émulateur : guillaumeroche/Nestor
  • Précision de l'émulation
    • partit pris on aurait pu vouloir ciler la perf
  • ressources