まこと の ブログ

MaKoTo no burogu — Journal de bord…

Aller au contenu | Aller au menu | Aller à la recherche

samedi, 22 novembre 2025

Joystick Arcade pour Nintendo GameCube

La borne est en travaux !
En plus du PC « mame » je souhaite lui installer deux autres systèmes de jeux, dont l'un est la console GameCube.
Motivation ? Jouer à Ikaruga et SoulCalibur sur la borne avec les sticks arcade.
Sauf que ! Comment faire pour connecter ces derniers à la console ?

Avant de réinventer la roue, j'ai traîné sur le web à la recherche d'une proposition de circuit électronique.
J'ai eu un peu de mal à trouver ce que je cherchai, visiblement ça n'intéresse pas trop les foules… L'occasion de constater au passage que la manette GameCube n'était pas aussi électroniquement simple que ses aînées, et qu'il faudrait un circuit programmable pour faire le travail.

J'ai fini par trouver cette page, qui décrit comment construire un contrôleur maison, avec un Arduino, et surtout l’existence de la bibliothèque logicielle adéquate : https://github.com/NicoHood/Nintendo (que je joins en annexe à ce billet)

  • Le code C++ est vraiment très simple à adapter grâce aux exemples donnés, et j'ai alors pu assigner les numéros de broches d'un Arduino Pro Mini 5V aux boutons d'une manette GameCube et établir le schéma de câblage suivant :


Une fois un câble de manette de remplacement acheté, restait alors le plus long à faire, câbler les broches sur le joystick.

  • Ici le brochage est réalisé à l'aide de connecteurs « maisons », qui permettront d'interchanger le joystick entre plusieurs systèmes de jeu (USB ou GameCube pour le moment).


  • Le brochage du câble de la manette est le suivant :
Couleur  −   Usage 

Jaune    −   5V
Blanc    −   GND
Vert     −   GND
Noir     −   GND
Bleu     −   3,3V
Rouge    −   DATA
  • Voici le Scketch à inscrire sur l'Arduino, en ayant pris soins de charger la librairie de NicoHood :

https://github.com/makotoworkshop/Joystick_Arcade_GameCube

#include <Nintendo.h>

// Variables
#define Bouton_A  A1
#define Bouton_B  9
#define Bouton_X  A2
#define Bouton_Y  3
#define Bouton_START  A3
#define Bouton_L  7
#define Bouton_R  8
#define Bouton_Z  2
#define Direction_UP  6
#define Direction_DOWN  5
#define Direction_LEFT  A0
#define Direction_RIGHT  4

// Broche de communication vers la console GameCube
CGamecubeConsole gc_console(10);

// Structure de données de la manette
Gamecube_Data_t gc_data = defaultGamecubeData;


void setup() {
//  Serial.begin(115200);
  // Configuration des boutons en entrée avec résistance pull-up
  pinMode(Bouton_A, INPUT_PULLUP);
  pinMode(Bouton_B, INPUT_PULLUP);
  pinMode(Bouton_X, INPUT_PULLUP);
  pinMode(Bouton_Y, INPUT_PULLUP);
  pinMode(Bouton_START, INPUT_PULLUP);
  pinMode(Bouton_L, INPUT_PULLUP);
  pinMode(Bouton_R, INPUT_PULLUP);
  pinMode(Bouton_Z, INPUT_PULLUP);
  pinMode(Direction_UP, INPUT_PULLUP);
  pinMode(Direction_DOWN, INPUT_PULLUP);
  pinMode(Direction_LEFT, INPUT_PULLUP);
  pinMode(Direction_RIGHT, INPUT_PULLUP);
  delay(100);
}

