Gamoover

Vous aimez GAMOOVER ? Vous avez trouvé la perle rare grâce à notre forum ?
Alors pourquoi pas nous soutenir en effectuant un petit don Paypal sur : contribution@gamoover.net
C'est peut être un détail pour vous, mais nous, ça nous aiderait beaucoup !

Simuler une manette NES avec un Arduino

Démarré par keube, Samedi 13 Août 2011, 21:16:37 PM

keube

Bonjour à tous,

Après avoir montré comment installer un Arduino sous Linux je vais m'en servir un peu. Le but étant de simuler les manettes de différentes consoles. J'ai acheté récemment une manette NES pour sacrifice donc hop au boulot on va commencer par regarder le protocole d'un peu plus près et plus tard le codage sous Arduino (quand j'aurai du temps...)

Je m'attendais à retomber sur ça http://www.mit.edu/~tarvizo/nes-controller.html avec une modification de la période pour tomber sur du 50Hz mais au final c'est un peu différent. Je n'ai pas l'explication: un protocole légèrement différent pour la zone PAL (France?) ou une info erronée reprise à droite à gauche sur les sites...

Pour les différents fils pas de surprise:
-marron: masse
-blanc: 5V (en vert sur mes captures)
-rouge: latch (en jaune sur mes captures)
-orange: clock (en bleu sur mes captures)
-jaune: data (en rouge sur mes captures)

et une première capture pour vérifier le 50Hz:


un petit zoom pour voir ce qui se passe toutes les 20ms:

Ceci n'est pas mentionné sur les quelques sites que j'ai consulté mais à chaque période de 20ms on observe 2 échanges entre la NES et sa manette!

Quelques explications sur le rôle des différents fils:
latch: La NES envoie un petit pulse sur ce fil toutes les 20ms (x2!), la manette stocke les états des boutons et va ensuite les envoyer.
clock: chaque envoi est effectué en synchronisation avec la clock. On remarquera que le signal est inversé par rapport au lien de "référence"
data: c'est ici que sont envoyé les infos

Regardons ces signaux de plus près:
Le latch:

Le pic dure 3.4µs, à nouveau celà diffère des 12µs attendues.

La clock:


A nouveau rien avec avec la période de 12µs et un ratio de 50% attendus puisqu'on est à 0.5µs haut et 25.9µs à l'état bas... On verra également sur une autre image que la clock ne démarre pas en même temps que le latch mais environ 7µs après que le latch soit activé

Data:
Data est à 0 en dehors des transmissions mais durant le transfert une valeur de 5v correspond à l'état bouton relâché.
Les valeurs de A,B,Select,Start,Haut,Bas,Gauche,Droite sont envoyées successivement.
A activé:

B activé:

Select activé:

Start activé:

Haut activé:

Bas activé:

Gauche activé:

Droite activé:


A l'exception de la première donnée envoyée (A), l'état de chaque donnée est maintenu pendant 25,2µs peu après le pic sur le signal clock.
Pour A l'état est mis à jour dès la réception de latch et est maintenu  8.1 µs:


Je rappelle que ces 8 data sont envoyées 2 fois par cycle de 20ms, avec des timings différents de ce que j'ai pu lire sur le net.

Prochaine étape le codage!
EDIT: Ajout de la correspondances fils manette/capture d'écran











keube


KodeIn

Pour tes analyse logiques, tu utilises un scanalogic?

Il semblerait effectivement que les consoles PAL aient des protocoles différents des consoles JAP.
Et n'étant pas en possession des consoles Japonaises, impossible de vérifier comment ils sont conçus.
Atari 2600 | Spectravideo SV-328 :'( | Amiga 500 | NES - SNES - N64 - NGC - Wii - GBA - GBAsp - DSi | PS1 - PS2 - PS3 - PSP 2000 | MD - DC | XBox - 360 | MacBook | OpenPandora GHZ edition \o/
WIP [pause] : Borne Euro générique de chez Jeux COURTET
Tutos LaunchPad MSP430 001 - 002 - 003 - 004 en attente

Little_Rabbit

Salut,

Pour la clarté de ton exposé, ce serait cool que tu indiques le signal associé à chaque canal de l'analyseur logique (CH1, CH2, CH3 et CH4).

Avec quel matériel as-tu réalisé ces captures ?

Merci.

A+
Recherche bornes dédiées ou PCB originaux: Miss Pacman, Dig Dug, Galaga, Mappy, Asteroids, Battlezone, Missile Command, Tempest, Star Wars, Donkey Kong (+ Jr), Mario Bros, Moon Patrol, Defender, Joust, Frogger, Gyruss, Pooyan, Space Tactics, Zaxxon, etc. Flip : Gottlieb des années 80 (Spirit, Amazon Hunt, ...), Baby Pac Man. Divers :  Ice Cold Beer => Trois fois rien quoi ! :D
Ma séance sur le divan : c'est grave Docteur ? :-\
Ma gaming room, ma storage room

ɐɹqoƆ‾ɥƃᴉH

Si tu regardes les sources de l'UPCB, t'as toutes les explications/code qui vont bien pour un bon paquet de consoles (après, c'est écrit pour des PIC mais le principe est le même...)

keube

Oui j'utilise scanalogic c'est bien pratique pour des signaux de ce type.
Pour le code j'ai les sources de l'UPCB ça me fera gagner un peu de temps