Jelora.fr

Autofire pour jeu sur borne d’arcade

Il y a quelques temps, lors d’une discussion en ligne, quelqu’un cherchait à trouver une Autofire 12Hz pour le jeu Strikers 1945 II pour le Stunfest 2018.

Mais qu’est-ce qu’un Autofire ? En gros, sur certains jeu, pour effectuer plusieurs tirs d’affilée, on doit appuyer sur le bouton de tir autant de fois que nécessaire. Mais cela peut être complexe quand il s’agit d’en faire plusieurs par seconde très rapidemet. Un autofire permet de simuler le pressage d’une touche plusieurs fois par secondes en restant appuyé sur un bouton au lieu d’appuyer plein de fois dessus.

En tout cas, il semblerait que la fréquence de 12Hz ne soit pas très courante dans les Autofire du marché ou à bon prix (même chez les chinois d’après ce qu’on m’a dit ;) ).

Vu qu’il devait être précisément de 12Hz, une question s’est posée. Quelle base de temps utiliser ? J’ai pensé à celle de la synchro horizontale qui est à 15,6KHz (un peu moins si on enlève les blancs dû à la synchro verticale). Vu que certains jeux n’ont pas toujours cette fréquence très précise, cela permettrait de rester bien synchrone avec le jeu.
Dans le cas où la synchro horizontale serait mal détectée, j’avais pensé rajouter une option pour utiliser une base de temps interne et ainsi générer le 12Hz directement.

Cet Autofire devait fonctionner sur du véritable matériel arcade et donc être relié à celui-ci via le connecteur JAMMA.

Dans la description qu’on m’a faite, il fallait lorsqu’on appuie sur le bouton C, simuler quelqu’un qui appuie sur le bouton A 12 fois par secondes.

Sur du matériel arcade, chaque bouton est relié à un fil correspondant et à la masse. Quand on appuie sur l’un d’entre eux, la tension chute. Pour détecter une touche appuyée, rien de plus simple, la tension de cette touche passe de +5V à 0V. Et pour simuler une touche appuyée, il suffit de faire passer la tension du bouton A à 0V en faisant passer complètement le courant entre le fil du bouton A et la masse. Pour réaliser cela, j’ai utilisé un simple transistor bipolaire d’amplification. J’aurais pu utiliser un transistor de commutation mais le courant est si faible (généralement suit les normes TTL) qu’un simple transistor de commutation suffit.

Au final, pour gérer tout ça, j’ai utilisé un microcontrôleur PIC16F84A (pdf) et quelques composants autour.


Un premier prototype a été réalisé :
20180422_003343.jpg


Et testé sur ma borne avec le jeu SNK vs CAPCOM. Même si je n’avais pas le jeu pour lequel cet autofire était destiné, le test était tout à faire réalisable sur un autre jeu. Il s’agissait de vérifier que le comportement du circuit était bon et que le jeu en test réagissait bien.
20180422_003420.jpg


Puis une version finale sur breadboard a été réalisé :
20180429_172801_2.jpg


Un jumper permet de choisir le mode de base de temps à utiliser pour générer les 12Hz. Si celui-ci est laissé, le microcontrôleur utilisera la synchro horizontale pour générer les 12Hz. S’il est retiré, il  utilisera une base de temps interne en utilisant une boucle pour générer les 12Hz.

Dans le code du microcontrôleur, les 12Hz sont obtenues par la valeur définie du nombre d’impulsions de synchro horizontale à attendre (variable "diviseur", oui je n’ai pas trouvé autre nom plus classe :) ). Cette valeur modifiable permettrait de modifier l’autofire actuel pour obtenir une fréquence différente.

L’entrée synchro horizontale est protégée par une diode Zener dans le cas où certains jeux (je pense surtout aux bootlegs par exemple) donnerait une tension trop forte qui pourrait faire griller le microcontrôleur.

Le schéma :
autofire.JPG

Le code en C (codé sous MPLAB, compilable avec XC8) : main.c

Ajouter un commentaire

Nom/Pseudo :

Email (optionnel) :

Site web (optionnel) :

Commentaire :

Vérification: