PixelBoy – Un émulateur de GameBoy en C

Un aperçu de l’émulateur

Retrouvez le projet sur GitHub: https://github.com/razor7877/PixelBoy

PixelBoy est un émulateur de GameBoy et GameBoy Color multi-plateformes que j’ai conçu à partir de zéro en C. Même s’il n’est pas encore complet, je rajoute de plus en plus de fonctionnalités, et il commence à être réellement utilisable, n’étant plus juste un projet de test.

Après avoir commencé à m’intéresser au fonctionnement des émulateurs et interpréteurs, j’ai d’abord conçu un interpréteur de CHIP-8 en C++, en un weekend. Ensuite, j’ai décidé de tenter de développer un émulateur de GameBoy en C en me servant des informations disponibles en ligne.

Après un peu plus d’un an, l’émulation de la GameBoy classique est assez complète pour permettre de jouer à la plupart des jeux. L’émulation de la GameBoy Color n’est pas aussi avancée, mais il est possible de jouer à plusieurs jeux, et d’en démarrer d’autres, même si il reste beaucoup de problèmes à régler.

Le processeur est complètement fonctionnel, le contrôleur mémoire est assez complet, l’émulation de la puce graphique (PPU) n’est pas parfaite mais suffisante pour la plupart des jeux. J’ai une émulation très rudimentaire de la puce audio (APU), que la plupart des gens ne font pas à cause de sa complexité.

Il est possible de charger n’importe quelle ROM en faisant un glisser déposer du fichier sur l’émulateur. Un système de sauvegarde très basique est en place. Les cartouches sans mappers, et les mappers MBC1/2/3/5 sont supportés (ce qui permet de démarrer la majorité des jeux commerciaux). L’émulateur se lance en mode GameBoy classique ou Color selon la cartouche qui est chargée.

L’émulateur est très léger et performant. L’exécutable ne fait que 600 ko environ (selon la plateforme), et lorsqu’il est lancé ne consomme que 20 Mo de RAM, et utilise une partie infime de la puissance du processeur.

L’émulation GameBoy Color reste à compléter. Il reste à finir d’implémenter les transferts HDMA, et à corriger des bugs encore mal compris. Ensuite, j’aimerais éventuellement rajouter l’émulation GameBoy Advance (GBA), mais aussi compiler l’émulateur sur des petites cartes (par ex. Raspberry Pi), pour faire une petite console que j’aurai créée à partir de peu de choses (aussi bien le matériel que le logiciel).

The Legend Of Zelda – Link’s Awakening Deluxe qui fonctionne sur l’émulateur en mode GBC
Pokémon Crystal qui fonctionne sur l’émulateur en mode GBC
Tetris qui fonctionne sur l’émulateur en mode GB classique