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:
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/Manette
Compatible?
Jeux virtual console sur Wii
Oui
Émulateur Not64
Oui
Mario Kart Wii
Oui
Manette Hori mini 64
Oui
Homebrew browser
Oui
Wii U
Non, pas de ports Gamecube
Adaptateur Gamecube pour Wii U
Non[1]
Gameboy player et adaptateur SNES
Oui
Gameboy player et adaptateur N64
Non[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
SNES
Gamecube
Start
Start
Select
Z
DPAD
DPAD
Y,X,B,A,L,R
Y,X,B,A,L,R
L+R+Select+left
Cstick vers la gauche1
NES mode 1
SNES
Gamecube
Start
Start
Select
Z
DPAD
DPAD
Y,B
B,A
Y+B+Select+left
Cstick vers la gauche1
Y+B+Select+up
L+R
NES mode 2
SNES
Gamecube
Start
Start
Select
Z
DPAD
DPAD
Y,B
A,B
Y+B+Select+left
Cstick vers la gauche1
Y+B+Select+up
L+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
NES
Gamecube
Start
Start
Select
Z
DPAD
DPAD
A,B
A,B
A+B+Select+left
Cstick vers la gauche1
A+B+Select+up
L+R
NES mode 2
NES
Gamecube
Start
Start
Select
Z
DPAD
DPAD
A,B
B,A
A+B+Select+left
Cstick vers la gauche1
A+B+Select+up
L+R
NES mode 3
NES
Gamecube
Start
Start
Select
Y
DPAD
DPAD
A,B
A,B
A+B+Select+left
Z
A+B+Select+up
X
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:
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)
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.
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
Shéma de câblage (S)NES
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.
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)
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.
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.
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.
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.
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.
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
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
Résultat
À coté de la Wii
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
Résultat
À coté de la Wii
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...
Analyse du protocole à l'aide d'un outil maison
Reprogrammation du convertisseur
Ca fonctionne presque, la manette est reconnue par la Wii!
Photos prisent durant les essais, une fois que tout fonctionnait:
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:
Le chapitre 9 de ce document contiens de l'information sur la significations
des bits en réponse à certaines commandes:
Yet Another Gamecube Documentation
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.