Gamoover

Forums "MAME-UNIVERS" => MAMECabs => Discussion démarrée par: Little_Rabbit le Lundi 06 Avril 2020, 18:36:44 PM

Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Lundi 06 Avril 2020, 18:36:44 PM
Salut,

Je m'en vais vous parler d'un projet que je traîne depuis un certain temps : substituer un PCB Pole Position par un PC sous MAME.

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200406182742-Little_Rabbit-IMG-20200321-154806.jpg) (https://gamoovernet.pixhotel.fr/pics/20200406182742-Little_Rabbit-IMG-20200321-154806.jpg)

Cela fait plus de 10 mois qu'il a démarré je crois, mais force est de constater que cela n'avance pas. Aussi, je me dis qu'en ouvrant un vrai WIP, et avec l'aide de vous tous, peut-être que cela progressera plus vite ! ^-

Ceux qui me connaissent le savent, Pole Position est un de mes jeux préférés. J'ai la borne en version cockpit (WIP toujours en cours (https://www.gamoover.net/Forums/index.php?topic=23538.0)...), j'ai aussi la borne Pole Position II en uprigth. Et comme mon frère est fan lui aussi, il a Pole Position I en upright,  avec une restau également en cours, et déjà très bien avancée au niveau cosmétique :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200406182844-Little_Rabbit-restauration-29.jpg) (https://gamoovernet.pixhotel.fr/pics/20200406182844-Little_Rabbit-restauration-29.jpg)

C'est d'ailleurs pour lui que je me suis lancé dans ce projet : sa borne n'avait pas de PCB et une solution à base d'émulateur lui allait très bien.

Car le problème des Pole Position, c'est que leur PCB est particulièrement complexe (2 grandes cartes, 3 microprocesseurs, etc.), et particulièrement panneux ! J'en sais quelque chose, au point que le WIP de mon PCB sur la cockpit est au point mort depuis des mois (années ? :-\) tellement sitôt une réparation faite qu'une nouvelle panne surgit, avec une régression telle qu'on ne sait même pas par où commencer :'(... J'ai 5 ou 6 PCB Pole Position et tous sévèrement en panne ou morts :'(. Deux autres encore me sont passer entre les mains durant les mois passés et même constat : mort cérébrale intégrale :-[ ...

C'est la raison pour laquelle je me résous à remplacer ces PCB trop capricieux par un PC, mais selon un principe Plug & Play, où le PC sous MAME et tout le nécessaire sont regroupés sur une « planche » qui se branche dans la borne exactement comme se brancherait le PCB original.

Le schéma suivant résume le projet :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2022/02/26/20220226235031-Little_Rabbit-PolePoEnPC.png) (https://gamoovernet.pixhotel.fr/pics/v2/2022/02/26/20220226235031-Little_Rabbit-PolePoEnPC.png)

Dit comme ça, le projet est tout simple... Sauf que je suis une bille en MAME, Soft15kHz et compagnie, que Pole Position a en organes d'entrée potentiomètre (pédale d'accélération), spinner (volant) et levier de vitesse High/Low qui compliquent un peu la chose.

Ce que j'ai déjà fait :

- sur un vieux PC (généreusement donné par Chelnov ! :-*), j'ai installé un Win XP Pro SP3
- installé MAME 0.155
- récupéré les fichiers ROM de Pole Position 1 et 2 (rien que ça, j'ai galéré avant d'avoir un ensemble qui fonctionne !...)
=> avec ça, je peux jouer à Pole Position au clavier et à la souris. Banal quoi...

Je vais vous raconter ce que j'ai déjà essayé de faire, avec son lot de déconvenues et échecs, et ce que j'espère réussir à faire.

Dans les épisodes suivants, nous aborderons :

- la carte d'input analogique Xinmotek XM-07 et l'enfer des calibrations
- une solution de remplacement à base d'Arduino/Leonardo
- GroovyMAME ou comment avoir un MAME en 15 kHz
- Flashage du BIOS d'une carte graphique ATI pour qu'elle boote en 15 kHz
- Lancement automatique et masquage de Windows
- L'intégration de l'ensemble sur une planche

Vous l'aurez compris, je ne suis pas au bout de mes peines ! :D

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Iro le Lundi 06 Avril 2020, 18:58:47 PM
Pleins de sujets intéressants  :D  ^-
Si tu veux garder la roue codeuse et si tu as envie, çà serait pas mal de fabriquer de A à Z le branchement sur le PC : Du capteur opto en passant par un arduino/jesaispasquoi vers une souris USB.  :)

:)
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: funkycochise le Lundi 06 Avril 2020, 20:20:24 PM
remember mon wip de l'epoque...

https://www.gamoover.net/Forums/index.php?topic=24021.0 (https://www.gamoover.net/Forums/index.php?topic=24021.0)

je pense m'y connaître un minimum en mame/groovymame.
su tu as des questions n'hésite pas.
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: nono le Lundi 06 Avril 2020, 21:04:47 PM
Salut,
Pour ma part je maîtrise advancemame qui est optimisé pour dos. Si ça peut te dépanner. Par contre sous dos ne fonctionne que le port PS2 pour souris et clavier il me semble. Pour ce qui est d'une borne classique jusqu'à 6 boutons je n'ai pas de souci avec un jpac en PS2.
Par contre, Je n'ai aucune idée pour faire reconnaître ton volant via ce montage.

En tous cas je suis à dispo si tu as besoin.
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Lundi 06 Avril 2020, 21:35:11 PM
Salut,

Merci à tous pour vos retours !   <:)

Citation de: Iro le Lundi 06 Avril 2020, 18:58:47 PM
Si tu veux garder la roue codeuse et si tu as envie, çà serait pas mal de fabriquer de A à Z le branchement sur le PC : Du capteur opto en passant par un arduino/jesaispasquoi vers une souris USB.  :)
Oui oui, c'est bien ce que j'aimerais réussir à faire. Si j'échoue je me rabattrais sur un hack de souris à boule :).

Citation de: funkycochise le Lundi 06 Avril 2020, 20:20:24 PM
remember mon wip de l'epoque...

https://www.gamoover.net/Forums/index.php?topic=24021.0 (https://www.gamoover.net/Forums/index.php?topic=24021.0)

je pense m'y connaître un minimum en mame/groovymame.
su tu as des questions n'hésite pas.

Je viens de relire tout ton WIP pour me rafraîchir la mémoire ! Oui, ton aide en matière de GroovyMame me sera sûrement précieuse ! Et également sur la gestion du potard de l'accélérateur car c'est là dessus que j'ai déjà passé un paquet de temps sans succès :-\...


Citation de: nono le Lundi 06 Avril 2020, 21:04:47 PM
Pour ma part je maîtrise advancemame qui est optimisé pour dos. Si ça peut te dépanner. Par contre sous dos ne fonctionne que le port PS2 pour souris et clavier il me semble. Pour ce qui est d'une borne classique jusqu'à 6 boutons je n'ai pas de souci avec un jpac en PS2.
Par contre, Je n'ai aucune idée pour faire reconnaître ton volant via ce montage.

Merci beaucoup pour ta proposition ! Il est vrai que la légèreté d'une solution sous DOS serait également séduisante :) ! D'autant que pour Pole Position, je n'ai pas besoin d'un PC bien puissant, ce pourrait être l'occasion de recyclé une vieille carte mère... Mais en effet, se pose la question des entrées : comme je n'y connais rien, je viens de regarder le site d'Ultimarc, et le J-PAC (https://www.ultimarc.com/control-interfaces/j-pac-en/j-pac-jamma-interface/) n'a pas d'entrée analogique pour un potard non ? Autre potentiel problème (je reviendrai là dessus plus en détail plus tard), il faut une version de MAME suffisamment récente pour qu'elle supporte l'option "Toggle" sur les Inputs... J'ai peur que ce ne soit pas le cas sur AdvanceMAME non ?

Remarque au passage : j'aimerais bien réussir à le faire si possible sans avoir recours à des cartes "toutes faites" comme celles d'Ulimarc :). Déjà que c'est une forme de renoncement pour moi que de passer par l'émulation, il ne faudrait pas non plus que je n'ai rien à faire !  :D

Merci en tous cas pour votre aide, je sens que je vais progresser plus vite du coup !  ^-^

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Lundi 06 Avril 2020, 23:46:27 PM
Salut,

Je vous raconte cette fois mes errements sans fin avec la carte "Joystick analogique" que mon frère avait achetée chez Small Cab (https://www.smallcab.net/encodeur-analogique-joystick-boutons-p-1957.html), mais qu'il ne parvenait pas à utiliser :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200406233148-Little_Rabbit-IMG-20200321-155027.jpg) (https://gamoovernet.pixhotel.fr/pics/20200406233148-Little_Rabbit-IMG-20200321-155027.jpg)

Il m'avait aussi confié sa pédale d'accélération que j'ai installée sur un support :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200406233203-Little_Rabbit-IMG-20200321-154846.jpg) (https://gamoovernet.pixhotel.fr/pics/20200406233203-Little_Rabbit-IMG-20200321-154846.jpg)

Et j'avais bricolé un panneau de contrôle de fortune avec des trucs de récup :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200406233224-Little_Rabbit-IMG-20200321-155107.jpg) (https://gamoovernet.pixhotel.fr/pics/20200406233224-Little_Rabbit-IMG-20200321-155107.jpg)
(on ne se moque pas là au fond, il est très bien mon levier de vitesse Legrand ! :D)

J'ai déjà passé un temps conséquent sur cette carte, à comprendre comment il fallait l'utiliser : la doc est plutôt indigente, et comme la carte possède plusieurs modes de fonctionnement (joystick analogique, ou track-ball, ou joystick tout ou rien + boutons lumineux), le tout est assez nébuleux au premier abord. Voici un lien vers le site du fabricant (http://www.xin-mo.com/trackball.html).

Concernant les entrées analogiques qui m'intéressent, voici ce que dit le fabricant : « Analog inputs require potentiometers » :-\. Balaise comme doc !...  :-((

Il n'est pas précisé notamment comment une entrée analogique doit être câblée, car on peut imaginer 3 possibilités :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200406233305-Little_Rabbit-Potard-sur-Ximotek.png) (https://gamoovernet.pixhotel.fr/pics/20200406233305-Little_Rabbit-Potard-sur-Ximotek.png)

Cas n°1 : on câble simplement le potentiomètre entre la masse et l'entrée, comme une résistance ajustable

Cas n°2 : on câble le potentiomètre entre +5V et la masse (le « curseur » du potentiomètre présentera à l'entrée analogique une tension variant entre 0 et +5V

Cas n°3 : comme le second cas, mais cette fois-ci câblé entre +3,3V et la masse (le « curseur » du potentiomètre présentera à l'entrée analogique une tension variant entre 0 et +3,3V

J'ai testé les 3 possibilités, et c'est le cas n°3 qui donne une amplitude complète du curseur sur le panneau de contrôle Windows !

Pourriez-vous me confirmer un truc : comment sont repérés le minimum et le maximum sur un joystick analogique sur le panneau de contrôle Windows ? C'est à dire, qu'est-ce qu'indique le panneau de contrôle quand on est « à zéro », et quand on est « à fond ».

Je suis parti sur l'hypothèse suivante :
- curseur vide = à zéro
- curseur tout rouge = à fond !

Et curieusement, avec cette carte Winmotek ça donne :
- « curseur » du potard à la masse = « à fond ! »
- « curseur » du potard à 3,3 V = « à zéro »

J'aurais imaginé l'inverse...

Au-delà de ces premiers questionnements sur les entrées analogiques, j'ai fait des tas d'essais divers et variés, et mes résultats ne sont pas satisfaisants :

1er problème : initialisation de la carte
La carte n'est pas reconnue par Windows si elle est branchée avant la mise sous tension du PC et l'initialisation de Windows. Ça c'est bien pourri car si il faut ouvrir la borne, débrancher et rebrancher la prise USB avant de pouvoir jouer, laisse tomber (d'ailleurs Wanou si tu nous lis, je t'encourage à ne plus proposer cette carte à la vente, elle est de ce point de vue assez naze ;)). Pour contourner ce problème, j'ai fait l'essai suivant : en coupant l'alimentation de la carte à la mise sous tension, et en ne l'alimentant qu'après l'initialisation de Windows, elle est correctement reconnue.

Je pensais du coup intercaler sur le câble USB un relais qui serait activé via un port COM un peu avant le lancement de MAME, et seulement une fois que Windows a fini de s'initialiser :
(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200406233417-Little_Rabbit-IMG-20200321-163504.jpg) (https://gamoovernet.pixhotel.fr/pics/20200406233417-Little_Rabbit-IMG-20200321-163504.jpg)

Ce schéma illustre ce principe :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200406233510-Little_Rabbit-Commande-Relais-Port-COM.jpg) (https://gamoovernet.pixhotel.fr/pics/20200406233510-Little_Rabbit-Commande-Relais-Port-COM.jpg)

Ça devait être jouable, mais je n'ai pas testé car d'autres problèmes étaient plus bloquants.


2ème problème : interface de MAME et la carte qui interfère
Cette carte possède de nombreuses entrées analogique, et est vu par Windows comme un joystick analogique (sur l'axe X et Y), plusieurs curseurs analogiques (palonnier, manette de gaz, etc.) et plusieurs boutons.

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200406233538-Little_Rabbit-Panneau-controle-joy-XinMo.JPG) (https://gamoovernet.pixhotel.fr/pics/20200406233538-Little_Rabbit-Panneau-controle-joy-XinMo.JPG)

Sous MAME, quand je pressais TAB pour aller dans les menus de config, souvent je ne pouvais rien faire car MAME captait des évènements haut/bas ou que sais-je qui rendaient inopérant mes pressions sur telle ou telle touche. Au point que souvent je ne pouvais pas du tout naviguer dans les menus, ou de façon erratique.

Je pensais que cela venait du fait que j'avais laissé beaucoup d'entrées flottantes, et dont le potentiel n'était donc pas fixé. Du coup, j'ai voulu fixer le potentiel de chaque entrée analogique, et notamment le joystick en X/Y pour qu'il ne soit pas interprété comme un curseur de navigation dans les menus. J'ai ajouté une barrette qui me permet facilement plein d'essais différents sans devoir souder / dessouder à chaque fois :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200406233558-Little_Rabbit-IMG-20200321-155038.jpg) (https://gamoovernet.pixhotel.fr/pics/20200406233558-Little_Rabbit-IMG-20200321-155038.jpg)

J'ai aussi ajouté des résistances en pont diviseur 1/2 pour que le joystick X/Y soit bien au milieu et immobile. Avec ça c'est mieux, mais ça fait encore des trucs bizarres. Notamment, il arrive qu'en ouvrant le menu de config avec TAB, je vois l'affichage se rafraîchir à haute fréquence, comme si des tas d'évènements arrivaient pour changer je ne sais quoi...


3ème problème : l'étalonnage
Dans une borne Pole Position, le potentiomètre de la pédale d'accélération n'est pas utilisé sur toute sa course. Donc si on n'étalonne pas, pédale enfoncée à fond, le curseur sous le panneau de contrôle ne monte qu'au 2/3. Je pensais donc qu'il fallait faire un étalonnage via le panneau de contrôle Windows : celui-ci semble bien se passer, j'obtiens après une course complète du curseur, de 0 à max.

Mais une fois sous MAME, ça déconne à fond : pédale non enfoncée je suis bien à l'arrêt, puis si j'appuie progressivement sur la pédale pour aller du min au max, et bien j'enchaîne de l'accélération, puis ralentissement, puis accélération à nouveau, puis etc. Ça fait n'importe quoi ! :-(

Comme l'étalonnage logiciel ne fonctionnait pas, j'ai aussi tenté un étalonnage « électronique », c'est-à-dire alimenter le potentiomètre non plus entre 0V et +3,3V mais entre une tension négative et +3,3V, de sorte que pour la plage utilisée sur la piste de carbone du potentiomètre d'une pédale Pole Position, je me retrouve avec une course complète du curseur sur le panneau de contrôle Windows de mon joystick.

Mais pareil, ça déconne toujours sous MAME :'(.

J'ai repris le truc à zéro, en faisant pour l'instant abstraction de la vraie pédale de la borne, et j'ai câblé un simple potentiomètre en guise de pédale de gaz.

Sous Windows, j'obtiens ça sur le panneau de contrôle, en ayant pris soin de remettre les paramètres par défaut, donc sans étalonnage :


Et voici ce que ça me donne sous MAME, quand je me mets Pole Position en "Service mode" ;D :


Pourriez-vous me détailler les paramètres que vous mettez sous MAME au niveau des Inputs (analogique notamment) ? Y a-t-il quelque chose à faire pour qu'un joystick analogique soit correctement reconnu et donne des valeurs progressives cohérentes ?

Je n'y comprends rien, et pourtant j'ai fait un paquet d'essais dans tous les sens, cherché sur les forums MAME et arcade pour comprendre le truc qui m'échappait, mais en vain :'( ...

Peut-être est-ce moi qui m'y prends comme un pied, mais tout cela m'a poussé à mettre de côté cette carte d'interface analogique Xin-Mo pour chercher une autre solution, à partir de Arduino/Leonardo cette fois : c'est ce dont nous parlerons une prochaine fois, à moins que votre aide rende utilisable cette carte Xinmotek ! :)

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Darth Nuno le Mardi 07 Avril 2020, 13:24:31 PM
J'ai câble ma Polpo' dans le genre. Voici mon setup pour donner un autre exemple de config qui va bien  ;) ->

Interface U-HID 'mini' de chez Ultimarc : pour les contrôles analogiques
ShifterMame pour la partie émulation, un build de mame qui gère 'comme il faut' le levier de vitesse up/down (contact permanent ou pas)
Carte AVGA de chez Ultimarc pour la partie graphique : obtenir un beau signal RGB  ^-
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: foxxx le Mardi 07 Avril 2020, 22:00:32 PM
coucou mon pti lapin,
tu regardera sur facebook je t'ai tagger sur un projet qui pourrait etre interessant pour toi  ;)
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Michel Maeva le Mardi 07 Avril 2020, 23:44:22 PM
Salut Little,

Un nouveau pcb risque de révolutionner le monde de Pole Position :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200407233724-michel29-PI-POSITION.jpg) (https://gamoovernet.pixhotel.fr/pics/20200407233724-michel29-PI-POSITION.jpg)

Il faut rajouter un PI3 ou PI4 avec les roms du jeu sur une micro SD du moins je pense, le pcb se connecterait directement sur les connecteurs de la borne et la borne reprendrait vie...

Je serais vraiment ravi de voir un tel projet aboutir avec cette solution car il ne serait même plus nécessaire d'avoir un PC, flasher une carte ATI, de configurer un MAME, etc.

A plus tard
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Mardi 07 Avril 2020, 23:59:10 PM
Salut,

Merci Nuno pour ces explications !

Citation de: foxxx le Mardi 07 Avril 2020, 22:00:32 PM
coucou mon pti lapin,
tu regarderas sur facebook je t'ai taggé sur un projet qui pourrait être intéressant pour toi  ;)

Merci à toi foxxx ! Spectroman m'en a parlé avant que je ne vois ton message ! :)

@michel29 : oui, c'est ce dont foxxx et spectro me parlaient justement ! Ce projet est très intéressant et prometteur. Espérons qu'il voit le jour rapidement.

Pour autant, je ne vais pas abandonner mon actuel projet : ça fait des mois que je l'ai démarré et je veux le mener à son terme, ne serait-ce que pour ma culture personnelle ! :D

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: SDF le Mercredi 08 Avril 2020, 07:50:47 AM
Salut, j'ai vu ton projet, et le premier truc qui m'est venu a l'esprit, c'est: ya pas deja un mec qui a essayé avec un fpga (sorte de carte programmable qui reproduit le fonctionnement de l'electronique d'origine) et apres une recherche rapide, je suis tombé sur ca :
https://youtu.be/Sft7i6aNrYw
Ca a l'air plus que bien avancé. Et forcement, c'est plus de l'emulation (grand debat en ce moment), deuxieme gros avantage, visiblement ca peux gerer un dual boot (si j'ai bien tout saisi, j'ai vu la video en diagonale).
Vu l'avancement de ton projet, je concoit que ca peux te deranger de repartir de zero mais avec cette solution tu evites les surcouches de problemes : windows / controlleur / crt emudrivers ....
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Mercredi 08 Avril 2020, 10:03:11 AM
Salut,

Merci Nene2k10.

Oui, je connais bien le projet d'Adam Courchesne que je suis depuis des années :) => son boulot est absolument génial !  ^-^

Il y a son blog (mais plus alimenté depuis juin 2017) :
http://ppclone.blogspot.com/

Son site Internet, consacré au dépannage de PCB arcade :
http://onecircuit.com/

Et sa page Facebook :
https://www.facebook.com/OneCircuit

Je suis donc son projet Pole Position clone depuis 2007 :). Mais c'est bien là le problème : nous sommes en 2020, et le projet n'est toujours ni finalisé, ni commercialisé ! :'(

Il semble complètement débordé professionnellement, et cette activité de loisir en pâtit et rien ne bouge ces derniers mois. C'est d'autant plus rageant qu'il semble vraiment proche du but.

Si je me rabats sur de l'émulation, c'est qu'il n'existe aujourd'hui par d'alternative (et puis aussi parce que cela m'intéresse de progresser en compétences dans le domaine :)).

Et c'est aussi parce que à terme j'envisage plutôt un clone à base de FPGA que l'émulation que j'essaye de mener ce projet avec un maximum de recyclage, en utilisant des trucs que j'ai déjà à droite ou à gauche ;).

Mais merci pour ton soutien !  ^-

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: funkycochise le Mercredi 08 Avril 2020, 10:20:08 AM
Citation de: michel29 le Mardi 07 Avril 2020, 23:44:22 PM
Salut Little,

Un nouveau pcb risque de révolutionner le monde de Pole Position :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200407233724-michel29-PI-POSITION.jpg) (https://gamoovernet.pixhotel.fr/pics/20200407233724-michel29-PI-POSITION.jpg)

Il faut rajouter un PI3 ou PI4 avec les roms du jeu sur une micro SD du moins je pense, le pcb se connecterait directement sur les connecteurs de la borne et la borne reprendrait vie...

Je serais vraiment ravi de voir un tel projet aboutir avec cette solution car il ne serait même plus nécessaire d'avoir un PC, flasher une carte ATI, de configurer un MAME, etc.

A plus tard
salut,
tu aurais un lien ?
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Mercredi 08 Avril 2020, 10:50:10 AM
Salut,

C'est sur la page Facebook de Jason Kopp :

https://www.facebook.com/jason.kopp.923/posts/706496456556285

Sinon, est-ce qu'une âme charitable pourrait apporter des réponses à mes questionnements sur les joysticks analogique sur le panneau de contrôle Windows énoncés un peu plus haut ? :)

Je vous remets mes questions :

Citation de: Little_Rabbit le Lundi 06 Avril 2020, 23:46:27 PM
Pourriez-vous me confirmer un truc : comment sont repérés le minimum et le maximum sur un joystick analogique sur le panneau de contrôle Windows ? C'est à dire, qu'est-ce qu'indique le panneau de contrôle quand on est « à zéro », et quand on est « à fond ».

Je suis parti sur l'hypothèse suivante :
- curseur vide = à zéro
- curseur tout rouge = à fond !

Citation de: Little_Rabbit le Lundi 06 Avril 2020, 23:46:27 PM
Pourriez-vous me détailler les paramètres que vous mettez sous MAME au niveau des Inputs (analogique notamment) ? Y a-t-il quelque chose à faire pour qu'un joystick analogique soit correctement reconnu et donne des valeurs progressives cohérentes ?

Et un truc qui me serait super utile, c'est que l'un d'entre vous qui a MAME dans sa borne Pole Position, me dise quand il va dans le menu service, qu'obtenez-vous comme valeurs quand vous enfoncez la pédale d'accélération ?

^-

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Michel Maeva le Mercredi 08 Avril 2020, 21:25:01 PM
Salut Little,

Chelnov n'avait pas déjà réalisé une Pole Position en émulation avec sa borne italienne ?

Je me pose la question...
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Mercredi 08 Avril 2020, 21:36:47 PM
Salut,

@michel29 : oui, tout à fait ! Il l'avait fait avec des interfaces Ultimarc :). Mais à présent la borne est stockée chez Sentinelle, il n'y a donc plus accès... (et puis cela fait des mois que Chelnov n'a pas mis les pieds sur Gamoo... :'().

Il m'a également préparé un CD avec un WinXP Home Edition SP3, et puis donné des indications par téléphone que je n'ai pas encore mise en pratique : je suis resté bloqué sur ces histoires de pédale d'accélération qui fait que je n'ai pas encore exploré les autres défis qui m'attendent ;).

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: SDF le Jeudi 09 Avril 2020, 09:33:17 AM
Pour ton probleme de joystick, je dirai que la barre est vide et se remplie de rouge en appuyant. Sinon, tu sais que pour un prix derisoire, en programmant un arduino, tu peux le transformer en joystick ana et que windows le gere tres bien  ;)
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Jeudi 09 Avril 2020, 10:03:35 AM
Salut,

@Nene2K10 : oui bien sûr, et c'est précisément ce que je disais en introduction et à la fin de mon dernier épisode du WIP ;). J'aborderai le sujet très prochainement :).

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Iro le Jeudi 09 Avril 2020, 11:26:15 AM
non mais ce qu'on veut te dire, c'est d'oublier ton interface moisie (même si on a bien compris que tu es têtu :D )
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Lundi 04 Mai 2020, 23:00:32 PM
Salut,

Citation de: Iro le Jeudi 09 Avril 2020, 11:26:15 AMnon mais ce qu'on veut te dire, c'est d'oublier ton interface moisie (même si on a bien compris que tu es têtu :D )

Oui, je sais bien que je n'ai pas besoin de m'accrocher à cette carte, mais j'aime bien comprendre pourquoi un appareil censé faire un truc ne fonctionne pas ! ;)

D'ailleurs, en parallèle de tout ça, j'avais ainsi sollicité lipide512 qui avait rédigé un très bon tuto sur des contrôleurs analogiques à base d'Arduino : ici (https://www.gamoover.net/Forums/index.php?topic=26913.msg661151#msg661151)

Lipide512 nous avait expliqué que depuis il valait mieux partir sur un Leonardo qui simplifiait la manip (en préservant notamment le port COM du Leonardo, sans devoir gérer les modes programmation/exploitation qu'imposait l'Arduino).

Je me suis donc équipé :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20191203225504-Little_Rabbit-IMG-20191203-225132s.jpg) (https://gamoovernet.pixhotel.fr/pics/20191203225504-Little_Rabbit-IMG-20191203-225132s.jpg)

Et là, s'ouvrait à moi un nouvel univers : la programmation des Arduino / Leonardo !

J'ai copieusement pataugé au début, puis compris des bribes de trucs. J'étais parvenu à programmer un Leonardo en épurant les exemples pour ne garder qu'un potard et quelques boutons.

Ça c'était en décembre dernier. Je ne m'y suis pas recollé que tout récemment :-\...

Et dernièrement, dans le sujet d'aganyte sur le Pijamma, supernono a évoqué un bout de code gérant spinner et potentiomètre. Suite à l'intérêt que j'ai témoigné pour son travail, par mp il m'a très gentiment proposé son aide : un grand merci à lui ! :-*

Mais étant resté bloqué sur la pédale d'accélération, je n'ai pas encore pris le temps de mettre à profit ses suggestions : j'espère pouvoir le faire prochainement.

Revenons-en à la gestion de notre pédale d'accélération via un Leonardo.

Input Analogique à base d'Arduino/Leonardo

À l'occasion, peut-être que j'essayerai de faire un tuto « Leonardo pour les nuls », ça pourrait servir à d'autres comme moi qui peuvent être un peu perdu quand on découvre un sujet aussi vaste que le monde des Arduinos !...

Je ne vais pas vous détailler toutes les étapes par lesquelles je suis passé, mais j'ai tout de même un peu galéré...

Je suis parti sur la bibliothèque «ArduinoJoystickLibrary-version-2.0 » de  Matthew Heironimus que vous pouvez télécharger ici (https://github.com/MHeironimus/ArduinoJoystickLibrary/archive/version-2.0.zip). Son auteur explique son travail sur cette page de son blog (http://mheironimus.blogspot.com/2016/11/arduino-joystick-library-version-20.html).


Je me suis inspiré de plusieurs sources des exemples, modifié à ma sauce pour ne garder que 2 potards analogiques et 4 boutons.

À partir du panneau de contrôle, ça fonctionnait correctement sous Windows : si je tournais un potentiomètre, j'avais bien une progression régulière du curseur correspondant.

Par contre, dès que sous Windows XP j'allais sous MAME, dans le menu service de Pole Position, et bah j'avais exactement le même résultat qu'avec la carte XimoTek !  >:(

À savoir :
- La valeur de l'accélérateur restait un bon moment à 0 en début de course
- puis passait subitement à FF
- puis en continuant toujours la même rotation du potard, ça se mettait à décroître doucement jusqu'à la valeur 70

C'était à s'arracher les cheveux !

J'ai fini par tester le même montage, mais cette fois sous Windows 7, avec un MameUI32 que j'avais installé il y a des années, version 0.123 de février 2008 !...

Et oh surprise, cela fonctionnait correctement : l'accélération partait bien de 0, et au fur et à mesure allait jusqu'à 90.

Ce maxi à 90 m'a d'abord surpris car sur une vraie borne Pole Position, on va au-delà  : 98 sur la mienne quand j'ai fait le test (il faut regarder les chiffres après "ACCEL") :

(car il me reste un PCB dont le mode service fonctionne)

Sur une vraie borne le potentiomètre n'est pas utilisé sur toute sa course : une partie de la piste carbone n'est jamais parcourue par le curseur du potard car la butée mécanique de la pédale l'interdit. Si on l'utilisait sur toute sa course, on peut imaginer qu'au lieu de 98, on irait sans doute jusqu'à FF.

Cette limitation à 90 m'a d'abord laissé perplexe et me faisait penser que j'avais un bug, mais j'imagine que MAME bride la valeur maxi à 90, car cela correspond déjà à la vitesse maximale dans le jeu.

On remarque aussi, si vous tendez l'oreille, qu'il y a un retard entre la butée physique de la pédale en fin de course, et l'établissement de la valeur maxi affichée à l'écran. J'ai d'abord cru que ce retard était dû au fait que sur un PCB original de Pole Position, entre la pédale et l'entrée du convertisseur analogique/numérique, il y a un circuit RC (résistance + condensateur) :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200504224349-Little_Rabbit-PP-gas-pedal-input.jpg) (https://gamoovernet.pixhotel.fr/pics/20200504224349-Little_Rabbit-PP-gas-pedal-input.jpg)

Pour trouver la constante de temps d'un tel montage, il faut utiliser la formule T = R x C.

Or ici, R = 1K ohms, C = 0,1 µF, cela nous donne => 1000 x 0,0000001 = 0,0001 sec, soit 0,1 ms, alors qu'on constate un retard de plus d'une seconde... Je ne sais pas alors à quoi est dû ce retard (peut-être simplement la façon dont le soft du PCB gère l'incrément de la valeur de l'accélérateur...).


Bon OK, ça marche sous Windows 7 et ce vieux MAME, mais pourquoi sous XP sous MAME 0.155 cela déconnait-il ? J'ai essayé d'effacer mes fichiers de config, mais cela ne changeait rien.

J'ai fini par re-télécharger MAME 0.155, tout réinstaller, et cette fois ça fonctionnait !  ;D

J'ai pensé que dans mes essais précédents j'avais fini par foirer la configuration. Pour en avoir le cœur net, je reteste avec mes MAME précédemment installés, et ça marche aussi ! C'est à n'y rien comprendre !  ::)

Et dernier essai, j'ai remis la carte XimoTek, et là par contre ça merdait bien comme au tout début.

Vous n'imaginez pas le temps que j'ai perdu avec ces résultats incohérents !...  )::(
(d'autant que ça commençait à me gonfler sérieux, et que j'étais à deux doigts de tout envoyer balader !  :D)

Je vous livre ici mon source sans son état actuel, qui semble fonctionner :

// Program used to test the USB Joystick object on the
// Arduino Leonardo or Arduino Micro.
//
// Matthew Heironimus
// 2015-03-28 - Original Version
// 2015-11-18 - Updated to use the new Joystick library
//              written for Arduino IDE Version 1.6.6 and
//              above.
// 2016-05-13   Updated to use new dynamic Joystick library
//              that can be customized.
//------------------------------------------------------------

#include "Joystick.h"

#define MaxButtonQty 4
#define FirstButtonPinNumber 4
#define Frein A0
#define Accelerateur A1



// Create Joystick
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_JOYSTICK,
  MaxButtonQty, 0,       // 4 boutons, pas de Hat Switch
  true, true, false,     // Conserve un axe X et Y, mais les laisse en position neutre, pas d'axe Z
  false, false, false,   // Pas de Rx, Ry, ou Rz
  false, true,           // Pas de rudder, mais throttle en guise d'accélérateur
  false, true, false);    // seulement un frein, pas de volant (ni accélérateur car ne semble pas fonctionner...)


 
// Set to true to test "Auto Send" mode or false to test "Manual Send" mode.
//const bool testAutoSendMode = true;
const bool testAutoSendMode = false;

//const bool DebugMode = true;
const bool DebugMode = false;



void setup() {

  //Start serial communication with the computer
  if (DebugMode)
  {
    Serial.begin(9600);
  }
 
  // Set Range Values
  Joystick.setXAxisRange(-127, 127);
  Joystick.setYAxisRange(-127, 127);
  Joystick.setXAxis(0);
  Joystick.setYAxis(0);
 
   
  Joystick.setThrottleRange(0, 1023);
  Joystick.setThrottle(0);
  /*Joystick.setAcceleratorRange(0, 1023);
  Joystick.setAccelerator(0);*/
  Joystick.setBrakeRange(0, 1023);
  Joystick.setBrake(0);
 
 
 // Les boutons du panel sont attribués aux pin 4 à 7
  pinMode(FirstButtonPinNumber, INPUT_PULLUP);
  pinMode(FirstButtonPinNumber + 1, INPUT_PULLUP);
  pinMode(FirstButtonPinNumber + 2, INPUT_PULLUP);
  pinMode(FirstButtonPinNumber + 3, INPUT_PULLUP);

  // l'accélérateur et le frein sont associée aux entrées analogiques A0 et A1
  // A0 = frein
  // A1 = accélérateur
  // les axes X et Y ne sont que virtuels, en position neutre, donc pas d'entrées analogiques pour eux
  pinMode(A0, INPUT_PULLUP);
  pinMode(A1, INPUT_PULLUP);



 
  if (testAutoSendMode)
  {
    Joystick.begin();
  }
  else
  {
    Joystick.begin(false);
  }
 
  // pour pouvour faire clignoter la LED du Leonardo
  pinMode(13, OUTPUT);
}


// État précédent des boutons
int lastButtonState[MaxButtonQty] = {0,0,0,0};
// Valeurs précédentes de l'accélérateur et du frein
int lastAcceleratorValue = 0;
int lastBrakeValue = 0;




void loop() {
 
int index;
int currentButtonState;
int currentAnalogValue;
String DebugMsg;
String Msg1;
String Msg2;
String Msg3;
bool ButtonChange;

  Msg1 = String("Gas     = ");
  Msg2 = String("Brake   = ");
  Msg3 = String("Buttons = ");
  // remet à 0 la chaîne utilisée pour les messages de debug
  DebugMsg = String();

  // Turn indicator light on.
  digitalWrite(13, 1);
 
  // lit les valeurs analogiques
  // l'accélérateur
  currentAnalogValue = analogRead(Accelerateur);
  if (currentAnalogValue != lastAcceleratorValue)
  {
    lastAcceleratorValue = currentAnalogValue;
    Joystick.setAccelerator (lastAcceleratorValue);
    Joystick.setThrottle (currentAnalogValue);
    if (DebugMode)
    {
      DebugMsg = Msg1 + lastAcceleratorValue;
      Serial.println(DebugMsg);
    }
  }

  // puis le frein
  currentAnalogValue = analogRead(Frein);
  if (currentAnalogValue != lastBrakeValue)
  {
    lastBrakeValue = currentAnalogValue;
    Joystick.setBrake (currentAnalogValue);
    if (DebugMode)
    {     
      DebugMsg = Msg2 + lastBrakeValue;
      Serial.println(DebugMsg);
    }
  }

  // Lit les boutons
  ButtonChange = false;
  for (index = 0; index < MaxButtonQty; index++)
  {
    currentButtonState = !digitalRead(index + FirstButtonPinNumber);
    if (currentButtonState != lastButtonState[index])
    {
      Joystick.setButton(index, currentButtonState);
      lastButtonState[index] = currentButtonState;
      ButtonChange = true;
    }
  }
  if (DebugMode)
  {
    if (ButtonChange == true)
    {
      DebugMsg = Msg3 + lastButtonState[0] + " " + lastButtonState[1] + " " + lastButtonState[2] + " " + lastButtonState[3];
      Serial.println(DebugMsg);
    }
  }
   
  if (testAutoSendMode == false)
  {
    Joystick.sendState();
  }

  //Attend 15 ms avant de boucler
  delay(15);
 
}

Parmi vos périphériques, vous devez alors avoir une manette de jeu qui vous affiche ces paramètres :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200504224834-Little_Rabbit-LeonardoAcc-Frein-4boutons.jpg) (https://gamoovernet.pixhotel.fr/pics/20200504224834-Little_Rabbit-LeonardoAcc-Frein-4boutons.jpg)

À noter que parmi les types d'axes disponibles sur le joystick analogique que le Leonardo gère ici, on est censé avoir Throttle (manette de gaz sur un avion) et Accelerator (pour un accélérateur de voiture). Sauf que Accelerator n'a jamais fonctionné, il n'apparaît pas quand on regarde les paramètres de la manette ! J'ai donc pris Throttle à la place.

Au sujet du mode « testAutoSendMode », je n'ai pas vraiment vu de différence selon qu'il est activé ou pas. De ce que j'ai compris, le Leonardo envoie à la demande ou automatiquement les infos mises à jour du joystick, c'est ça ?

Maintenant que le panel fonctionne, avec son accélérateur et le frein, je vais me pencher sur la gestion du spinner pour le volant ! Le source que supernono m'a donné devrait fortement m'aider, mais encore faut-il que je comprenne comment cela fonctionne ! :D

C'est ce que nous verrons la prochaine fois ! :)

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Lundi 11 Mai 2020, 22:28:10 PM
Salut,

J'aborde à présent la gestion du volant : sur Pole Position, il s'agit d'une roue codeuse associée à un opto-coupleur, constitué d'une paire de LED infrarouge/Phototransistors :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200511220019-Little_Rabbit-Volant-Pole-Position.jpg) (https://gamoovernet.pixhotel.fr/pics/20200511220019-Little_Rabbit-Volant-Pole-Position.jpg)

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200511220132-Little_Rabbit-IMG-20200504-151524.jpg) (https://gamoovernet.pixhotel.fr/pics/20200511220132-Little_Rabbit-IMG-20200504-151524.jpg)

Cela revient donc pour le PC à le faire voir comme un spinner, ou encore comme l'axe X d'une souris.

Là encore le Leonardo est idéal puisqu'il est conçu pour se substituer à un clavier souris !

Supernono m'a été d'un grand secours puisqu'il m'a mis le pied à l'étrier en me fournissant son source Arduino.

Mais voyons d'abord en quoi consiste le « coupleur » d'une borne Pole Position au niveau électronique :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200511220215-Little_Rabbit-Optical-coupler-schematics-Pole-Position.jpg) (https://gamoovernet.pixhotel.fr/pics/20200511220215-Little_Rabbit-Optical-coupler-schematics-Pole-Position.jpg)

En plus de son bloc pédale, mon frère m'avait filé le coupleur de son volant : parfait, je vais pouvoir utiliser celui-là pour mes tests... Sauf qu'au moment de chercher son brochage pour savoir comment le brancher, je me suis rendu compte que le sien n'est pas un coupleur Pole Position, et qu'il avait été bricolé !

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200511220346-Little_Rabbit-IMG-20200509-120821.jpg) (https://gamoovernet.pixhotel.fr/pics/20200511220346-Little_Rabbit-IMG-20200509-120821.jpg)

=> 2 résistances ajoutées, fils soudés à même le connecteur, et une piste coupée par un perçage, et son fil de substitution mis en place... :-\

C'est bien un coupleur ATARI, mais il porte la référence A043397 (le copyright 1986 figurant dessus m'avait d'ailleurs intrigué pour une borne de 1981 !...).

Une rapide recherche sur Google m'apprit que ce coupleur venait très certainement d'une Road Blaster ! Voici son schéma :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200511220409-Little_Rabbit-Optical-couple-schematics-RDBLST.jpg) (https://gamoovernet.pixhotel.fr/pics/20200511220409-Little_Rabbit-Optical-couple-schematics-RDBLST.jpg)

D'un point de vue fonctionnel, il est identique à celui de Pole Position, et surtout son brochage est identique (si ce n'est que DIR1 et CLK1 sont inversés, mais cela n'a je pense aucune incidence) !

Je bricole 2 équerres avec des bouts de Mecanno pour mettre la roue codeuse au milieu de l'opto-coupleur :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200511220935-Little_Rabbit-IMG-20200509-120809.jpg) (https://gamoovernet.pixhotel.fr/pics/20200511220935-Little_Rabbit-IMG-20200509-120809.jpg)

et ensuite j'ai remis ça au propre en virant les résistances et en faisant un connecteur propre.

Que remarque-t-on sur les schémas ci-dessus ? Que les sorties CLK et DIR de ces cartes coupleurs sont en collecteurs ouverts PNP sur Road Blaster, et émetteur « flottant » sur Pole Position : il nous faudra donc dans les 2 cas une résistance de pull-down. C'est d'ailleurs ce à quoi servaient les 2 résistances de 330 Ω que j'ai enlevées. Vous me direz peut-être que j'aurais mieux fait de les laisser ? Mais non car mon but est toujours de faire quelque chose « plug & play » sur une borne non modifiée ;). Je mettrai donc ces résistances de pull down sur mon câblage vers le Leonardo :).

Avec le montage suivant, j'ai pu l'alimenter et vérifier si tout fonctionnait normalement :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200511220627-Little_Rabbit-IMG-20200510-215122.jpg) (https://gamoovernet.pixhotel.fr/pics/20200511220627-Little_Rabbit-IMG-20200510-215122.jpg)

C'est bien le cas, comme l'illustrent ces 2 relevés à l'analyseur logique :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200511221033-Little_Rabbit-spinner-avant.JPG) (https://gamoovernet.pixhotel.fr/pics/20200511221033-Little_Rabbit-spinner-avant.JPG)
=> quand on tourne la roue codeuse dans un sens

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200511221058-Little_Rabbit-spinner-arriy-re.JPG) (https://gamoovernet.pixhotel.fr/pics/20200511221058-Little_Rabbit-spinner-arriy-re.JPG)
=> quand on tourne la roue codeuse dans l'autre sens

Le temps écoulé entre deux impulsions va permettre au programme de connaître la vitesse à laquelle on tourne la roue (ou encore la distance parcourue par une boule de souris). Et le 1er front montant survenant entre les 2 canaux donnera le sens de déplacement.

On voit que dans le premier cas, c'est sur le canal 1 que survient en 1er un front montant, et quand on tourne la roue dans l'autre sens, c'est sur le canal 2 que survient en 1er un front montant.


Maintenant que la roue codeuse et sont opto-coupleur sont prêts, passons à son interfaçage avec le Leonardo !

Spinner à base d'Arduino Leonardo :

Ce qui est génial avec les Arduino, c'est qu'il existe énormément de bibliothèques toutes faites pour des tas de problématiques divers et variées, et que donc, d'autres ont fait le travail avant vous ! :)

En l'occurrence, supernono m'avait transmis son travail qui s'appuyait sur la bibliothèque « Encoder » de Paul Stoffregen.

Voici le source de supernono (il gère l'axe X et Y d'une souris, sa molette de défilement et deux boutons)

/* For Leonardo , Due , Pro micro boards only.

 Controls the mouse from 3 quadrature encoder on an Arduino Leonardo, Due or Pro Micro.

 Hardware:
 * 2 pushbuttons attached to D8, D9
 * 1 X axis encoder attached to D 2,D 4
 * 1 Y axis encoder attached to D 3,D 5
 * 1 Z axis encoder attached to D 0,D 1

 by Supernono

 */

//#define ENCODER_USE_INTERRUPTS
#define ENCODER_OPTIMIZE_INTERRUPTS

#include "Encoder.h"
#include "Mouse.h"
//#include "Keyboard.h" pour utiliser un clavier

// Change these pin numbers to the pins connected to your encoder.
//   Best Performance: both pins have interrupt capability
//   Good Performance: only the first pin has interrupt capability
//   Low Performance:  neither pin has interrupt capability
Encoder axeX(2, 4);
Encoder axeY(3, 5);
Encoder axeZ(0, 1);
//   avoid using pins with LEDs attached

const int rightButton = 8;
const int leftButton = 9;
const int RXLED = 17;
int range = 2;              // output range of X or Y movement; affects movement speed
int responseDelay = 10;     // response delay of the mouse, in ms


void setup() {
  // initialize the buttons' inputs:
  pinMode(2, INPUT);
  pinMode(3, INPUT);
  pinMode(4, INPUT);
  pinMode(5, INPUT);
  pinMode(6, INPUT); //_PULLUP);
  pinMode(7, INPUT); //_PULLUP);
  pinMode(rightButton, INPUT_PULLUP);
  pinMode(leftButton, INPUT_PULLUP);
  pinMode(RXLED,OUTPUT);
  // initialize mouse control:
  //Mouse.begin();
  //Serial.begin(9600);
}

long positionX  = -999;
long positionY = -999;
long positionZ = -999;

void loop() {
  // read the axes:
  //long newX, newY;
  long newX = axeX.read();
  long newY = axeY.read();
  long newZ = axeZ.read();
  // read the buttons:
  int rightState = digitalRead(rightButton);
  int leftState  = digitalRead(leftButton);

  if (newX != positionX || newY != positionY || newZ !=positionZ) {
   
    // calculate the movement distance based on the
    int  distanceX = (newX - positionX) * range;
    int  distanceY = (newY - positionY) * range;
    int  distanceZ = (newZ - positionZ) * 0.2;
   
    // if X or Y is non-zero, move:
    if ((distanceX != 0) || (distanceY != 0) || (distanceZ != 0)) {
      Mouse.move(distanceX, distanceY, distanceZ);
    }
   
    positionX = newX;
    positionY = newY;
    positionZ = newZ;
  }


   // if the mouse button is pressed:
  if (leftState == LOW) {
    // if the mouse is not pressed, press it:
    if (!Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.press(MOUSE_LEFT);
      Serial.println("Basic Encoder Test:");
    }
  }
  // else the mouse button is not pressed:
  else {
    // if the mouse is pressed, release it:
    if (Mouse.isPressed(MOUSE_LEFT)) {
      Mouse.release(MOUSE_LEFT);
    }
  }

   // if the mouse button is pressed:
  if (rightState == LOW) {
    // if the mouse is not pressed, press it:
    if (!Mouse.isPressed(MOUSE_RIGHT)) {
      Mouse.press(MOUSE_RIGHT);
    }
  }
  // else the mouse button is not pressed:
  else {
    // if the mouse is pressed, release it:
    if (Mouse.isPressed(MOUSE_RIGHT)) {
      Mouse.release(MOUSE_RIGHT);
    }
  }

  // a delay so the mouse doesn't move too fast:
  delay(responseDelay);
}

Concrètement pour pouvoir en faire un « croquis » Arduino, vous allez devoir :

- ajouter la bibliothèque « mouse » (=> Croquis/Inclure une bibliothèque/Mouse)
- ajouter la bibliothèque « encoder », détaillée sur cette page (https://www.pjrc.com/teensy/td_libs_Encoder.html) => Outils/Gérer les bibliothèques... => chercher « Encoder » et sélectionner celle de Paul Stoffregen :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200511221437-Little_Rabbit-AjoutLibrayryEncoder.jpg) (https://gamoovernet.pixhotel.fr/pics/20200511221437-Little_Rabbit-AjoutLibrayryEncoder.jpg)

Vous pouvez à présent compiler le source et le téléverser dans l'Arduino.

Toutefois, il faut convenir des broches du Leonardo auxquelles on raccorde le coupleur Atari.

Pour fonctionner au mieux, l'auteur précise que les 2 signaux de l'optocoupleur doivent être raccordés à des entrées de l'Arduino supportant les interruptions. Une interruption pour un micro-processeur est sa capacité d'exécuter une petite tâche quand survient un événement particulier. Il interrompt l'exécution du programme en cours, et traite immédiatement la routine d'interruption. Quand cette routine s'est exécutée, le processeur revient là où il en était. Dans notre cas, l'interruption peut se produire par exemple lorsque survient un front montant sur une de ses entrées.

D'après ce que j'ai lu sur Internet, le Leonardo supporte les interruptions sur les entrées numériques suivantes :

D0, D1, D2, D3 et D7

Je choisis de câbler mon spinner sur les entrées D2 et D3. Rappelons-nous qu'il faut les résistances de pull-down sur ces deux entrées.

Cela nous donne le câblage suivant :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200511221621-Little_Rabbit-Montage-coupleur-Leonardo.jpg) (https://gamoovernet.pixhotel.fr/pics/20200511221621-Little_Rabbit-Montage-coupleur-Leonardo.jpg)

Quant au code source, il est d'une simplicité extraordinaire : comme on ne garde que l'axe X pour notre spinner, qu'on n'a pas besoin de boutons, il n'y a presque rien à faire ! (j'ai ajouté des sorties sur le moniteur série pour le mode Debug, afin de vérifier que cela fonctionne).

/* For Leonardo , Due , Pro micro boards only.

 Controls the mouse from 3 quadrature encoder on an Arduino Leonardo, Due or Pro Micro.

 Hardware:
 * 1 X axis encoder attached to D 2,D 3

 by Supernono, modified by Little_Rabbit

 */

#include "Encoder.h"
#include "Mouse.h"


//à mettre en commentaire pour ne pas avoir les messages de debug sur le moniteur série
#define DEBUG

//#define ENCODER_USE_INTERRUPTS
#define ENCODER_OPTIMIZE_INTERRUPTS


// Change these pin numbers to the pins connected to your encoder.
//   Best Performance: both pins have interrupt capability
//   Good Performance: only the first pin has interrupt capability
//   Low Performance:  neither pin has interrupt capability
Encoder axeX(3, 2);
//   avoid using pins with LEDs attached


// Mettre 1 ou -1 selon le sens de déplacement souhaité pour le curseur de souris
const int SensRotationX = 1;


int range = 2;                    // output range of X movement; affects movement speed
const int responseDelay = 10;     // response delay of the mouse, in ms




void setup() {

  // pour les messages de debug sur moniteur série
  #ifdef DEBUG
      Serial.begin(9600);
  #endif
 
  // initialize the buttons' inputs:
  // les broches 2 et 3 supportent les interruptions sur Leonardo
  pinMode(2, INPUT);
  pinMode(3, INPUT);
 
  // initialize mouse control:
  Mouse.begin();
}

long positionX  = -999;

#ifdef DEBUG
String DebugMsg = String(); // déclare et remet à 0 la chaîne utilisée pour les messages de debug
String Msg1 = String("Curseur X : ");
String Msg2 = String(" => distance X : ");
#endif

void loop() {
 
  // read the axes:
  long newX = axeX.read() * SensRotationX;

  if (newX != positionX) {
   
    // calculate the movement distance based on the new position
    int  distanceX = (newX - positionX) * range;
   
    // if X is non-zero, move:
    if (distanceX != 0) {
      #ifdef DEBUG
        DebugMsg = Msg1 + positionX + Msg2 + distanceX;
        Serial.println(DebugMsg);
      #endif

      // seul l'axe des X évolue pour un spinner
      Mouse.move(distanceX, 0, 0);
    }
   
    positionX = newX;
  }

  // Délais pour ne pas surcharger le PC avec sans cesse de nouveaux déplacements du curseur:
  delay(responseDelay);
}

Résultat : cela a fonctionné du premier coup !  :-)=

