X2Wii Convertisseur manette N64, NES ou SNES à Gamecube/Wii

Résumé du projet

C'est une merveilleuse idée qu'a eu Nintendo en proposant à nouveau les jeux de Nes, Snes et N64 sur leur nouvelle console, la Wii. Du moment que j'ai appris qu'il serait possible d'y jouer avec des manettes de Gamecube, l'idée de mettre au point un circuit permettant d'utiliser d'authentiques manettes NES et SNES via les ports pour manettes Gamecube m'est venue.

Mise à jour!: Comme la Wii U et les Wii plus récentes n'ont pas de ports gamecube, j'ai complété un nouveau projet passant par la télécommande Wii qui permet de continuer malgré tout d'utilser les manettes originales.

Dès que j'ai eu accès à une Wii (Je n'avais toujours pas la mienne), j'ai commencé à tester le code que j'avais écris à l'avance. Peu de temps après, j'avais en main un adaptateur permettant d'utiliser une manette NES ou SNES sur une Wii à travers un port de Gamecube. Quelques mois plus tard, je me suis aussi décidé à faire un adaptateur N64 à Wii parce qu'un ami n'arrêtait pas de me le demander.

Le protocole des manettes de Gamecube étant assez évolué si on le compare à celui des manettes Nes et Snes, il n'était pas possible de faire un circuit simple sans utiliser de composantes programmables. J'ai donc utilisé le microcontrôleur Atmega8 d'Atmel. Cela m'a permis d'utiliser mon circuit imprimé Multiuse Tiny1. Étant donné la petite taille de ce circuit, il est possible de le loger à l'intérieur d'une même manette.

Voici quelques exemples de ce qu'il est possible de faire avec ce circuit:
Une manette SNES clone convertie à Gamecube/Wii

Une manette SNES clone convertie à Gamecube/Wii

Une manette NES convertie à Gamecube/Wii

Une manette NES convertie à Gamecube/Wii

Adaptateur N64 à Gamecube/Wii

Adaptateur N64 à Gamecube/Wii

Cable manette SNES à Gamecube/Wii

Cable manette SNES à Gamecube/Wii


(pour plus de photos, visitez la section photos)



Compatiblité

2015-12-26: Cela fait quelques fois qu'on me demande si l'adaptateur fonctionne avec X. J'ai donc créé ce tableau. Sauf exception, l'adaptateur fonctionne avec tout système ou jeu supportant les manettes Gamecube.
Jeu/Système/ManetteCompatible?
Jeux virtual console sur WiiOui
Émulateur Not64Oui
Mario Kart WiiOui
Manette Hori mini 64Oui
Homebrew browserOui
Wii UNon, pas de ports Gamecube
Adaptateur Gamecube pour Wii UNon[1]
Gameboy player et adaptateur SNESOui
Gameboy player et adaptateur N64Non[1]
[1] Les adaptateurs, jeux ou système interrogeant l'adaptatateur à haute fréquence (i.e. Plus que 60Hz) ne fonctionne pas.


Support SNES

SNES mode
SNESGamecube
StartStart
SelectZ
DPADDPAD
Y,X,B,A,L,RY,X,B,A,L,R
L+R+Select+leftCstick vers la gauche1
NES mode 1
SNESGamecube
StartStart
SelectZ
DPADDPAD
Y,BB,A
Y+B+Select+leftCstick vers la gauche1
Y+B+Select+upL+R
NES mode 2
SNESGamecube
StartStart
SelectZ
DPADDPAD
Y,BA,B
Y+B+Select+leftCstick vers la gauche1
Y+B+Select+upL+R

Pour choisir le mode:
  • SNES mode: Mode par défaut..
  • NES mode 1: Maintenez START enfoncé au branchement ou à la mise sous tension de l'adaptateur.
  • NES mode 2: Maintenez START, Y et B enfoncés au branchement ou à la mise sous tension de l'adaptateur.
Matériel supporté:
  • Manettes officielles Nintendo Nord-américaines, Européennes et Japonaises.
  • La plupart des manettes fabriquées par des tiers.
  • La manette « Hori Super Game boy controller »
