Billet #001 - 1er juin 2026
Premiers pas avec le 6502
Je joue rĂ©guliĂšrement Ă des jeux vidĂ©o sur Ă©mulateur et je comprends dans les grandes lignes le principe de lâĂ©mulation mais jâai envie dâen apprendre plus et de âmettre les mains dedansâ. Jâaimerais bien savoir Ă©crire un Ă©mulateur de GameBoy, et câest probablement faisable avec suffisamment de patience, mais jâaime comprendre les choses en partant de la base. Câest pour cette raison que je me suis donnĂ© pour projet de construire un systĂšme Ă©lectronique simple et dâĂ©crire ensuite lâĂ©mulateur correspondant. Ainsi je peux commencer en douceur avec les principes fondamentaux de lâĂ©mulation, et complexifier progressivement par la suite selon mes envies.
Jâai choisi de me baser sur le processeur 6502 et son interface 6522 et la sĂ©rie de vidĂ©os de Ben Eater qui leur est consacrĂ©e. Le 6502 Ă©tait le CPU utilisĂ© par de nombreux appareils grand public des annĂ©es 1980 notamment lâApple II, le Commodore 64 et lâAtari 2600. Câest un microprocesseur relativement simple et donc idĂ©al pour dĂ©buter. Des versions modernisĂ©es sont toujours en production aujourdâhui et il existe une large communautĂ© de passionnĂ©s.
Le 6502 est un microprocesseur, et sa fonction principale est donc dâexĂ©cuter des instructions. Contrairement Ă un microcontrĂŽleur, il nâa aucune mĂ©moire interne et aucun pĂ©riphĂ©rique. Il interragit avec le monde extĂ©rieur via un bus de donnĂ©es et un bus dâaddresse, sur lesquels il peut lire et Ă©crire des donnĂ©es. Les instructions Ă Ă©xĂ©cuter, les donnĂ©es Ă traiter, et les donnĂ©es produites, tout passe par le bus. En gĂ©nĂ©ral on connecte sur le bus une mĂ©moire qui contient le programme et les donnĂ©es de travail, et des pĂ©riphĂ©rique comme un afficheur, une carte son, etc.
Je commence par installer le 6502 sur une breadboard, je connecte lâalimentation et les signaux de contrĂŽle de base, et jâajoute un bouton reset. Le signal dâhorloge est gĂ©nĂ©rĂ© par un module basĂ© sur un circuit 555 que jâai construit prĂ©cĂ©demment en suivant les vidĂ©os de Ben Eater sur le sujet. Jâutilise mon Arduino comme source dâalimentation et pour faire des observations par la suite.
Pour vĂ©rifier quâil se passe quelque chose dans le processeur jâai connectĂ© les 4 bits de poids faible du bus dâadresse sur 4 LEDs, et jâai constatĂ© une activitĂ©. Jâai Ă©galement connectĂ© les lignes du bus de donnĂ©es directement sur lâalim ou la masse avec des rĂ©sitances pour faire en sorte quâĂ chaque fois que le CPU lit une donnĂ©e sur le bus il rĂ©cupĂšre la valeur 0xEA, qui correspond Ă lâinstruction NOP (« No Operation »). Quand on observe les lignes dâadresse, on constate un comptage, qui correspond au fait que le CPU lit les instructions les unes aprĂšs les autres dans la mĂ©moire.
Je connecte les lignes dâadresses Ă lâArduino ainsi que le signal dâhorloge, et Ă©crit un programme simple pour lire et afficher les donnĂ©es Ă chaque tic dâhorloge via une interruption. Ben Eater utilise un Arduino Mega pour observer les 16 lignes dâadresse et les 8 lignes de donnĂ©es, mais mon Arduino Uno nâa pas assez de pins pour me permettre dâobserver toutes les lignes, je suis donc restĂ© sur les 4 bits de poids faible de lâadresse uniquement.
Lorsque le processeur dĂ©marre ou est rĂ©initialisĂ©, il va chercher lâadresse de la premiĂšre instruction Ă exĂ©cuter. Pour cela il va lire une donnĂ©e de 16 bits aux adresses 0xFFFC et 0xFFFD, puis commence Ă rĂ©cupĂ©rer les instructions Ă partir de cette adresse. Comme je nâobserve que les 4 derniers bits de lâadresse, je mâattends Ă voir passer les valeurs C et D, qui correspondent aux valeurs binaires 1100 et 1101 respectivement. Lorsque jâappuie sur le bouton reset, je vois effectivement passer ces adresses. Comme le bus de donnĂ©es est cĂąblĂ© pour renvoyer 0xEA, le CPU va commencer Ă lire les instructions Ă partir de lâadresse 0xEAEA. La valeur A en binaire sâĂ©crit 1010, et câest effectivement la premiĂšre adresse quâon voit aprĂšs C et D. TrĂšs cool !
Le code Arduino est disponible sur GitHub.
La suite
La prochaine Ă©tape est de fournir au CPU des donnĂ©es dynamiques en fonction de lâadresse quâil demande, de sorte Ă former un programme qui ait du sens. Classiquement câest le rĂŽle dâune puce mĂ©moire. Mais on peut aussi utiliser Arduino.
J'utilise des outils à base d'IA générative pour rédiger et/ou traduire le contenu de ce site. J'utilise l'IA comme un outil de productivité et d'inspiration, je m'assure toujours que les textes finaux reflÚtent fidÚlement ma voix.