Adaptateur famicom à NES

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 DB15Couleur NESFonction
1 Brun GND
12 Orange Latch
13 Jaune Data
14 Rouge Clock
15 Blanc +5 volt


Câblage

Câblage

Câblage

Câblage

Câblage

Câblage

Résultat

Résultat



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 ;)

En haut: signal de la NES.<br>En bas: Signal sortant de l'AVR.

En haut: signal de la NES.
En bas: Signal sortant de l'AVR.

Test en cours

Test en cours



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.