Nintendo NES emulator

Ainos I 3:07 pm, 7th October

En informatique, l’émulation consiste à substituer un composant hardware par un logiciel. L’émulation se distingue de la simulation par le fait que le modèle est délibérément simplifié en comparaison du composant original. Par exemple, l’émulation d’un processeur ne modélisera que partiellement celui-ci, en ignorant par exemple l’échauffement des circuits électriques.

L’émulation est utilisée principalement lorsque le hardware en question est devenu obsolète. Une application courante est la reproduction des vieilles consoles de salon. Le matériel n’étant plus produit, il est nécessaire de virtualiser leur comportement pour exécuter des logiciels initialement écrits pour ce hardware.

Mon projet consiste en l’écriture d’un émulateur pour la console de jeux Nintendo NES. Ce projet s’adresse à toute personne nostalgique, en possession de vieille ROM, et désireuse de revivre les expériences de jeux vécues, ou non, sur cette plateforme incontournable qu’est la Nintendo NES.


Le fonctionnement en quelques lignes

L’émulation d’un matériel informatique consiste à imiter son comportement. Autrement dit, cela consiste à imiter le fonctionnement de son processeur. Dans notre cas le processeur dont il est question est le 6502 de MOS Technology. Pourquoi ce processeur ? Simplement parce que c’est le processeur choisi par les ingénieurs de Nintendo au temps de la conception de la NES. Ce processeur était très répandu, éprouvé et bon marché.

Si on simplifie, le processeur physique consiste en 8 pins pour transférer les données vers/depuis d’autres composants (c’est d’ailleurs la raison pour laquelle on parle de processeur 8 bits) et 16 pins pour les adresses. De plus, le 6502 possède 6 registres (les registres étant des mémoires incorporées au processeur, lui permettant d’effectuer des opérations arithmétiques et de conserver l’adresse de l’instruction suivante.)

Le rôle du processeur sera donc de lire les instructions fournies par la cartouche (ROM) et d’effectuer l’opération associée à cette instruction (le 6502 supporte 56 instructions). Les instructions pouvant par exemple :

- Incrémenter de 1 la valeur du registre X

- Ecrire la valeur 25 à l’adresse 0x12ab

- Lire l’adresse 0x12ab et mettre la valeur dans le registre A

(Chaque instruction et l’opération qu’elle entraine sont documentés dans la datasheet officielle)

Ces instructions, bien que très abstraites, sont le cœur de la NES.

L’émulateur réimplémente donc cette logique en apportant une abstraction sur les concepts de registres et de transfert de données.


Pourquoi ce projet ?

L’informatique étant très vaste, il est impossible d’intervenir sur toutes les couches de la stack dans l’environnement professionnel. Il est rare de voir un développeur web apporter une contribution sur le fonctionnement d’un système d’exploitation. Le désir de réaliser ce projet vient probablement de là : l’envie de découvrir des aspects de l’informatique qui sont absents de mon quotidien.


L'état du projet aujourd'hui ?

Il s’agit d’un projet ambitieux qui m’aura demandé de me documenter abondamment avant même d’écrire la première ligne de code. La documentation est abondante mais terriblement dispersée. De nombreux articles tendent à se contredire, la confrontation des sources est donc indispensable.

Aujourd’hui l’écriture du CPU est terminée. Les instructions sont toutes implémentées et testées. D’autres composant cependant attendent patiemment leur tour pour prendre place dans le code (PPU, APU,…), mais la route est encore longue !

Le projet est entièrement open source et accessible sur GitHub.


Conclusion

Bien qu’il soit loin d’être terminé, ce projet m’aura déjà beaucoup appris. De nombreux concepts sont aujourd’hui abstraits par les langages de programmation. Implémenter un émulateur revient donc à se rapprocher un peu de la racine de tous les systèmes modernes.

Au-delà de l’aspect purement technique, l’émulation permet de garder une trace de l’histoire. Sans émulateur il serait impossible pour de nombreuses personnes de profiter de certain chef-d’œuvre du jeu vidéo. Même si l’utilité de ce projet peut certainement être discutée, je trouve qu’il s’agit d’un sujet qui équilibre bien élégance et complexité technique.


Subscribe to our Newsletters

Info Message: By continuing to use the site, you agree to the use of cookies. Privacy Policy Accept