Par contre, sur mon poste Windows 7, cela n'avait aucun effet sur le curseur de la souris ! :-\

En fait, il a fallu que je réinstalle le driver Arduino pour que tout rentre dans l'ordre :).

Sur le poste sous Windows XP, le curseur de la souris bougeait bien, mais à chaque branchement du Leonardo, Windows me gratifiait d'un message me demandant d'installer le driver : pour régler ce problème, téléchargez l'IDE Arduino complet, et si vous ouvrez le .exe avec WinZip, vous trouverez un dossier « drivers » => désignez à Windows ce dossier et laissez le faire l'installation : cela fonctionne nickel.

Au premier essai sous MAME, cela ne fonctionnait pas :-\. Même une souris de base n'avait aucun effet sur le paramètre « steering » du jeu. J'ai questionné Chelnov qui m'a donné la solution : dans le fichier .ini de MAME, il faut changer un des paramètres :

Par défaut on a :

[tt]mouse   0[/tt]   qu'il faut changer en    [tt]mouse   1[/tt]

Autre détail pour les newbies comme moi en matière de MAME : je n'avais de fichier .ini ! :D

Pour cela, il faut en ligne de commande exécuter la commande suivante :

[tt]mame –cc[/tt]

Cela génère le fichier mame.ini, dans lequel vous pourrez mettre « mouse » à 1 ! ^-

Une fois que tout est bien paramétré, voilà le résultat dans le mode service de Pole Position :


 :-)=

Il me faut à présent regrouper les sources de la gestion de la pédale et du spinner pour n'en faire qu'un : cela devrait être très simple :).

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: SDF le Mardi 12 Mai 2020, 04:10:00 AM
T'es monté en compétence là  :D
Ca avance bien en tout cas.  ^-
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Jeudi 21 Mai 2020, 12:37:05 PM
Salut,

@Nene2k10 : oui, j'ai un peu progressé en Arduino :). Je serais bien incapable de pondre une bibliothèque, mais en exploiter des toutes faites me paraît plus clair à présent.

Comme je vous le disais la dernière fois, il me faut à présent tenter de rassembler la gestion du joystick analogique, et la gestion du spinner dans un seul programme.

Un source Arduino étant essentiellement constitué d'une fonction d'initialisation « setup », et une boucle infinie de fonctionnement « loop », il devrait me suffire de regrouper les deux initialisation et les deux boucles.

Il faut bien sûr aussi regrouper les déclarations de variables, constantes et objets, ainsi que les inclusions de fichiers .h

Mais avant de se lancer dans la fusion des deux sources, il convient de faire le bilan de l'exploitation des différentes broches du Leonardo. J'y avais un peu réfléchi avant de me mettre à la programmation du spinner, donc je n'ai aucun conflit ;). Voici le schéma à présent complet :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200521115806-Little_Rabbit-Panel-complet-Leonardo.jpg) (https://gamoovernet.pixhotel.fr/pics/20200521115806-Little_Rabbit-Panel-complet-Leonardo.jpg)

Et pour le source, après fusion des deux parties, cela donne ça :

#include "Encoder.h"
#include "Mouse.h"
#include "Joystick.h"

//à mettre en commentaire pour ne pas avoir les messages de debug sur le moniteur série
//#define DEBUG


#define MaxButtonQty 4
#define FirstButtonPinNumber 4
#define Frein A0
#define Accelerateur A1
#define AccelerateurEtalonnage 1.4


// Create Joystick
Joystick_ Joystick(JOYSTICK_DEFAULT_REPORT_ID, JOYSTICK_TYPE_JOYSTICK,
  MaxButtonQty, 0,       // 4 boutons, pas de Hat Switch
  true, true, false,     // Conserve un axe X et Y, mais les laisse en position neutre, pas d'axe Z
  false, false, false,   // Pas de Rx, Ry, ou Rz
  false, true,           // Pas de rudder, mais throttle en guise d'accélérateur
  false, true, false);    // seulement un frein, pas de volant (ni accélérateur car ne semble pas fonctionner...)

 
// Set to true to test "Auto Send" mode or false to test "Manual Send" mode.
//const bool testAutoSendMode = true;
const bool testAutoSendMode = false;


//#define ENCODER_USE_INTERRUPTS
#define ENCODER_OPTIMIZE_INTERRUPTS


// Change these pin numbers to the pins connected to your encoder.
//   Best Performance: both pins have interrupt capability
//   Good Performance: only the first pin has interrupt capability
//   Low Performance:  neither pin has interrupt capability
Encoder axeX(3, 2);
//   avoid using pins with LEDs attached


// Mettre 1 ou -1 selon le sens de déplacement souhaité pour le curseur de souris
const int SensRotationX = 1;

int range = 2;                    // output range of X movement; affects movement speed
const int responseDelay = 10;     // response delay of the mouse, in ms



void setup() {
  //**************************************************
  // Intialisation, partie spinner
  //************************************************** 
  // pour les messages de debug sur moniteur série
  #ifdef DEBUG
      Serial.begin(9600);
  #endif
 
  // initialize the buttons' inputs:
  // les broches 2 et 3 supportent les interruptions sur Leonardo
  pinMode(2, INPUT);
  pinMode(3, INPUT);
 
  // initialize mouse control:
  Mouse.begin();


  //**************************************************
  // Intialisation, partie joystick analogique
  //**************************************************
   
  // Set Range Values
  Joystick.setXAxisRange(-127, 127);
  Joystick.setYAxisRange(-127, 127);
  Joystick.setXAxis(0);
  Joystick.setYAxis(0);
 
   
  Joystick.setThrottleRange(0, 1023);
  Joystick.setThrottle(0);
  /*Joystick.setAcceleratorRange(0, 1023);
  Joystick.setAccelerator(0);*/
  Joystick.setBrakeRange(0, 1023);
  Joystick.setBrake(0);
 
 // Les boutons du panel sont attribués aux pin 4 à 7
  pinMode(FirstButtonPinNumber, INPUT_PULLUP);
  pinMode(FirstButtonPinNumber + 1, INPUT_PULLUP);
  pinMode(FirstButtonPinNumber + 2, INPUT_PULLUP);
  pinMode(FirstButtonPinNumber + 3, INPUT_PULLUP);

  // l'accélérateur et le frein sont associée aux entrées analogiques A0 et A1
  // A0 = frein
  // A1 = accélérateur
  // les axes X et Y ne sont que virtuels, en position neutre, donc pas d'entrées analogiques pour eux
  pinMode(A0, INPUT_PULLUP);
  pinMode(A1, INPUT_PULLUP);

  if (testAutoSendMode)
  {
    Joystick.begin();
  }
  else
  {
    Joystick.begin(false);
  }
 
  // pour pouvour faire clignoter la LED du Leonardo
  //pinMode(13, OUTPUT);
 
}

/******************************
 * Variables globales
 ******************************/

// État précédent des boutons
int lastButtonState[MaxButtonQty] = {0,0,0,0};
// Valeurs précédentes de l'accélérateur et du frein
int lastAcceleratorValue = 0;
int lastBrakeValue = 0;


long positionX  = -999;

#ifdef DEBUG
String DebugMsg = String(); // déclare et remet à 0 la chaîne utilisée pour les messages de debug
String Msg1 = String("Curseur X : ");
String Msg2 = String(" => distance X : ");
#endif