void loop() {
  // Lecture des boutons
  gc_data.report.a      = !digitalRead(Bouton_A);
  gc_data.report.b      = !digitalRead(Bouton_B);
  gc_data.report.x      = !digitalRead(Bouton_X);
  gc_data.report.y      = !digitalRead(Bouton_Y);
  gc_data.report.start  = !digitalRead(Bouton_START);
  gc_data.report.z      = !digitalRead(Bouton_Z);
  gc_data.report.l      = !digitalRead(Bouton_L);
  gc_data.report.r      = !digitalRead(Bouton_R);

  gc_data.report.dup    = !digitalRead(Direction_UP);
  gc_data.report.ddown  = !digitalRead(Direction_DOWN);
  gc_data.report.dleft  = !digitalRead(Direction_LEFT);
  gc_data.report.dright = !digitalRead(Direction_RIGHT);

  // Stick analogique centré
  gc_data.report.xAxis = 128;
  gc_data.report.yAxis = 128;

  // Stick C centré
  gc_data.report.cxAxis = 128;
  gc_data.report.cyAxis = 128;

  // Gâchettes analogiques à 0
  gc_data.report.left = 0;
  gc_data.report.right = 0;

  // Envoi du rapport à la console de jeux
  gc_console.write(gc_data);

//  Serial.print("bouton Y = ");
//  Serial.println(gc_data.report.y);
  
}

dimanche, 7 mai 2017

Changer la pile d'un jeu Super Nintendo

Les jeux Super Nintendo ont maintenant autour de 25 ans et tournent toujours tranquillement dans la console de l'époque.
Le seul truc c'est que certains jeux à sauvegardes deviennent amnésique.
Je ne sais pas combien de temps est censé tenir la pile de sauvegarde soudée à la carte électronique de ces jeux, j'en ai qui se souviennent encore de mes parties, et d'autres plus du tout.

J'ai donc décidé de procéder au remplacement systématique des piles, quitte à perdre les sauvegardes encore en mémoire.

dsc02622.jpg dsc02621.jpg

  • Après avoir ouvert la cartouche en ôtant les deux vis, on accède au circuit imprimé.

Il est temps de préparer le support de pile en soudant deux bouts de fil.
dsc02602.jpg dsc02604.jpg

  • On dessoude proprement la pile, en prenant soin de repérer les polarités positives et négatives.

On peut donc y souder les fils.
dsc02603.jpg dsc02605.jpg

  • De l'adhésif double face est ici utilisé pour fixer le support de pile au fond du boîtier.

dsc02606.jpg dsc02607.jpg

  • Une fois judicieusement collé, reste à loger la pile dans le support, refermer, revisser…

dsc02608.jpg dsc02611.jpg

  • Et tester… C'est tout simple :)

dsc02612.jpg dsc02619.jpg

samedi, 2 juin 2012

Nintendo GameCube

Premier vide grenier de la saison, première surprise !
En ballade en vue d'hypothétique hauts parleurs pour ma borne, histoire de peut-être remplacer ceux du téléviseur pour de plus grosses, je suis donc allé flâner, juste pour voir… avec aussi l'espoir secret de tomber sur une Megadrive

  • Et v'la t'y pas que j'tombe sur une GameCube à 20€ dont le câble péritel manquant fit baisser le prix à 15€.

Avec The Legend of Zelda: The Wind Waker en loose et Mario Party 4 qui je pense restera dans sa boite…

Voici la machine après un nettoyage de fond en comble.
dsc08095.jpg

  • À ma grande surprise j'ai découvert que le câble péritel était en fait identique à celui de la Super Nintendo, du coup je peux quand même jouer ^^

Lire la suite...

mercredi, 3 février 2010

Autocolant Nolife et Nintendo DSi

Plus je regardais ma DSi, et plus je me disais : «mais merde aurais-je mal choisi sa couleur ?… où elle est juste moche !!?»

En comparant avec la DS de Kolocat, j'en étais venu à ce constat… «oui elle est moche !»
Alors que la DS présente une surface brillante des coins arrondis et un logo saillant, cette DSi voit ses coins plus accentués, un ton mat qui n'est pourtant pas pour me déplaire, mais… il manque quelque chose sur cette grande surface plate, immaculée et désertique qui rend cette console insipide.

dsc06734.jpg J'avais déjà personnalisé mon EeePC901 avec un autocolant Stargate Atlantis «fait maison», alors j'ai récidivé ^^

À ma connaissance il n'existe pas de «stickers» de ce type pour Nolife, mais avec de l'autocolant à plastifier et une imprimante laser, il est possible de faire de belles choses… en noir et blanc.
Une seconde couche de plastique est nécessaire, au risque d'érafler l'encre, comme c'est déjà le cas sur L'Eee :(

dsc06737.jpg
Bah voila ! :) Now elle ressemble plus à quelque chose qu'à… rien.
dsc06730.jpg dsc06733.jpg

- page 1 de 2