Faites-moi part des manettes que vous avez testé!
[1] Avant la version 1.4, cette combinaison générait un mouvement du Cstick vers la droite.


Support NES

NES mode 1
NESGamecube
StartStart
SelectZ
DPADDPAD
A,BA,B
A+B+Select+leftCstick vers la gauche1
A+B+Select+upL+R
NES mode 2
NESGamecube
StartStart
SelectZ
DPADDPAD
A,BB,A
A+B+Select+leftCstick vers la gauche1
A+B+Select+upL+R
NES mode 3
NESGamecube
StartStart
SelectY
DPADDPAD
A,BA,B
A+B+Select+leftZ
A+B+Select+upX

Pour choisir le mode:
  • NES mode 1: Mode par défaut.
  • NES mode 2: Maintenez A et B enfoncés au branchement ou à la mise sous tension de l'adaptateur.
  • NES mode 3: Not implemented yet.

[1] Avant la version 1.4, cette combinaison générait un mouvement du Cstick vers la droite.


Support N64

Nintendo 64:
L'adaptateur supporte plusieurs combinaisons qui sont adaptées à différents jeux. Il y a trop de possibilités pour les mettre sur cette page. Consultez plutôt ce fichier:
n64_mapping_table1.4.pdf


Schéma

Voici le schéma. Cliquez pour une plus grande version:
Version Nes/Snes:Version N64:
Commentaires et explications:
Le microcontrôleur est alimenté avec 5 volts pour trois raisons:
  1. Les manettes de Nes et Snes fonctionnent avec 5 volts. Il est donc préférable de présenter un voltage de 5 volts pour un 1 logique aux signaux Latch et Clock de la manette. (Puisque je n'ai pas la spécification exacte de la manette, je ne peux pas savoir de manière certaine au dela de combien de volts la manette considère qu'un 1 logique est présent sur le fil)
  2. Le signal Data provenant de la manette est de 5 volts. Pour éviter que le microcontrôleur soit exposé à un voltage supérieur à son alimentation, il aurait fallu utiliser un diviseur de tension, ce qui augmenterait le nombre de composantes.
  3. Il ne se fait pas d'Atmega8 supportant à la fois un voltage aussi bas que 3.3 volts et une horloge supérieure à 8 mhz et j'avais besoin de vitesse pour ce projet.

La signal Data du coté Gamecube/wii est maintenu à 3.43 volts par une résistance à l'intérieur de la Gamecube. Lorsque quelqu'un souhaite que le signal data soit à zéro, il doit tirer ce signal vers le ground. Sinon, il doit le laisser tel quel. J'accompli cela en alternant la configuration du signal PD2 entre 'Direction sortie transmettant un 0' et 'Direction entrée sans pull-up'.

Il ne faut jamais activer la résistance de pull-up interne de PD2 ni transmettre un 1 en mode sortie car cela injecterait du 5 volts dans le signal Data. Comment savoir si cela ne risque pas d'endommager le port de la Gamecube/Wii? (En fait, j'ai une manette sans fils ne valant pas grand chose qui fonctionne normalement sans rien briser, malgré le fait qu'elle réponde avec du 5 volts!).

La version Nintendo 64 de l'adaptateur utilise le même principe que décrit ci-haut pour contrôler le signal Data. La seule différence est que c'est nous qui devons fournir une résistance de pull-up à 3.43 volts. (Du point de vu de la manette, notre circuit est la console).


Circuit imprimé

Comme je mentionne dans l'introduction, j'ai utilisé mon circuit imprimé Multiuse tiny1. Référez-vous à la page du Multiuse tiny1 pour plus d'informations. Si vous préférez ne pas le construire vous-même, j'en vends des pré-assemblés et pré-programmés dans mon magasin en ligne.

Circuit imprimé miniature

Circuit imprimé miniature

Shéma de câblage (S)NES

Shéma de câblage (S)NES

Shéma de câblage pour N64

Shéma de câblage pour N64