void loop() {

int index;
int currentButtonState;
int currentAnalogValue;
bool ButtonChange;
float CalibratedValue;

#ifdef DEBUG
String DebugMsg;
String Msg1;
String Msg2;
String Msg3;

  Msg1 = String("Gas     = ");
  Msg2 = String("Brake   = ");
  Msg3 = String("Buttons = ");
  // remet à 0 la chaîne utilisée pour les messages de debug
  DebugMsg = String();
#endif
 
  /***************************************
  * partie spinner de la boucle principale
  ****************************************/
 
  // read the axes:
  long newX = axeX.read() * SensRotationX;

  if (newX != positionX) {
   
    // calculate the movement distance based on the new position
    int  distanceX = (newX - positionX) * range;
   
    // if X is non-zero, move:
    if (distanceX != 0) {
      #ifdef DEBUG
        DebugMsg = Msg1 + positionX + Msg2 + distanceX;
        Serial.println(DebugMsg);
      #endif

      // seul l'axe des X évolue pour un spinner
      Mouse.move(distanceX, 0, 0);
    }
   
    positionX = newX;
  }

  /****************************************************
  * partie joystick analogique de la boucle principale
  *****************************************************/

  // Turn indicator light on.
  digitalWrite(13, 1);
 
  // lit les valeurs analogiques
  // l'accélérateur
  currentAnalogValue = analogRead(Accelerateur);
  if (currentAnalogValue != lastAcceleratorValue)
  {
    lastAcceleratorValue = currentAnalogValue;
    Joystick.setAccelerator (lastAcceleratorValue);
    CalibratedValue = (float) lastAcceleratorValue;
    CalibratedValue = CalibratedValue * AccelerateurEtalonnage;
    //Joystick.setThrottle (currentAnalogValue);
    Joystick.setThrottle ((int)CalibratedValue);
    #ifdef DEBUG
      DebugMsg = Msg1 + lastAcceleratorValue;
      Serial.println(DebugMsg);
    #endif
  }

  // puis le frein
  currentAnalogValue = analogRead(Frein);
  if (currentAnalogValue != lastBrakeValue)
  {
    lastBrakeValue = currentAnalogValue;
    Joystick.setBrake (currentAnalogValue);
    #ifdef DEBUG
      DebugMsg = Msg2 + lastBrakeValue;
      Serial.println(DebugMsg);
    #endif
  }
  //Joystick.setBrake (0);
 
  // Lit les boutons
  ButtonChange = false;
  for (index = 0; index < MaxButtonQty; index++)
  {
    currentButtonState = !digitalRead(index + FirstButtonPinNumber);
    if (currentButtonState != lastButtonState[index])
    {
      Joystick.setButton(index, currentButtonState);
      lastButtonState[index] = currentButtonState;
      ButtonChange = true;
    }
  }
  #ifdef DEBUG
    if (ButtonChange == true)
    {
      DebugMsg = Msg3 + lastButtonState[0] + " " + lastButtonState[1] + " " + lastButtonState[2] + " " + lastButtonState[3];
      Serial.println(DebugMsg);
    }
  #endif
   
  if (testAutoSendMode == false)
  {
    Joystick.sendState();
  }


  /*******************************************************************************************
   * Délais pour ne pas surcharger le PC avec sans cesse de nouveaux déplacements du curseur:
   *******************************************************************************************/
  delay(responseDelay);
}

Compilation, téléversement, et... le PC mouline un peu au 1er lancement ! Il met même pas mal de temps à reconnaître mon Leonardo comme un périphérique USB composite, mais il finit par y arriver !

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200521120323-Little_Rabbit-USBcomposite.jpg) (https://gamoovernet.pixhotel.fr/pics/20200521120323-Little_Rabbit-USBcomposite.jpg)

On voit qu'il est bien reconnu à la fois comme une souris et un joystick analogique ! Les fois suivantes Windows le reconnaît quasiment instantanément.

Premier test : à partir du panneau de contrôle, la partie joystick analogique fonctionne normalement. Le curseur de la souris par contre se meut péniblement, et que dans un sens ! :-\ Je vérifie le câblage, le source, et ne vois pas d'erreur. J'essaye encore, et je me rends compte que c'est simplement le soleil qui vient parasiter le capteur infrarouge du coupleur ! :D J'interpose un livre mis debout pour faire écran, et ça fonctionne parfaitement : le curseur de la souris se déplace de façon fluide dans les deux sens ! ^-^

Un dernier point à adresser pour la gestion du panel, c'est le fonctionnement du levier de vitesse, ou « shifter ».

En effet, sur une borne Pole Position, le levier de vitesse est un simple interrupteur, pas un inverseur.

- interrupteur ouvert -> Gear Low
- interrupteur fermé -> Gear High
(ou l'inverse, mais peu importe)

Si vous avez déjà joué à Pole Position sur MAME, vous aurez remarqué qu'une touche sert à passer alternativement de Low à High. Cette touche, vous ne restez pas le doigt dessus tant que vous voulez rester en High, non, vous la relâcher sitôt la vitesse passé : c'est le mode standard de MAME, ou mode « toggle ». Pour Pole Position, il faut à l'inverse maintenir le contact tant qu'on veut rester en vitesse High.

Heureusement, les développeurs de MAME on introduit cette fonctionnalité.

C'est détaillé sur cette page (https://docs.mamedev.org/advanced/shiftertoggle.html).

Et c'est ce que nous montre cette très bonne vidéo :


(merci à Chelnov qui m'en a fourni le lien !)

Toutefois il faut que votre version de MAME ne soit pas trop ancienne : autrefois, les options de config étaient enregistrées dans un fichier binaire, impossible à modifier aisément. À présent, il s'agit d'un fichier XML éditable avec n'importe quel éditeur de texte.

En résumé, il faut changer le fichier config du jeu, et modifier la règle qui gère l'input du levier de vitesse, en ajoutant :

Toggle ="no"

Dans mon cas, cela donne la config suivante :

[tt]<port tag=":IN0L" type="P1_BUTTON1" mask="2" defvalue="2" value="0" toggle="no">
                <newseq type="standard">
                    JOYCODE_1_BUTTON1
                </newseq>
            </port>
[/tt]

Mais à présent que le Leonardo est censé regrouper la gestion du volant, de la pédale et des boutons du panel, comment tester ça dans de bonnes conditions ?

Le précédent panel était tout naze et partiel : il était temps de se retrousser les manches et de constituer un panel de test digne de ce nom !

J'ai dû faire appel à mes lointains souvenirs de construction mécanique, il y a près de 40 quand j'étais au lycée :) !

Veillons à avoir des solutions isostatiques et bannissons tout ce qui peut être hyperstatique ! Révisons nos jeux de fonctionnement : un ajustement H7g6 devrait convenir à l'axe du volant... des paliers en bronze seraient-ils bienvenus ? Un ajustement plus serré, de type H7h6 serait par contre préférable pour le levier de vitesse pour qu'il reste dans l'une des deux positions (et pour ce levier, j'avoue avoir été inspiré par le WIP de Spectro sur son Outrun Deluxe !...)... Et puis mettons-y un contacteur à micro-switch, car ma précédente solution à base d'interrupteur Legrand n'avait que trop duré !  Je n'ai pas été jusqu'à calculé mes chaînes de cotes, car mes capacités d'usinage ne permettent pas de toutes façons une précision suffisante...

Je vous laisse découvrir le résultat dans cette petite vidéo :









 =:))

Comment ça vous vous attendiez à autre chose ?? :D

Il est super mon panel ! ;) Pour l'anecdote, ce volant en Meccano, j'ai dû le faire il y a presque 30 ans, quand est sorti Vroom sur ATARI ST ! J'avais trouvé ce jeu tellement génial que j'avais fait un hack souris : coupée en deux, l'un des axe me servait sur ce volant, l'autre avait été mis à profit pour la pédale d'accélération, faite en Lego technique ! ^-^

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200521120727-Little_Rabbit-IMG-20200521-113506.jpg) (https://gamoovernet.pixhotel.fr/pics/20200521120727-Little_Rabbit-IMG-20200521-113506.jpg)

Je savais bien que ce « volant » me resservirait un jour ! ;)

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200521120750-Little_Rabbit-IMG-20200521-113404.jpg) (https://gamoovernet.pixhotel.fr/pics/20200521120750-Little_Rabbit-IMG-20200521-113404.jpg)

La pince à linge va définitivement détrôner la ficelle à rôti :D. En ces temps de confinement, il convient de faire avec ce qu'on a sous la main : ce curieux interrupteur m'a été donné par Chelnov dans un lot de vieux composants ! :)

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200521121026-Little_Rabbit-IMG-20200521-113308.jpg) (https://gamoovernet.pixhotel.fr/pics/20200521121026-Little_Rabbit-IMG-20200521-113308.jpg)

L'ensemble du panel a été fait avec des trucs de récup divers et variés : j'ai mis un connecteur qui me permet de débrancher la pédale d'accélération, ce qui facilite le transport ou le déplacement de l'ensemble (là encore système débrouille : j'ai découpé et percé un vieux bout de circuit imprimé pour pouvoir y souder le connecteur mâle.

Quoiqu'il en soit, le tout fonctionne à merveille et je suis très content du résultat. Je reviendrai sur la configuration des boutons et pédale sous MAME, qui réserve quelques subtilités.

Va maintenant falloir que je m'attaque à MAME en 15 kHz : je n'y connais rien, cela ne va donc pas être une mince affaire !

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: -fab- le Jeudi 21 Mai 2020, 12:52:49 PM
C'est pour ça que j'adore ce forum , ton banc de test est génial  ^-
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Iro le Jeudi 21 Mai 2020, 14:08:20 PM
le volant est une piéce de musée soviétique !!  =:))
C'est trés ingénieux !

Merci pour toutes ces infos !!
On attends ton retour sur le réglage dans MAME car il me semble en effet qu'il y a quelques réglages de précision
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: th_vador le Vendredi 22 Mai 2020, 07:48:31 AM
je ne sais pas ce qui est le plus incroyable : le volant en mécano ou le fait de garder ce genre de bricolage dans un carton pendant 30 ans! Pourtant le nombre d'occasion de "faire de la place" n'a pas dû manquer... Chapeau! ^-^

Et la pince à linge... que dire à part que MacGyver n'a qu'à bien se tenir! 8)
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: AsPiC le Lundi 25 Mai 2020, 18:28:21 PM
C'est... comment dire..?
Ah oui je sais : Digne de ce forum :-* =:))
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Vieille_Loutre le Lundi 25 Mai 2020, 19:05:14 PM
Oui la c'est clair qu'on peut aller se rhabiller! la photo du volant a fini de me tuer, j'étais pas prêt pour la pince a linge derrière... chapeau!
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Darth Nuno le Lundi 25 Mai 2020, 19:23:52 PM
Nice  8)

De mémoire il me semble qu'à l'époque de ma conversion polpo, mes APAC et autres analog devices avaient du mal à lire les info de l'opto de la carte originale... du coup j'ai trouvé sur un site arcade US une petite pcb plus moderne qui fait le taf farpaitement :D
Je n'ai plus ses références (c'était il y a + de 10 ans) mais la voilà montée :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200525191818-Darth%20Nuno-pp1.jpg) (https://gamoovernet.pixhotel.fr/pics/20200525191818-Darth%20Nuno-pp1.jpg)

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200525191836-Darth%20Nuno-pp2.jpg) (https://gamoovernet.pixhotel.fr/pics/20200525191836-Darth%20Nuno-pp2.jpg)

Cela doit être encore trouvable...
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Mardi 26 Mai 2020, 22:56:20 PM
Salut,

Ahh !! Je suis content de constater que mon panel de test Pole Position, comment dire... ne vous laisse pas indifférent ! :D

Citation de: th_vador le Vendredi 22 Mai 2020, 07:48:31 AMje ne sais pas ce qui est le plus incroyable : le volant en mécano ou le fait de garder ce genre de bricolage dans un carton pendant 30 ans! Pourtant le nombre d'occasion de "faire de la place" n'a pas dû manquer... Chapeau! ^-^

Ça c'est mon côté punk !...


:D

Bah disons que lorsqu'on est collectionneur compulsif comme moi, on a l'habitude d'entasser les cartons... En l'occurence, j'ai la chance d'avoir presque toujours eu un "local" pour y stocker tout mon bordel, en dehors de mon logement.

Autrefois, quand j'étais en région Parisienne :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200526225327-Little_Rabbit-DSCF5980.JPG) (https://gamoovernet.pixhotel.fr/pics/20200526225327-Little_Rabbit-DSCF5980.JPG)

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200526225355-Little_Rabbit-DSCF5984.JPG) (https://gamoovernet.pixhotel.fr/pics/20200526225355-Little_Rabbit-DSCF5984.JPG)

(local de 60 m² situé à Chatou dans le 78, à présent vide et du reste à vendre, MP pour les intéressés ! ;)) :

Ou comme à présent où je squatte une partie de la réserve au bureau :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200526224919-Little_Rabbit-DSCF6171.JPG) (https://gamoovernet.pixhotel.fr/pics/20200526224919-Little_Rabbit-DSCF6171.JPG)
(il y en a autant de l'autre côté du rack... ce ne sont que des consoles et vieux ordi)

Alors t'imagine, un petit volant en Mecanno, ça ne prend pas de place ! :)

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Vieille_Loutre le Mardi 26 Mai 2020, 23:10:28 PM
Tranquille , le gyromite big box en vrac comme si de rien n'étais !
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: kidicarus le Mercredi 27 Mai 2020, 08:34:10 AM
Magnifique ce post que je découvre à l'instant , c'est top félicitations!! ^-
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: spectroman le Jeudi 28 Mai 2020, 08:29:37 AM
T'as oublié ton stockage dans le Morbihan  ):)
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Jeudi 28 Mai 2020, 13:41:42 PM
@Spectro : certes, mais là je ne parlais que du stockage des vieilles consoles et vieux ordi, pas du stockage des bornes d'arcade !... ;)

Le pauvre Sentinelle en sait quelque chose !...  :-\

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Michel Maeva le Vendredi 29 Mai 2020, 19:36:09 PM
Citation de: Little_Rabbit le Jeudi 28 Mai 2020, 13:41:42 PM

Le pauvre Sentinelle en sait quelque chose !...  :-\


Sentinelle m'a parlé de la Saint Jean en juin, je ne sais pas pourquoi...  ;D  :D
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Dimanche 26 Juillet 2020, 16:37:27 PM
Salut,

Vous aurez remarqué, les semaines (mois ! :-\) filent et il y a peu d'avancées... Force est de constater que le sujet ne me passionne pas, comme je n'y connais rien en MAME, je tâtonne et y vais un peu à reculons, il faut que je me fasse un peu violence pour avancer... ;)

Comme je vous le proposais dans l'épisode précédent, abordons un peu la configuration des « inputs » sous MAME.

Je vous préviens d'emblée que je ne maîtrise pas du tout le sujet ! Mais je partage avec vous les quelques trucs que j'ai compris (ou pas ! ;)).

