Manette NES

Le projet consiste à construire une manette pour les consoles de jeux Nintendo NES/Famicon qu’on peut voir sur la première photo en bas, En Algérie ils était essentiellement rependus sous forme de clones/copies dans les années 90/2000, ils était abusivement appelées Terminator, comme c’est représenté sur la deuxième figure en bas. L’architecture physique est identique pour les deux, originale et la copie.

Famicon (Japon) à gauche et NES (USA, Europe) à droite
Terminator clone de la Famicon

Le projet consiste à concevoir une manette pour ce genre de consoles, mais avant d’y faire on devrait connaître tout d’abord le concept comment lire la valeur d’un bouton de l’extérieur de la console. Pour les consoles les plus simples comme pour la Sega Master System par exemple représentée sur la photo en bas, sa manette possède 6 boutons, la manette est implémentée de telle-sorte que chaque bouton est un bouton poussoir, lorsque le joueur appuie sur un bouton il va fermer le circuit électrique, et le signal de 5 volts va passer sur le fil correspondant au bouton. La console de l’autre côté va recevoir les signaux sur 6 fils, elle n’a qu’à vérifier le fil avec la valeur logique 1 (celui de 5 volts) pour savoir quel bouton a été appuyé, la valeur 0 (0 volt) étant un bouton non appuyé.

Sega Master System

Pour la NES c’est différent, ses concepteurs ont choisi une approche différente, l’idée du bouton poussoir fermé pour emmètre le signal logique reste la même, mais la transmission de données entre la manette et la console est plus élaborée que celle de la Master System, en raison que la NES possède 8 boutons, si on comptait plus les fils d’alimentation le +/- (Vcc/gnd) ça ferait 10 fils, c’est beaucoup pour la connexion console/manette surtout pour la prise/connecteur sur la console. La solution était basée théoriquement sur la conversion parallèle-série et de transmettre le signal des 8 boutons sur un seul fil, Pour ce faire ils ont songé à utiliser un Shifteur, qui pour un instant donné va capter (commandé par la console) la position de tous les boutons dans sa mémoire, donc un Shifteur de 8 bits avec chaque bit pour un bouton donné est utilisé, le bit est mis à 1 si le bouton est appuyé, 0 sinon. Ensuite il y a une horloge en provenance de la console qui va faire décaler le Shifteur bit par bit pour chaque front montant, chaque bit en dépassement après le décalage sortant du Shifteur est transmis sur le fil vers la console, ainsi après 8 fronts montants d’horloge la console récupère la valeur des 8 boutons. Ce processus se répète infiniment avec une fréquence relativement élevée pour que ça devienne imperceptible pour l’utilisateur.

On peut voir sur le schéma en bas la constitution interne d’une manette NES. Le véritable cœur de la manette est le circuit 4021, c’est un Shifter Parallel-to-Serial, il appartient à la série logique des 4000 (voir la série 4000 sur Wikipédia). Après une analyse du schéma on peut observer que réellement la valeur captée d’un bouton par le Shifteur est inversée, lorsqu’il est appuyé il génère la valeur logique 0 et quand il est relâché il génère la valeur 1 (le GND = 0 volt donc valeur logique 0), les résistances en 1K Ohm sont des résistances Pullup, elles sont utilisées pour produire un 1 logique faible afin d’omettre la valeur Z dans le cas où le bouton poussoir est ouvert (voir Chapitre 1.10), les résistances 3K6 Ohm ont le même rôle avec l’horloge et le signal Latch. Les positions des boutons sont sauvegardées parallèlement et en même temps dans P1 jusqu’à P8, la sauvegarde est initiée par la NES en transmettant la valeur 1 sur l’entrée NES Latch, lorsque la NES remet l’entrée NES Latch sur la valeur 0 la séquence des boutons est transmise bit par bit, un après l’autre en série sur la sortie du Q8 vers la sortie de la manette Controller data, le rythme de séquence des bits est géré par l’horloge en provenance de la NES, chaque front montant produit le bit suivant. Vcc et GND sont les 2 pins d’alimentation en provenance de la NES. S-in est toujours mis-à-0 puisque la manette n’a pas besoin d’entrée en série.