Voici la liste des composantes nécéssaires pour assembler ce projet sur un circuit Multiuse Tiny1. Il y a aussi les numéros d'items Digikey que je suggère d'utiliser.
Référence Description Commentaires # Digikey
C1 Condensateur 10uf 1uf est suffisant. Aussi, avec cette valeur, les condensateurs sont bien plus minces.490-1835-1-ND
C2,C3 Condensateur 18pf Choisir selon le cristal 311-1102-1-ND
Y1 Crystal 16mhz Le numéro digikey est pour un orystal montage en surface. Se soude facilement sur l'empreinte 'thru-hole'. 644-1037-1-ND
R3,R5,R6 Résistances 0 ohms Il est aussi possible de faire un pont de soudure. N/A
U2 Microcontrôleur Atmega8 Il est important d'utiliser la famille supportant 16mhz. Les Atmega8L-* ne vont pas plus vite que 8mhz. ATMEGA8-16AU-ND



Logiciel

Version NES/SNES à GC/Wii

Version v1.5.1
26 mars 2016 (Samedi)
Petites corrections:
  • Correction d'un vieux bug où des événements de bouton aléatoires étaient générés lorsque aucune manette n'était connectée.
  • Correction des valeurs de fuses dans le Makefile pour Atmega168.
Fichier(s):
snes2wii-1.5.1.m8.hex (3.3 KB)
snes2wii-1.5.1.m168.hex (3.5 KB)
snes2wii-1.5.1.tar.gz (16.1 KB)
Afficher les versions précédentes
Version v1.5
9 février 2016 (Mardi)
Support du micro-contrôleur ATmega168. (Build .m8 = Atmega8, Build .m168 = Atmega168)
Fichier(s):
snes2wii-1.5.m8.hex (3.3 KB)
snes2wii-1.5.m168.hex (3.5 KB)
snes2wii-1.5.tar.gz (15.8 KB)
Version v1.4.1
25 avril 2014 (Vendredi)
Nouveau dans cette version:
  • Fréquence d'interrogation de la manette NES/SNES augmentée (Avant: 60hz, maintenant: 200hz) afin de réduire le temps de réaction.
Fichier(s):
snes2wii-1.4.1.hex (3.3 KB)
snes2wii-1.4.1.tar.gz (16.9 KB)
Version v1.4
25 avril 2014 (Vendredi)
Nouveau dans cette version:
  • Changement de direction pour les combinaisons de bouton qui simulaient un mouvement du C-stick vers la droite: Maintenant vers la gauche. (Pour Snes9xGX et FCE Ultra GX)
  • Modernisation du code source.
Fichier(s):
snes2wii-1.4.hex (3.2 KB)
snes2wii-1.4.tar.gz (16.7 KB)
Version v1.3
22 mai 2013 (Mercredi)
Nouveau dans cette version:
  • Les boutons NES A et B peuvent être inversés en gardant A et B enfoncés lors de la mise sous tension de l'adaptateur.
Fichier(s):
snes2wii-1.1.hex (3.1 KB)
snes2wii-1.1.tar.gz (16.5 KB)
Version v1.1
15 septembre 2007 (Samedi)
Nouveau dans cette version:
  • Le mode manette NES peut être activé de force en maintenant la touche Start enfoncée lorsque le circuit commence à être alimenté. Sans ce mode, il est très difficile de jouer à un Jeu de NES avec une manette SNES.
  • Des combinaisons de touches permettent maintenant d'influencer l'état des boutons et joysticks non présents sur les manettes NES et SNES. Par exemple, transmettre comme quoi les touches L et R sont appuyés avec une manette NES, ou encore, pencher le joystick C (C Stick) vers la droite. Tout cela est très utile pour faire apparaître le menu d'un émulateur.
  • Certaines commandes Gamecube n'étaient pas implémentées. Les manettes sont maintenant compatibles avec GCLinux.