Comme vous le savez, pour paramétrer les « inputs » sous MAME, il faut presser la touche TAB, puis choisir « Input (this Game) ». Là on choisit input par input celle qu'on veut affecter à telle touche de clavier, ou plutôt dans mon cas à tel ou tel bouton du mon panel Pole Position.

J'effectue donc les affectations suivantes :

Coin 1Joy 1 bouton 1
Coin 2Joy 1 bouton 2
SERVICEJoy 1 bouton 3
Gear change (levier de vitesse)       Joy 1 bouton 0
P1 Pedal 1 AnalogJoy 1 Manette des gaz
Dial 1 Analog (le volant)Mouse X

(je fais mes tests avec le bloc pédale de l'upright sur lequel il n'y a que la pédale d'accélération, je n'ai donc pas paramétré de frein)

Le 1er truc dont je me suis rendu compte, c'est qu'il faut faire très attention aux conflits engendrés par les réglages par défaut de MAME !

Ainsi dans mon cas, au début, quand je changeais de vitesse, je décélérais alors que j'étais pourtant pied au planché ! Il fallait relâcher l'accélérateur puis accélérer à nouveau pour pouvoir à nouveau accélérer. Cela venait tout simplement du fait que par défaut, le bouton 0 est également affecté à l'incrément de l'accélération ! Mon levier de vitesse restant en position fixe, il maintenait en permanence Bouton 0 enfoncé, et annulait la valeur de ma pédale d'accélération avant le changement de vitesse !

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200726161312-Little_Rabbit-Accy-ly-ration-conflit-bouton-0.jpg) (https://gamoovernet.pixhotel.fr/pics/20200726161312-Little_Rabbit-Accy-ly-ration-conflit-bouton-0.jpg)

Je vous conseille donc de virer toutes les configurations par défaut qui utilisent les mêmes boutons que ceux de votre panel. Pour cela, sélectionnez l'entrée qui peut engendrer un conflit, faites Entrée, puis Escape pour que « None » soit affecté à l'entrée en question ;

Vous devez avoir quelque chose dans ce style :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200726161352-Little_Rabbit-InputOK.jpg) (https://gamoovernet.pixhotel.fr/pics/20200726161352-Little_Rabbit-InputOK.jpg)

Mais pour réussir à faire cela, qui paraît tellement simple, j'ai souvent galéré, sans comprendre pourquoi mon interface était bloquée :(.

En effet, souvent je relançais MAME et voulais parfaire l'affectation des entrées et faire des tests, mais après avoir fait TAB, il m'était impossible de sélectionner quoique ce soit ! Tantôt cela marchait, et tantôt c'était complètement bloqué ! Ce n'est que tout récemment que j'ai fini par comprendre l'origine de ces blocages ! Je m'étais concentré sur « Input (this game) », mais il peut y avoir des conflits ailleurs !

Si vous allez cette fois dans « Input (general) », puis « User interface », vous verrez tout en bas que le Bouton 0 est là aussi affecté à UI Select, c'est-à-dire la validation d'un choix dans les menus de l'interface utilisateur : avec mon Bouton 0 qui est le levier de vitesse, qui peut rester dans une position activée en permanence, cela bloquait toute autre sélection dans les menus !

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200726162821-Little_Rabbit-Conflit-User-Interface-Bouton-0.jpg) (https://gamoovernet.pixhotel.fr/pics/20200726162821-Little_Rabbit-Conflit-User-Interface-Bouton-0.jpg)

Ce problème a failli me rendre dingue :D.

C'en est au point où je me demande si je ne vais pas revoir le code pour l'Arduino de sorte que les boutons physiques soient affectés aux boutons logiques 4, 5, 6 et compagnie pour éviter tout conflit avec les 1er boutons que MAME utilise déjà par défaut !

Autre truc que je n'ai pas bien compris, toujours pour le levier de vitesse, dans mes nombreux essais, où parfois je repartais de zéro avec une config vierge, je refaisais toutes mes configurations et je me retrouvais avec le levier de vitesse qui fonctionnait à l'envers !  ;D

J'ai pas mal tâtonné, pour parvenir à la conclusion suivante : il suffit de changer ou ajouter dans le fichier .cfg le champ « value ».

Dans mon cas, je partais de cette config :

<port tag=":IN0L" type="P1_BUTTON1" mask="2" defvalue="2">
  <newseq type="standard">
    JOYCODE_1_BUTTON1
   </newseq>
</port>



A laquelle j'ajoutais le « toggle » abordé dans le post précédent (pour que le levier ne fonctionne pas comme un bouton qu'on enfonce puis relâche) :

<port tag=":IN0L" type="P1_BUTTON1" mask="2" defvalue="2" toggle="no">
  <newseq type="standard">
    JOYCODE_1_BUTTON1
  </newseq>
</port>


Et j'ajoute enfin un "value=0" :

<port tag=":IN0L" type="P1_BUTTON1" mask="2" defvalue="2" value="0" toggle="no">
   <newseq type="standard">
    JOYCODE_1_BUTTON1
   </newseq>
</port>


Ainsi mon levier de vitesse fonctionne comme je le souhaite !  ^-



Toujours au chapitre de la configuration des Inputs, il y a un truc que je n'ai jamais réussi à faire : affecter à un des boutons du panel le passage en mode « Service ».

Par défaut c'est la touche F2 qui permet de basculer en mode Service. Une nouvelle pression sur F2 et on repasse en mode « Jeu ».

Je suis pourtant passé par « Input (general) », puis « Other controls ». Là j'ai affecté mon bouton 3 à la place de F2.

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200726161839-Little_Rabbit-Config-Mode-Service.jpg) (https://gamoovernet.pixhotel.fr/pics/20200726161839-Little_Rabbit-Config-Mode-Service.jpg)

Cela me donne fichier default.cfg suivant :

<?xml version="1.0"?>
<!-- This file is autogenerated; comments and unknown tags will be stripped -->
<mameconfig version="10">
    <system name="default">
        <input>
            <port type="SERVICE">
                <newseq type="standard">
                    JOYCODE_1_BUTTON4
                </newseq>
            </port>
            <port type="UI_SELECT">
                <newseq type="standard">
                    KEYCODE_ENTER
                </newseq>
            </port>
        </input>
    </system>
</mameconfig>


Mais pour autant rien n'y fait : j'ai beau appuyer sur le bouton affecté cela ne fait rien, et c'est toujours seulement la touche F2 qui permet d'aller en mode service !  :(

Si vous avez la solution, je suis preneur !  <:)

De la même façon, si quelqu'un a un lien vers des explications sur la syntaxe et la signification de chacun des mots clés de ces fichiers de config XML, je suis preneur car je me suis souvent arraché les cheveux à ne pas comprendre comme cela fonctionnait ! :)

Voilà, c'est tout ce que j'aurais à dire sur ces configs. Cela reste pour ma part nébuleux et capricieux...


Donc si je récapitule l'ensemble de toutes les manip :

- mame –cc pour générer le mame.ini
- dans mame.ini, remplacer « mouse   0 » par « mouse    1 »
- dans « Input (this game) », virer tous les conflits possible en les mettant à None
- dans « Input (this game) », affectez les entrées correspondant à votre panel
- dans « Input (general », affectez à « UI Select » uniquement la touche Entrée
- dans le fichier xml du jeu (polepos.cfg dans mon cas), modifier la ligne définissant le levier de vitesse en mettant « <port tag=":IN0L" type="P1_BUTTON1" mask="2" defvalue="2" value="0" toggle="no">

Prochain épisode : GroovyMAME et comment passer l'affichage de son PC en 15 kHz ! :)

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: funkycochise le Dimanche 26 Juillet 2020, 20:32:06 PM
 ^-^  :-*
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Lundi 25 Janvier 2021, 17:43:22 PM
Salut,

Même si cela fait des mois que je ne vous en ai pas parlé, ce projet est toujours d'actualité, et je n'en suis toujours pas venu à bout ! :D

J'ai avancé sur pas mal de points (sans mettre à jour ce WIP, je sais, c'est mal... :-\), mais aujourd'hui je bute sur le choix du Front-end !...

Quel front-end choisir ?

Mon cahier des charges est simple et basique :

- ne lancer que 5 ou 6 jeux sous MAME
- une interface simple qui ne cherche pas à vous faire croire que vous êtes à la Foire du Trône, et qui tourne sur une petite config
- qui fonctionne sous Win XP en 640x480, et en 15 KHz
- sélection des jeux avec souris/spinner et boutons, voire pédales d'accélération/de frein

J'en ai déjà testé plusieurs, ai passé des heures à m'arracher les cheveux avec certains, et je reviens toujours à la case départ  >:(

1) Attract Mode
Je l'avais vu sur les bartops de berunours, et je trouvais ça très sympa (notamment la vue en mosaïque). Sauf que je dois être une quiche ou maudit, je n'ai jamais réussi à le faire fonctionner sous WinXP. J'ai pourtant téléchargé la version WinXP 32 bits, l'ai testé sur 2 postes sous XP, et à peine lancé c'est retour au bureau direct !...

2) Maximus Arcade
Il m'avait été recommandé par chelnov. Je m'y suis collé pendant un bon bout de temps, et ça aurait dû marcher au poil, sauf que mystérieusement, il ne reconnaît pas les boutons de mon pseudo gamepad hybride fait à partir de Leonardo, le panel dont je vous ai parlé dans les posts précédents. Le truc de dingue, c'est que sur l'onglet View de Preferences.exe, je vois bien mes boutons, ils s'allument immédiatement si je presse un bouton. Mais par contre sur l'onglet "Controller/Setup 1", l'interface reste parfaitement muette et ignore tous mes boutons :'(. Si je branche un gamepad du commerce, l'interface les prend bien en compte. Je l'ai également testé sur d'autres postes, sous Windows 7 et Windows XP : à chaque fois il ignore les boutons de mon pannel.

J'ai essayé de contourné le problème avec joy2key, mais ça finissait par être une usine à gaz, et très souvent, je ne parvenais pas à revenir au front-end en quittant MAME, restant sur un écran noir  :-[

3) Hardcade
Je viens de le tester à l'instant : il est immédiatement éliminé puisqu'il ne gère pas la souris ou un spinner :'(. La navigation dans ses menus ne peut se faire qu'avec des boutons ou touches. C'est bien dommage, car Hardcade reconnaît bien les boutons de mon gamepad Arduino !

Il me reste à tester MaLa et AtomicFE notamment : vous en pensez quoi, et quel front-end me recommanderiez-vous compte tenu de mon cahier des charges ?

Merci pour votre aide !  ^-

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: AsPiC le Lundi 25 Janvier 2021, 22:20:12 PM
Et pourquoi ne pas simplement coder le tiens ? :ang:
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Lundi 25 Janvier 2021, 22:51:00 PM
Salut,

Pour des tas de raisons ! :D

- pourquoi réinventer la roue quand elle existe déjà

- je n'ai jamais programmé d'applications graphiques sous Windows

- je n'ai jamais programmé d'applications tout court sous Windows ! :D

- aujourd'hui, mes compétences en programmation sur PC se limitent à peu près à faire des macros en Visual Basic sous Excel ! ;)

Donc je crois que d'une part tu surestimes grandement mes compétences, et d'autre part tu sous-estimes grandement la courbe d'apprentissage que cela réclamerait pour assimiler tout ce qu'il y a à connaître pour programmer un front-end, aussi basique soit-il sous environnement Windows :).

Je suis en train de tester "Kymaera"... C'est laid, mais la définition des skins est en fichier XLM... donc à voir ;).

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: funkycochise le Mardi 26 Janvier 2021, 07:34:16 AM
mala pourrait faire le job.
il est vieux mais avec un os qui l'est aussi...
en plus un thème mala fonct avec attract mode.
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Mardi 26 Janvier 2021, 21:20:22 PM
Salut,

Merci funkycochise pour ton conseil, je vais tester cela !  ^-^

Je l'avais pour l'instant mis de côté, car les quelques captures d'écrans que j'avais vues sur le net me montraient des choses en relativement haute définition, mais si il accepte des skins en 640x480, ça m'intéresse !  ^-

[edit : je suis en train de lire ton sujet de 2016 (https://www.gamoover.net/Forums/index.php?topic=35122.0) et surtout ton super tuto ! ;)  ^-
]

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: funkycochise le Mercredi 27 Janvier 2021, 06:48:50 AM
oui il descend en 320x240

après faut voir pour la souris.
mais il me semble que c'est géré dans le menu.

mala  est clairement pas la meilleure option parce que p'us vraiment maintenu.
mais sur une config plus ancienne c'est encore pertinent je pense.
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Mercredi 27 Janvier 2021, 23:42:46 PM
Salut,

@funkycochise : j'ai poursuivi mes tests de Mala ce soir : la souris est parfaitement gérée !  ^-

J'ai également terminé la lecture/mise en œuvre de ton tuto : un énorme merci à toi, cela m'a été d'un très grand secours !!  ^-^  :-*

Mala reconnait également parfaitement mon gamepad hybride à base d'Arduino : les boutons, la pédale d'accélération et de frein, le volant/spinner sont tous parfaitement reconnus et utilisables dans l'interface !  ^-

Je ne me suis pas encore frotté à la création d'un layout (rien d'indispensable), mais en l'état, avec le layout "RetroGUI", je pense que Mala répond parfaitement à tous mes besoins !  :-)=

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: funkycochise le Jeudi 28 Janvier 2021, 03:28:20 AM
faut que ressorte mon bundle tout en un, quelque part sur le net.
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Solkan le Jeudi 28 Janvier 2021, 06:39:15 AM
Citation de: funkycochise le Jeudi 28 Janvier 2021, 03:28:20 AM
faut que ressorte mon bundle tout en un, quelque part sur le net.
yes, c'est tellement bien Mala et c'est vraiment dommage qu'il ne soit plus maintenu (ni même disponible)
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Tibal le Mardi 25 Juillet 2023, 23:52:20 PM
Salut !

Je déterre ce topic car, après avoir perdu la motivation d'avancer sur mon WIP Pole Position (https://www.gamoover.net/Forums/index.php?topic=42639.0) pour cause de PCB HS, le travail de Little_Rabbit expliqué ici m'a reboosté.
Faut dire que, depuis le début de mon WIP en 2020, j'ai beaucoup appris grâce aux gens de ce forum, notamment sur les RaceCabs, l'implémentation de PC, et le dessin de PCB. Si je ne désespère pas d'un jour réparer ma PCB originale, je voulais donc tenter la conversion de ma Polpo ! Et si ça se passe comme je l'espère, que tout est jouable comme il faut, certainement que ça me motivera pour dépanner l'écran qui est lui aussi HS !

J'ai commencé par faire une PCB-Prototype basée sur les schémas de Little_Rabbit, avec son aide. C'est globalement un Mega Adapter, mais pour accueillir un Arduino Leonardo, où j'ai gardé toutes les fonctionnalités susceptibles de servir à un moment, et ajouté un péritel-hack pour connecter à une TV (idée de L_R  ^-)

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/25/20230725221500-Tibal-20230725_191712.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/25/20230725221500-Tibal-20230725_191712.jpg)

