Pourquoi?
Pourquoi? Tout simplement pour pouvoir utiliser les manettes pour famicom (la NES japonaise) qui ne sont sorties
qu'au Japon. Il est injuste que nous ayons été privé d'apprécier ou de détester toutes ces options.
Voici deux photos de manettes Japonaise. À gauche, le Hudson pad, à droite, le Joyball.
Câblage
Un adaptateur peut être fabriqué simplement en câblant un connecteur DB15 Mâle à un cable récupéré
sur une manette NES. Attention, la couleur des fils ici est celle des manettes officielles de
Nintendo. Les manettes fabriquées par des tiers pourraient être différentes.
#broche DB15 | Couleur NES | Fonction |
1 | Brun | GND |
12 | Orange | Latch |
13 | Jaune | Data |
14 | Rouge | Clock |
15 | Blanc | +5 volt |
Cet adaptateur fonctionne très bien avec le Hudson Pad, et très probablement
avec beaucoup d'autres modèles de manettes.
Mais étrangement, il ne fonctionne pas bien avec le Joyball. Détails ci-dessous.
Joyball
Le symptome était que seuls la direction droite et le bouton A semblaient fonctionner.
C'est très intéressant car il s'agit exactement du premier bit transmit (A) et du dernier (Droite). En effet,
l'ordre est le suivant: A,B,Select,Start,Haut,Bas,Gauche,Droite.
En regardant les signaux à l'oscilloscope, le signal DATA se comportait assez bizarrement. Par exemple,
lorsque A était appuyé, B devenait fonctionnel, ajoutez B, Select le devenait et ainsi de suite.
J'ai déduit qu'il devait s'agir d'un problème avec le signal d'horloge, un peu comme si une partie du
Joyball avait du mal à le suivre. Comme si le «timing» n'était pas respecté.
J'ai regardé à l'intérieur et il n'y avait qu'un IC (M60001-0103p), et pas le 4021 habituel. Je pense qu'ils ont du faire
une puce sur mesure pour la fonction Turbo. Je n'ai pas pu trouver d'informations, impossible de valider
le «timing».
Si j'avais eu à ma disposition une console Famicom, j'aurais pu comparer le timing utilisé avec celui
de la NES. N'en ayant pas, j'ai décidé de programmer un microcontrôleur AVR pour étirer les impulsions d'horloge
transmises par la NES de 0.5μ à 2μs. J'ai installé le circuit entre la manette et le NES.
Succès!
J'ai mis la NES sous tension et avec les impulsions de 2μs, tout fonctionnait bien. Enfin presque, car
j'ai rapidement compris pourquoi un Japonais m'avait dit que cette manette était nulle et que ceux qui la
possédait à l'époque faisaient moquer d'eux par leurs amis. C'est qu'après avoir gagné contre son incompatiblité avec la NES, je
suis devenu perdant à Burgertime… Tout ce travail pour ça! Allez-y, moquez-vous de moi ;)
Voici le code, très simple, utilisé pour allonger le signal d'horloge.
1 #include
2 #include
3
4 int main(void)
5 {
6 // In: PORTB5
7 // PORTB all pullup
8 DDRB = 0x00;
9 PORTB = 0xFF;
10
11 // Out: PORTC, ANY
12 DDRC = 0xFF;
13 PORTC = 0x00;
14
15 // PORTD unused, input + pull
16 PORTD = 0xFF;
17 DDRD = 0x00;
18
19 while(1)
20 {
21 // Wait for falling edge
22 while (PINB & (1<<PINB5));
23
24 PORTC = 0x00;
25 _delay_us(2);
26 PORTC = 0xff;
27 }
28 }
Références
Les documents suivants ont été très utiles pour la réalisation de ce projet:
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.