Fichier(s):
snes2wii-1.1.hex (3.1 KB)
snes2wii-1.1.tar.gz (16.5 KB)
Version v1.0
28 février 2007 (Mercredi)
Ceci était la première version. Mode NES/Snes sélectionné avec par un cavalier (jumper).
Fichier(s):
snes2wii-1.0.hex (2 KB)
snes2wii-1.0.tar.gz (13.2 KB)
Ce projet est aussi disponible sur GitHub!
Pour suggérer de nouvelles fonctionnalités, signaler un problème ou contribuer au projet, vous pouvez m'écrire ou utiliser le dépôt GitHub:
https://github.com/raphnet/snes2wii

Version N64 à GC/Wii

Version v1.7
11 février 2016 (Jeudi)
  • Correctif pour fonctionner avec le Gameboy player: Lorsqu'un taux d'interrogation très élevé est détecté, la fonction vibration est désactivée.
  • Support du ATmega168
Fichier(s):
n64_to_wii-1.7.tar.gz (85.3 KB)
n64_to_wii-1.7.m8.hex (5.7 KB)
n64_to_wii-1.7.m88.hex (5.7 KB)
n64_to_wii-1.7.m168.hex (5.9 KB)
Afficher les versions précédentes
Version v1.6
8 juin 2010 (Mardi)
  • Première version pour Atmega88 (remplacement du Atmega8 discontinué)
  • Support du Rumble Pack (depuis 1.5)
Fichier(s):
n64_to_wii-1.6.hex (5.7 KB)
n64_to_wii-1.6.tar.gz (88.2 KB)
Version v1.5
18 décembre 2008 (Jeudi)
Ajout de la fonction vibration
Fichier(s):
n64_to_wii-1.5.hex (5.6 KB)
n64_to_wii-1.5.tar.gz (99.6 KB)
Version v1.4
16 mars 2008 (Dimanche)
Nouveau dans la version 1.4:
  • Ajout de 4 nouveaux mappings (équivalence des boutons), chacun étant accessible en gardant un des boutons 'C' appuyé lors du branchement. Ces mappings sont rapportés comme étant utiles pour Super Smash Bros Mélée et Brawl.
  • Creation d'un fichier PDF résumant les différentmappings supportés
  • .
Fichier(s):
n64_to_wii-1.4.hex (5.2 KB)
n64_to_wii-1.4.tar.gz (84.7 KB)
Version v1.3
16 octobre 2007 (Mardi)
Nouveau dans la version 1.3:
  • Il est maintenant possible de désactiver l'inversion des boutons L et Z en gardant le bouton L enfoncé lors du branchement de l'adaptateur la console.
  • Si le bouton R est gardé enfoncé lors du branchement dans la console, les boutons N64 C gauche et C droit correspondent aux boutons Gamecube Y et X. Ceci permet de jouer au jeu Virtual Console Sin and Punishment.
  • La sensibilité du joystick peut être accrue en gardant le bouton de direction droite enfoncé au démarrage.
  • La sensibilité du joystick peut être diminuée en gardant le bouton de direction gauche enfoncé au démarrage.
Fichier(s):
n64_to_wii-1.3.hex (3.6 KB)
n64_to_wii-1.3.tar.gz (17.7 KB)
Version v1.2
15 août 2007 (Mercredi)
La version N64 1.1 n'était pas fiable avec certaines manettes. Le symptôme était que le joystick analogue semblait se recalibrer à tout les 2 à 15 secondes. Ce problème est corrigé dans la version 1.2.
Fichier(s):
n64_to_wii-1.2.hex (2.9 KB)
n64_to_wii-1.2.tar.gz (14.6 KB)
Ce projet est aussi disponible sur GitHub!
Pour suggérer de nouvelles fonctionnalités, signaler un problème ou contribuer au projet, vous pouvez m'écrire ou utiliser le dépôt GitHub:
https://github.com/raphnet/n64_to_wii

Les fuses pour ce projet sont:
  • Versions ATMEGA168: high byte = 0xdc, low byte = 0xd7, extended byte = 0x01
  • Versions ATMEGA88: high byte = 0xd9, low byte = 0xdf, extended byte = 0x07
  • Versions ATMEGA8: high byte = 0xc9, low byte = 0x9f

Pour de l'information sur la programmation d'un AVR, visitez ma page sur la programmation d'AVR

Le code source est disponible dans les fichiers .tar.gz ci dessus. J'ai utilisé la license GPL.

Le code est en assembleur et est compilé avec avr-as. Un makefile est fourni. Pourquoi en assembleur? Principalement pour la vitesse et le contrôle total du timing. La plus petite unité de temps du protocole de communication de la Gamecube est d'une microseconde. À 16 mhz, ceci corresponds à 16 cycles du CPU. En assembleur, il est facile de faire certaines optimisation intéressantes.


Photos

Installation à l'intérieur d'une manette NES: (Attention, méfiez vous des manettes non officielles qui utilisent des couleurs de fils différentes)
À l'intérieur d'une manette NES officielle

À l'intérieur d'une manette NES officielle

Résultat

Résultat

À coté de la Wii

À coté de la Wii

Super mario bros

Super mario bros


Installation à l'intérieur d'une manette SNES: (Attention, méfiez vous des manettes non officielles qui utilisent des couleurs de fils différentes)
à l'intérieur d'une manette SNES non-officielle

à l'intérieur d'une manette SNES non-officielle

Résultat

Résultat

À coté de la Wii

À coté de la Wii

Super mario world

Super mario world


Version Nintendo 64:




Photos prisent pendant le développement et déboguage:
Le développement du logiciel s'est fait chez un ami possédant une Wii...

Le développement du logiciel s'est fait chez un ami possédant une Wii...

Analyse du protocole à l'aide d'un outil maison

Analyse du protocole à l'aide d'un outil maison

Reprogrammation du convertisseur

Reprogrammation du convertisseur

Ca fonctionne presque, la manette est reconnue par la Wii!

Ca fonctionne presque, la manette est reconnue par la Wii!



Photos prisent durant les essais, une fois que tout fonctionnait:


Le prototype:
Vue d'ensemble

Vue d'ensemble

Vue un peu rapprochée

Vue un peu rapprochée




Photos provenant des utilisateurs

J'aime bien voir comment les autres s'y prennent pour assembler mes projets. Vous pouvez me faire parvenir des photos de vos montages et je les afficherai ici.

Andrew Jalics a mis sur son site web des photos de la boîte NES à Wii qu'il a fabriqué avec mon circuit:

Declan Williams, d'Autralie, a construit la version Nes/Snes et N64. Il s'est servi de puces ATmega8 préprogrammés provenant de mon magasin qu'il a installé sur son propre circuit imprimé. Il a aussi trouvé une bonne façon de créer un connecteur de style Snes (Des détails sont visibiles sur ces photos du project 4nes4snes):



5 Juin 2009: Andrew Kay m'a fait parvenir 3 photos de l'adaptateur qu'il a construit:



19 juillet 2014 (Samedi)
TALENTO m'envoie de Bulgarie ces photos de l'adaptateur SNES à Wii/Gamecube qu'il a construit en utilisant un circuit générique acheté sur eBay.




19 juillet 2014 (Samedi)
Jonathan m'a envoyé les photos suivantes de la manette qu'il a modifiée:




31 juillet 2020 (Vendredi)
Jonh a fabriqué le circuit et bâti cet adaptateur SNES à Gamecube:





Références

Ce document explique clairement comment la communication fonctionne au niveau matériel:
Nintendo Gamecube Controller Protocol

Le chapitre 9 de ce document contiens de l'information sur la significations des bits en réponse à certaines commandes:
Yet Another Gamecube Documentation

Cette page contiens de la documentation sur le 'protocole' des manettes Snes:
Sci.Electronics FAQ: Super Nintendo Entertainment System: pinouts & protocol



Avertissement

Je ne saurais être tenu responsable pour les dommages que l'utilisation des informations ou la mise en œuvre des instructions présentées sur cette page pourrait causer à votre équipement, à vous-même ou à autrui. Aussi, je ne donne aucune garantie quant à l'exactitude des informations et à leur fonctionnement.