J'ai également fait une PCB de remplacement d'Opto Coupleur, puisque j'ai lu que les originaux pouvaient être récalcitrants associés à du matériel moderne. Là encore, Little_Rabbit m'a bien aidé (Merci pour toutes les mesures quand ma borne était inaccessible !).

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/25/20230725221500-Tibal-20230725_191812.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/25/20230725221500-Tibal-20230725_191812.jpg)

Pourquoi il y en a deux ? Parce que l'une est faite avec des optocoupleurs ITR-9606 et l'autre des ITR-9608. Comme je n'ai pas compris la différence à partir des datasheets, j'ai fait les 2, et on verra si ça change quelque chose en test.

J'ai poussé le vice en m'approchant des écritures du verso et du routage original, pour le fun  ;D

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/25/20230725225704-Tibal-2023-07-25%2021_25_21-EasyEDA(Standard)%20-%20A%20Simple%20and%20Powerful%20Electronic%20Circuit%20Design%20Tool%20%E2%80%94%20Mozil.png) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/25/20230725225704-Tibal-2023-07-25%2021_25_21-EasyEDA(Standard)%20-%20A%20Simple%20and%20Powerful%20Electronic%20Circuit%20Design%20Tool%20%E2%80%94%20Mozil.png)
(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/25/20230725230833-Tibal-IMG-20230402-WA0010(1).jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/25/20230725230833-Tibal-IMG-20230402-WA0010(1).jpg)

J'ai ensuite récupéré des Leonardo, et, après quelques galères dues à un IDE mal installé et des librairies prêtant à confusion, je les ai flashés avec le code de Little_Rabbit (merci pour le support, et à njz3 aussi !)

J'ai fait un premier test pour voir déjà si le Leo Adapter s'insère bien et s'il ne met pas le feu à la maison.
On fait un peu de place autour de la borne, on approche un PC, un écran, on branche dans le même sens que d'origine...

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/25/20230725221500-Tibal-20230725_160430.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/25/20230725221500-Tibal-20230725_160430.jpg)

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/25/20230725221500-Tibal-20230725_153858.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/25/20230725221500-Tibal-20230725_153858.jpg)

On met sous tension et... Rien ne brûle !

Je connecte au PC, il détecte le Leonardo comme il faut  :-)=

Je teste le volant... Aïe, le curseur de souris ne bouge pas alors qu'il devrait.
Je teste le shifter, il est détecté ! Idem pour les boutons de service derrière la Coin Door !
Je teste le potentiomètre de l'accélérateur, c'est bon pour lui aussi.

Je connecte un câble audio entre le PC et les entrées Sound 1 et 2 qui théoriquement sont les bonnes pour ma Upright, je monte le son du PC, mais rien ne sort.

Voilà pour ces débuts !

Dans les jours qui viennent, je testerai mes cartes Opto voir si ça change des choses pour le curseur de souris.
Je testerai les autres entrées Sound, je regarderai si le son de la borne n'était pas au minimum  ;D

A suivre !

Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Mercredi 26 Juillet 2023, 22:52:17 PM
Salut,

Bravo Tibal pour cette superbe réalisation !  ^-^

Tu deviens le spécialiste des cartes d'intégration plug and play des solutions d'émulation pour race cab !  :D

Et merci aussi d'avoir déterré ce sujet, cela va j'espère m'inciter à le terminer ! (car oui, il est toujours en cours... :-\)

Pour ton problème de volant qui ne fonctionne pas, je viens de jeter un œil à plusieurs trucs :

- la dernière version du source que je t'ai transmise utilise bien les entrées numériques 2 et 3 du Leonardo
- j'ai repris le schéma ATARI pour suivre sur le PCB les traces du circuit menant aux broches auxquelles le coupleur est relié

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/26/20230726221428-Little_Rabbit-Capture%20d%C3%A9cran%20du%202023-07-26%2022-13-21.png) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/26/20230726221428-Little_Rabbit-Capture%20d%C3%A9cran%20du%202023-07-26%2022-13-21.png)

=> on est bien sur les broches 8 et H
(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/26/20230726221645-Little_Rabbit-Capture%20d%C3%A9cran%20du%202023-07-26%2022-16-22.png) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/26/20230726221645-Little_Rabbit-Capture%20d%C3%A9cran%20du%202023-07-26%2022-16-22.png)

(j'ai d'abord cru que tu avais câblé la broche G, mais en fait on passe de F à H, il n'y a pas G :D)

J'ai également vérifié que les résistances de pull-down sont bien présentes : tout me semble en ordre.

Donc je ne saurais dire pourquoi cela ne fonctionne pas :'(.

Les vérifications à effectuer :

- as-tu bien 5V entre les bornes 2 et 3 du coupleur ?
- avec un oscilloscope (ou analyseur logique), peux-tu regarder quel signal on a sur les entrées 2 et 3 du Leonardo quand on tourne le volant ?

Quant à la partie son, comme je te l'avais dit quand tu développais la carte, je ne suis pas sûr de comprendre comment cela fonctionne... Il faudrait un vrai électronicien :D.

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/26/20230726222545-Little_Rabbit-Capture%20d%C3%A9cran%20du%202023-07-26%2022-25-34.png) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/26/20230726222545-Little_Rabbit-Capture%20d%C3%A9cran%20du%202023-07-26%2022-25-34.png)

Au hasard, @Fred G5  :D , saurais-tu nous expliquer comment les sorties "son" fonctionnent ?

- il y a une masse Audio
- et chaque sortie a une sortie + et une sortie -

Sur la borne, seules les sorties + semblent reliées aux cartes AudioRegulator II qui sont en charge de l'amplification :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/26/20230726223111-Little_Rabbit-Capture%20d%C3%A9cran%20du%202023-07-26%2022-30-04.png) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/26/20230726223111-Little_Rabbit-Capture%20d%C3%A9cran%20du%202023-07-26%2022-30-04.png)

Peut-on bien ignorer les sorties "Sound -" ?

Sur ton PCB Tibal, j'ai vérifié et on a bien les 4 entrées "son" en T, 15, 18 et 16, et les broches U et V sont bien à la masse.

Vérifie en effet le réglage du volume (sur ces bornes ATARI, la carte ampli AR2 amplifie plein pot tout le temps, et en aval ce sont des potards bobinés (rhéostats) qui permettent de régler le volume :) ).

Sur mon PCB dont le mode Service fonctionne encore, j'essayerai de mesurer quelle tension on a en sortie de l'étage audio :).

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Tibal le Jeudi 27 Juillet 2023, 17:07:26 PM
Merci pour tes investigations !
Je ferai les vérifications dont tu parles certainement ce weekend.

Hier j'ai eu 15 min et j'ai regardé pour changer le coupleur.
Déjà, je n'ai pas le même que toi, le mien comporte plus de composants !

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/27/20230727164847-Tibal-20230726_183250.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/27/20230727164847-Tibal-20230726_183250.jpg)

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/27/20230727164847-Tibal-20230726_183300.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/27/20230727164847-Tibal-20230726_183300.jpg)

Savez-vous ce qu'est le composant blanc d'ailleurs ?

J'ai installé la PCB Coupleur de remplacement, pas de souci particulier, mais je n'ai pas eu le temps d'aller plus loin que ça.

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/27/20230727164847-Tibal-20230726_183237.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/27/20230727164847-Tibal-20230726_183237.jpg)

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/27/20230727164847-Tibal-20230726_183226.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/27/20230727164847-Tibal-20230726_183226.jpg)

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/27/20230727164847-Tibal-20230726_183209.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/27/20230727164847-Tibal-20230726_183209.jpg)

Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Tibal le Vendredi 28 Juillet 2023, 12:36:56 PM
Oooooh !

Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Vendredi 28 Juillet 2023, 12:45:25 PM
Salut,

Cool !  ^-^

Quel était le problème alors ? Juste les potards qui étaient à zéro ? :)

Qu'as-tu changé pour que le son soit là à présent ?

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Tibal le Vendredi 28 Juillet 2023, 12:55:30 PM
Oui c'était juste les potards :D
Et ce test m'a d'ailleurs rappelé qu'un de mes 2 HP est manquant, je n'ai que celui au dessus de l'écran.

J'ai testé rapidement le volant avec la nouvelle Coupler PCB, ça ne marche pas mieux. Je ferai les mesures que tu suggères dans les jours qui viennent.
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Tibal le Vendredi 28 Juillet 2023, 13:14:38 PM
Je relis tes posts en page 2, et je vois que la Coupler PCB que tu utilises pour tes tests est encore une 3eme version de celle-ci, avec 2 transistors et 2 résistances.
As-tu déjà testé ton montage avec la PCB "plus simple" que j'ai reproduite ?
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Vendredi 28 Juillet 2023, 14:12:10 PM
Re,

En effet, le coupleur que j'utilise est celui que mon frère avait dans sa borne Pole Position, mais qui provient à priori d'une Road Blaster :).

Non, je ne crois pas avoir fait le test avec un modèle comme celui que tu as reproduit. J'en ai un dans ma Pole Po' 2 upright : j'essayerai de trouver le temps ce week-end de la démonter et faire le test.

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: fiend41 le Vendredi 28 Juillet 2023, 15:15:29 PM
ça rappelle le travail fait sur des  raspberry en interface (toutes sold out...) adaptés à des jeux sega aux contrôles analogiques/potards style  Afterburner/Thunderblade...
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Tibal le Samedi 29 Juillet 2023, 11:43:27 AM
Hello,

J'ai fait une première mesure, j'ai bien le 5v qui arrive au Coupler PCB.

Mais au passage j'ai remarqué quelque chose qui, je pense, réduit fortement les chances de fonctionnement :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/29/20230729114132-Tibal-20230729_113508.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/29/20230729114132-Tibal-20230729_113508.jpg)
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Tibal le Dimanche 30 Juillet 2023, 13:55:44 PM
Le patch :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/30/20230730130017-Tibal-20230729_120421.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/30/20230730130017-Tibal-20230729_120421.jpg)

Le test :

Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Dimanche 30 Juillet 2023, 23:19:44 PM
Salut,

Ah super !!  :-)=

Finalement, tout fonctionnait du 1er coup, ce n'était qu'une histoire de fil coupé, et de potard à zéro ! :)

Citation de: Tibal le Jeudi 27 Juillet 2023, 17:07:26 PM(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/07/27/20230727164847-Tibal-20230726_183250.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/07/27/20230727164847-Tibal-20230726_183250.jpg)

Vendredi soir j'ai jeté un œil au coupleur que j'avais dans ma Pole Po' 1 cockpit : c'est le même que celui là ! :)

J'ai reconstitué son schéma, et en fait cela ne fait que rajouter en aval des phototransistors des optocoupleurs des portes Non à trigger de schmitt :) (le trigger de Schmitt offre une meilleure immunité au bruit, au ajoutant un hystérésis ;)).

J'avais donc rapidement testé les deux autres coupleurs en ma possession, ceux que j'ai sur ma Pole Po' 1 cockpit et Pole Po'2 upright, et ni l'un ni l'autre ne semblaient fonctionner sur mon volant de fortune ! :-\ Mais je n'avais fait que les présenter manuellement au niveau de la roue codeuse, sans les monter sur le Mecanno :). J'avais commencé à me demander si cela ne pouvait pas venir des résistance de pull-donw de valeur un peu faible (330 ohms, qu'on aurait pu passer à 3,3 k ohms je pense...).

Je suis content de voir que cela fonctionne en l'état sur ta borne !  ^-

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Tibal le Mardi 01 Août 2023, 19:17:42 PM
Micro-avancées du jour :

- Les 2 repros de Coupler PCB (avec ITR-9606 et ITR-9608 donc) fonctionnent.
Juste, quand on tourne le volant à gauche, la souris se déplace à droite. C'est un truc qui s'inverse facilement dans MAME ensuite ?

- Ma Coupler PCB originale ne fonctionne pas chez moi non plus. J'essaierai donc toutes les PCB avec des résistances de pull-down de 3,3K ^-
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Mardi 01 Août 2023, 21:27:28 PM
Salut,

Citation de: Tibal le Mardi 01 Août 2023, 19:17:42 PM- Les 2 repros de Coupler PCB (avec ITR-9606 et ITR-9608 donc) fonctionnent.
Juste, quand on tourne le volant à gauche, la souris se déplace à droite. C'est un truc qui s'inverse facilement dans MAME ensuite ?

Cool que tes deux repros fonctionnent !  ^-

Pour le sens de rotation, tu l'as constaté sur le bureau de Windows ?

Je pense que cela provient de mon panel de test :) :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200521120727-Little_Rabbit-IMG-20200521-113506.jpg) (https://gamoovernet.pixhotel.fr/pics/20200521120727-Little_Rabbit-IMG-20200521-113506.jpg)

Comme on le voit sur cette photo, ma roue codeuse tourne dans le même sens que le volant. Alors que sur une borne Pole Position, du fait de la présence du jeu d'engrenages utilisé pour multiplier la vitesse de rotation de la roue codeuse, la roue tourne dans le sens inverse du volant !...

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/20200511220132-Little_Rabbit-IMG-20200504-151524.jpg) (https://gamoovernet.pixhotel.fr/pics/20200511220132-Little_Rabbit-IMG-20200504-151524.jpg)

Je ne sais pas si c'est modifiable dans MAME, mais le plus logique est de le modifier à la source, c'est à dire dans... le source :D du driver Arduino, d'autant que c'est prévu d'origine :



// Mettre 1 ou -1 selon le sens de déplacement souhaité pour le curseur de souris
const int SensRotationX = 1;

int range = 2;                    // output range of X movement; affects movement speed
const int responseDelay = 10;     // response delay of the mouse, in ms


Il suffit donc de passer à -1 le sens de rotation, et recompiler/téléverser le script du Leonardo :) =>


// Mettre 1 ou -1 selon le sens de déplacement souhaité pour le curseur de souris
const int SensRotationX = -1;

int range = 2;                    // output range of X movement; affects movement speed
const int responseDelay = 10;     // response delay of the mouse, in ms





Citation de: Tibal le Mardi 01 Août 2023, 19:17:42 PM- Ma Coupler PCB originale ne fonctionne pas chez moi non plus. J'essaierai donc toutes les PCB avec des résistances de pull-down de 3,3K ^-

OK, merci ! Je n'ai pas eu le temps de faire l'essai de mon côté...

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Tibal le Jeudi 03 Août 2023, 17:48:04 PM
Citation de: Little_Rabbit le Mardi 01 Août 2023, 21:27:28 PMPour le sens de rotation, tu l'as constaté sur le bureau de Windows ?
Oui, sur le bureau Windows :)

Citation de: Little_Rabbit le Mardi 01 Août 2023, 21:27:28 PMIl suffit donc de passer à -1 le sens de rotation, et recompiler/téléverser le script du Leonardo :) =>

// Mettre 1 ou -1 selon le sens de déplacement souhaité pour le curseur de souris
const int SensRotationX = -1;
C'est modifié, et ça marche dans le bon sens !  :-)=