Schéma de manette de la NES

Le schéma suivant illustre le fonctionnement interne d’un Shifteur 4021, ça reste une illustration simplifier du 4021 et non la constitution réelle, pour avoir une appréciation détaillée du Shifteur il faut consulter son datasheet dans lequel tous les détails sont abordés. On peut voir sur le schéma que le Shifteur est constitué comme tout autre Shifteur d’une chaîne de D-FlipFlop interconnectées l’une après l’autre, une horloge unique pour toutes les D-FlipFlop est fournie et son signal est contrôlé en utilisant une porte AND par l’entrée parallel/serial control, le signal parallel/serial control a pour rôle de basculer entre le mode d’entrée des valeur P1-P8 en parallèle, ou de lancer l’exécution du Shifteur en série, s’il est à 1 il va bloquer l’horloge par la porte AND et faire une modification asynchrone directe sur les D-FlipFlop en utilisant leurs entrées de commande set et reset (représentés par 1 et 0 sur le schéma), chaque entrée parallèle Pn est transmise dans sa D-FlipFlop correspondante. Et si le signal est à 0 le mode série du Shifteur peut fonctionner en transmettant en chaîne la valeur de chaque D-FlipFlop à sa voisine directe à droite lors du front montant d’horloge. Le Shifteur possède 3 sorties Q8, Q7 et Q6, le Q8 est la sortie de la dernière cellule mémoire, la sortie de Q7 est celle de l’avant dernière et Q6 de la 6-ième cellule, Q7 et Q6 sont données à l’utilisateur comme options s’il veut utiliser le Shifteur comme un Shifteur à 7 bits ou comme Shifteur à 6 bits.

Schéma interne du Shifteur 4021

Le projet consiste à reconstruire physiquement le circuit électronique de la manette d’une NES en utilisant les différents composants décrits dans le schéma, on aura en tout besoin; des résistances, des boutons poussoirs, et du Shifteur 4021. Il est possible de ne pas trouver disponible à l’achat le 4021, dans ce cas il faut chercher son équivalent dans la série 7400 (la liste de la série 7400 dans Wikipédia), il faut que ça soit un Shifteur (appelé aussi shift register) avec le même comportement, donc un Shifteur parallèle vers série de taille 8 bits avec un chargement asynchrone en parallèle, comme le 74165 par exemple, vous pouvez en trouver d’autres. Pour tester que la manette fonctionne correctement on doit construire un 2-ième circuit faisant office de circuit de test, qui est assez simple. il doit générer pour la manette son alimentation, le signal d’horloge, et le signal du Latch, et permet par une LED (la LED a besoin d’être branchée en série avec une résistance de 180 Ohm pour fonctionner) de visualiser le signal Controller data du retour de la manette. Le signal NES Latch peut être généré par un simple bouton poussoir mais le signal de l’horloge doit être généré par un bouton interrupteur en conjonction avec un circuit RS-Latch construit à partir de 2 portes NOR d’un circuit 7402 (ou équivalent) comme c’est démontré sur le schéma en bas, le circuit permet d’enlever le problème du debouce (rebond), ce sont des micro-coupures dans le signal qui existent sur tous les boutons mécaniques, et qui peuvent détériorer le signal d’horloge, le signal d’horloge sera généré sur Q.

Circuit du Debouce pour un interrupteur

Remarque : Pour la SNES (Super Nintendo) les concepteurs de la machine ont opté pour une solution similaire à la NES. La manette de SNES possède 12 boutons, la même technique de conversion du parallèle vers le série est utilisée on composant 2 Shifteur 4021 en cascade pour couvrir 12 boutons, la sortie du premier Shifteur entre dans l’entrée en série du 2-ième.

Nintendo SNES (Europe)