J'ai installé les résistances de pull-down de 3,3K à la place des 330.
Avec les repros, ça marche tout aussi bien.
Avec l'originale, je vois le curseur de souris vibrer sur place quand je tourne le volant, mais il ne se déplace pas...
Testé sur le bureau Windows là aussi.
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Tibal le Samedi 05 Août 2023, 02:32:50 AM
J'ai lancé MAME et tenté une partie. Tout ne fonctionnait pas direct (normal) mais après avoir un peu tâtonné et surtout suivi les indications de Little_Rabbit dans ce topic pour la config de MAME, j'ai pu faire une partie.

Il y avait cependant quelques points non-abordés jusqu'ici :

Déjà quand je tournais le volant, la voiture tournait mollement. Il fallait faire plusieurs tours de volant pour espérer prendre correctement une courbe. Dans le Service Menu (auquel on accède en faisant Tab au clavier, puis en allant dans 'DIP Switches', et en mettant sur ON la ligne Service Menu. F2 ne fonctionne pas chez moi...), les digits de la ligne STEERING augmentaient très lentement en tournant le volant, et plusieurs dizaines de tours étaient nécessaires pour aller de 00 à FF

Pour régler cela il faut aller dans le Tab Menu de MAME, puis dans Analog Controls.

Le Menu qui apparait quand on fait 'Tab' au clavier :
(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/08/05/20230805015157-Tibal-20230805_005741.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/08/05/20230805015157-Tibal-20230805_005741.jpg)

Le Menu Analog Controls :
(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/08/05/20230805015157-Tibal-20230805_004820.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/08/05/20230805015157-Tibal-20230805_004820.jpg)

Là on peut jouer sur la sensibilité ('Dial Sensitivity').
A 30 de sensibilité, c'était le feu. La voiture réagissait trop, et il fallait bien moins d'un tour de volant pour faire défiler tous les digits du Service Menu.
A 20 c'était très jouable. Un tour de volant fait passer de 00 à A5 en Service Menu.
A 15 c'était jouable aussi. Un tour de volant fait passer de 00 à 7C en Service Menu.

Ma question : sur le jeu original, quelle est la plage hexadécimale pour exactement 1 tour de volant ?

Au passage on voit que l'on pouvait inverser le sens de la direction avec 'Dial Reverse', ce qui fait une alternative au fait de toucher au code source de l'Arduino.

Quant au paramètre 'Dial Digital Speed', j'ai l'impression qu'il ne sert qu'à décaler la position par défaut du curseur, ce qui semble sans intérêt pour une borne avec un volant sans butée comme Pole Position


Ensuite, j'ai dû régler le shifter. Comme l'a expliqué Little_Rabbit, j'ai ajouté les arguments value="0" et toggle="no" à la ligne correspondant au shifter dans polepos.cfg pour avoir un comportement adapté. Cependant Hi et Low en jeu étaient inversés par rapport à la position physique du levier. Après une petite recherche, j'ai vu que ajouter "NOT" devant l'input du shifter devait suffire. Et c'était bien le cas.

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/08/05/20230805015157-Tibal-20230805_013338.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/08/05/20230805015157-Tibal-20230805_013338.jpg)

Autre question : Dans le jeu original, à quoi sert l'interrupteur à 2 positions derrière la Coin Door, et quel est son comportement ?
Est-ce qu'il permet d'aller dans le service menu ? ou est-ce qu'on y accède réellement par des DIP Switches comme le suggère MAME ?

Il me restera donc ce switch à paramétrer, la sensibilité du volant à régler, mais aussi la pédale d'accélérateur à étalonner pour avoir des inputs 100% fidèles à l'original.

EDIT :
Je m'auto-réponds à ça :
Citation de: Tibal le Samedi 05 Août 2023, 02:32:50 AMAutre question : Dans le jeu original, à quoi sert l'interrupteur à 2 positions derrière la Coin Door, et quel est son comportement ?
Est-ce qu'il permet d'aller dans le service menu ? ou est-ce qu'on y accède réellement par des DIP Switches comme le suggère MAME ?
D'après la doc, l'interrupteur permet bien d'aller dans le Service Menu lorsqu'il est sur ON (et c'est la seule façon d'y aller, les DIP Switches ne permettent pas ça). J'essaierai de bien paramétrer ça dans MAME.
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Tibal le Dimanche 06 Août 2023, 15:13:23 PM
Yop,

Concernant le switch qui permet d'aller dans le service mode, il faut modifier le default.cfg qui est dans le dossier "cfg" de MAME, et mettre en face de la fonction 'Service' le ou les boutons qui l'activeront.

Dans mon cas, pour avoir F2 du clavier et le Switch de la borne qui passent au mode Service, il faut donc mettre ce qui est en bleu ici :
ça ne semblait pas marcher chez toi Little_Rabbit (voir page 3), mais chez moi ça fonctionne...

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/08/06/20230806143816-Tibal-20230806_021339.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/08/06/20230806143816-Tibal-20230806_021339.jpg)

A noter que :

- toutes les lignes au dessus (service 1 à 4) sont inutiles ici

- paramétrer le bouton service dans polepos.cfg (ou dans 'Input(this game)', puisque c'est la même chose) est sans effet

- il ne faut pas oublier qu'un bouton numéro N dans l'interface MAME a le numéro N+1 dans les fichiers .cfg

- je n'ai pas réussi à avoir le comportement parfaitement identique à l'original pour ce bouton service :
D'origine, quand on met sur ON on arrive dans le Service Menu, et quand on remet sur OFF on revient dans le jeu.
Ici quand je mets sur ON, ça bascule en Service Menu. Si je remets sur OFF, ça reste en Service Menu, et c'est au ON suivant qu'on arrivera en jeu.
Il faudrait mettre une fonction de type toggle="no", mais je n'ai pas réussi à le faire. Lors de mes essais, chaque fois que j'ajoutais des arguments dans le default.cfg (même avec un argument Value, mais peut-être n'ai-je pas bien fait), ils disparaissent, MAME doit écrire dans ce fichier et corriger ce qui ne lui va pas j'imagine.
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Little_Rabbit le Lundi 07 Août 2023, 23:27:02 PM
Salut,

Merci pour ces tests et ces belles avancées dans la compréhension du fichier de config MAME !

Citation de: Tibal le Samedi 05 Août 2023, 02:32:50 AMMa question : sur le jeu original, quelle est la plage hexadécimale pour exactement 1 tour de volant ?

Il y a 3 ans, j'avais justement fait une telle vidéo pour calibrer à peu près mon panel de test :).

Voici la vidéo en question, faite avec un PCB original en mode service :


On voit donc qu'il faut 2,5 tours de volant pour passer de $00 à $FF : cela te donnera une référence pour régler la sensibilité.

Si tu jettes un œil au source Arduino, tu remarqueras qu'il y a également un paramètre pour régler la sensibilité, juste à côté de celui qui définit le sens de rotation :


// Mettre 1 ou -1 selon le sens de déplacement souhaité pour le curseur de souris
const int SensRotationX = 1;

int range = 2;                    // output range of X movement; affects movement speed
const int responseDelay = 10;     // response delay of the mouse, in ms


En passant ce "range" à 3 ou 4, tu dois augmenter la vitesse du curseur car ce range sert de coefficient multiplicateur :

    // calculate the movement distance based on the new position
    int  distanceX = (newX - positionX) * range;
   
    // if X is non-zero, move:
    if (distanceX != 0) {
      // seul l'axe des X évolue pour un spinner
      Mouse.move(distanceX, 0, 0);



Une autre solution est aussi peut être d'utiliser le réglage de sensibilité de la souris dans le panneau de configuration de Windows :).

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/08/07/20230807225920-Little_Rabbit-Sensibilit%C3%A9%20souris.png) (https://gamoovernet.pixhotel.fr/pics/v2/2023/08/07/20230807225920-Little_Rabbit-Sensibilit%C3%A9%20souris.png)


Citation de: Tibal le Samedi 05 Août 2023, 02:32:50 AMQuant au paramètre 'Dial Digital Speed', j'ai l'impression qu'il ne sert qu'à décaler la position par défaut du curseur, ce qui semble sans intérêt pour une borne avec un volant sans butée comme Pole Position

Je me demande si ce paramètre ne sert pas à régler la sensibilité ou vitesse d'incrément quand on joue par exemple au clavier : cela fixera le temps qu'il faut maintenir la touche enfoncée pour tourner. Avec une valeur importante, une pichenette sur la touche doit suffire pour braquer à fond (ce qui rendrait le jeu injouable ;)). Mais en effet, dans le cas d'un volant/souris, ce paramètre n'a sûrement aucun intérêt.


Concernant le levier de vitesse, selon les fois où j'ai testé des configurations, je n'obtenais pas toujours le même résultat ! :-\ Tantôt il était actif au niveau haut, tantôt au niveau bas... Il serait vraiment intéressant de trouver une documentation détaillée sur les fichiers de config MAME car moi c'est vraiment par tâtonnement et parfois empiriquement que je parvenais à certains résultats, sans bien comprendre le rôle de chaque attribut...

Citation de: Tibal le Samedi 05 Août 2023, 02:32:50 AMAutre question : Dans le jeu original, à quoi sert l'interrupteur à 2 positions derrière la Coin Door, et quel est son comportement ?
Est-ce qu'il permet d'aller dans le service menu ? ou est-ce qu'on y accède réellement par des DIP Switches comme le suggère MAME ?

Tu l'as trouvé par toi-même : ce bouton sert bien à rentrer dans le mode service :). On y reste tant qu'il est poussé, et on revient en mode jeu en le replaçant dans sa position initiale.

Sinon bravo pour avoir trouvé comment activer le mode Service avec un bouton !!   :-)=

Je n'avais rien trouvé à l'époque ! En effet, un mode "toggle = no" serait souhaitable... Je vais faire des tests de mon côté également :).

A+
Titre: Substitution d'un PCB Pole Position par un PC sous MAME
Posté par: Tibal le Mardi 08 Août 2023, 22:37:08 PM
Hello !

Merci pour ces explications !  :)

Citation de: Little_Rabbit le Lundi 07 Août 2023, 23:27:02 PMOn voit donc qu'il faut 2,5 tours de volant pour passer de $00 à $FF : cela te donnera une référence pour régler la sensibilité.
OK merci ! On voit pas très bien l'écran au moment où ça fait pile 1 tour, mais par le calcul*, on peut déduire de ça que 1 tour correspond à la valeur 66 !
*2,5 tours pour arriver à FF qui en décimal est 255, donc en 1 tour c'est 102 en décimal, soit 66 en hexa


Citation de: Little_Rabbit le Lundi 07 Août 2023, 23:27:02 PMEn passant ce "range" à 3 ou 4, tu dois augmenter la vitesse du curseur car ce range sert de coefficient multiplicateur :
Je vais essayer de régler depuis le code source alors, je me dis que si ça marche direct sans régler MAME, c'est toujours plus simple ^-
EDIT : et le bon réglage avec une sensbilité dans MAME remise à 1 est un Range de... 25 !  ;D

Citation de: Little_Rabbit le Lundi 07 Août 2023, 23:27:02 PMUne autre solution est aussi peut être d'utiliser le réglage de sensibilité de la souris dans le panneau de configuration de Windows :).
Ça à l'inverse je me dis que c'est à éviter pour que l'utilisation du PC hors jeu ne soit pas affectée :)


Citation de: Little_Rabbit le Lundi 07 Août 2023, 23:27:02 PMJe me demande si ce paramètre ne sert pas à régler la sensibilité ou vitesse d'incrément quand on joue par exemple au clavier : cela fixera le temps qu'il faut maintenir la touche enfoncée pour tourner. Avec une valeur importante, une pichenette sur la touche doit suffire pour braquer à fond (ce qui rendrait le jeu injouable ;)). Mais en effet, dans le cas d'un volant/souris, ce paramètre n'a sûrement aucun intérêt.
Ha peut-être oui, ce serait à tester pour la culture.


Citation de: Little_Rabbit le Lundi 07 Août 2023, 23:27:02 PMConcernant le levier de vitesse, selon les fois où j'ai testé des configurations, je n'obtenais pas toujours le même résultat ! :-\ Tantôt il était actif au niveau haut, tantôt au niveau bas... Il serait vraiment intéressant de trouver une documentation détaillée sur les fichiers de config MAME car moi c'est vraiment par tâtonnement et parfois empiriquement que je parvenais à certains résultats, sans bien comprendre le rôle de chaque attribut...
Chez moi ça semble stable, en tout cas jusqu'ici...



Sinon j'ai pu réparer ma pédale pour laquelle il manquait le câble qui actionne le potentiomètre (je détaillerai ça dans mon propre WIP certainement).

Dans MAME, sur la ligne ACCEL du Service Menu, je constate que pédale lâchée j'ai 00, et pédale enfoncée, j'ai 66 :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/08/07/20230807011332-Tibal-20230807_004403.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/08/07/20230807011332-Tibal-20230807_004403.jpg)

Comme l'a expliqué L_R, pédale à fond je devrais avoir 90. Aucun réglage dans MAME / Tab Menu / Analog Controls ne permet de régler mon problème : mon maximum reste inexorablement 66.

Il faut probablement étalonner la pédale dans Windows.

Je vais dans Panneau de Configuration, Périphériques et Imprimantes, je clique droit sur le Leonardo. Je clique sur "Paramètres des contrôleurs de jeu" :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/08/07/20230807011332-Tibal-20230807_010602.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/08/07/20230807011332-Tibal-20230807_010602.jpg)

Je sélectionne le Leonardo et clique sur Propriétés :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/08/07/20230807011332-Tibal-20230807_010522.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/08/07/20230807011332-Tibal-20230807_010522.jpg)

Dans l'onglet "Tester", je vois que la pédale lâchée est vue comme enfoncée à environ 30%, et qu'elle est vue comme à fond avant qu'elle soit physiquement en butée :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/08/07/20230807011332-Tibal-20230807_010435.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/08/07/20230807011332-Tibal-20230807_010435.jpg)

Je vais dans l'onglet "Paramètres", je clique sur étalonner :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/08/07/20230807011332-Tibal-20230807_010445.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/08/07/20230807011332-Tibal-20230807_010445.jpg)

Je clique sur "suivant" jusqu'à la fenêtre de réglage de la pédale, je l'enfonce à fond, la relâche, comme indiqué à l'écran. Une fois la procédure d'étalonnage terminée, je retourne dans l'onglet "Tester", et cette fois la course de ma pédale correspond à celle vue par Windows :

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/08/07/20230807011332-Tibal-20230807_010510.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/08/07/20230807011332-Tibal-20230807_010510.jpg)

Je retourne dans MAME, et cette fois ACCEL atteint bien les 90  :-)=

(https://gamoovernet.pixhotel.fr/pics_gamoovernet890px/v2/2023/08/07/20230807011332-Tibal-20230807_010629.jpg) (https://gamoovernet.pixhotel.fr/pics/v2/2023/08/07/20230807011332-Tibal-20230807_010629.jpg)

Et en jeu c'est parfait !  =:))