Vous voulez parler de système d'arcade, de borne d'arcade, de joystick, de hardware console. Vous voulez des infos sur un point technique, c'est ici. 8292
Voilà un long post simplement pour partager un projet terminé, en guise de retour après avoir notamment acheté un peu de matos à certains d'entre vous ici.
Bon, y'a ça et puis j'ai aussi besoin de me vider la tête de cette petite aventure, alors pardon d'avance pour le déballage de détails sans intérêts mais c'est une question d'hygiène mentale, merde hein.
Et pour les curieux, mon racontage de vie à fins thérapeutiques
Contexte de départ :
Depuis quelques années je suis l'heureux conducteur d'une borne OutRunners upright qui m'éclate bien. Quelle belle célébration du fun et du Super-Scaling !
Ca a d'ailleurs été l'occasion d'ouvrir un leaderboard dédié sur speedrun.com : https://www.speedrun.com/outrunnersarcade
Le System Multi 32 s'appuyant sur le standard JAMMA, j'ai d'abord entrepris d'adjoindre un système de switch JAMMA complété par un switch mécanique pour les contrôles analogiques, pour ajouter des jeux sur RasPi puis finalement sur PC (en espérant que les liens vers un forum "concurrent" soient bien tolérés ...).
Problème :
Que ce soit sur RasPi ou sur PC, même avec un SSD déjà tout bien préparé (merci Seb Arcade), la moindre action de configuration logicielle est juste chiante à mourir, sans intérêt, j'ai zéro passion à trifouiller là-dedans.
Pire encore, l'émulation s'avère buggée précisément sur LE jeu que j'ai envie de jouer sérieusement sur cette borne : Virtua Racing a des bugs de collision dûs à des imprécisions dans l'émulation des puces TGP, et malheureusement pas de projet de decap de ces puces en vue ... un jour peut-être avec la montée en puissance des implémentations FPGA ?
Tout ça pour en arriver à cette conclusion :
Rien à foutre d'avoir trouzemille jeux de course dans ma borne, c'est Virtua Racing que je veux et pis c'est tout, quitte à tout virer pour mettre son set de PCBs.
Parce que perdre mon temps dans les profondeurs de systèmes de fichiers à éditer du ini/cfg/xml et j'en passe, c'est NON ; mais alors contempler longuement les jolis diagrammes électroniques à la fin d'un manuel technique de SEGA, je dis OUI.
Voilà comment ce projet est né, avec un objectif clair :
Faire tourner le set de PCBs de Virtua Racing dans une borne OutRunners upright, tout en conservant l'OutRunners original avec un switch.
Pour les fans de la SEGA Sound Team, c'est un peu comme un hommage à cet album crossover de B-univ ... une B-univ cab ouais, c'est ça.
Objectif simple et clair certes mais bien naïf, au vu des quelques challenges techniques rigolos que ça soulève implicitement.
Pêle-mêle :
- le Model 1 de VR est-il bien interfaçable avec un switch JAMMA et les contrôles analogiques de la borne ?
- quid du son stereo alors que la borne est mono ? C'est mixable facilement ça ?
- la sortie vidéo 24kHz du Model 1 est-elle bien downscalable en 15kHz pour notre humble Polo 25 ? Hum ça risque pas d'être dégueulasse ça ?
- euh entre le stack, l'I/O board, la sound board et les solutions de mixage/conversion encore à définir, t'es sûr que t'as bien la place pour caser tout ça dans ta borne Wiz ?
- et l'alim' ? T'as pensé à l'alim' Wiz ? T'es sûr que ça peut le faire niveau courant et surtout niveau contrôle du bon voltage pour le Model 1 réputé sensible ? Mais putain Wiz t'as déjà commandé des PCBs sans même réfléchir à tout ça ? Oh bordel . . .
Ainsi commence une histoire d'apprentissage étalée sur de longs mois de lectures passionnantes, d'expérimentations tortueuses, de petites satisfactions à chaque avancée mais aussi de craquages de dépenses pas raisonnables quand la patience venait à manquer ...
Phase 1 :
Achat peu éclairé d'un stack "non testé". ( )
Phase 2 :
Un colis de l'horreur arrive chez moi ...
Matez un peu ça.
...
..........
La vue d'ensemble est désespérante, mais bon, je teste quand même.
..........
... :- | un putain de miracle.
Un stack tout explosé qui marche.
J'ai prévenu le vendeur que même si tout fonctionne son packaging était limite niveau protection pour des PCBs, il a pris la peine de me répondre pour dire grosso modo "ship happens, t'as eu de la chance, have fun". Ok compris, passons vite à autre chose :- D . . .
Phase 3 :
On attaque la partie sonore.
C'est là que j'ai eu l'occasion d'échanger avec quelques membres ici en fait !
- Dans un premier temps j'ai foncé sur la solution du DSB Clone de Rom1. (alors même que j'avais choppé une sound board à vrai dire, mais j'étais trop curieux d'essayer ça avec la perspective de personnaliser les ziks )
Ca s'est avéré incompatible avec VR étant donné que pour ce jeu la sound board a aussi la charge de jouer les SFX, dont le bruit du moteur au pitch variable, donc pas reproductible par une solution de simple lecture mp3.
Rom1 m'a tout de suite proposé de reprendre son DSB Clone pour un remboursement, merci à lui ! Mais je l'ai gardé pour d'éventuels futurs projets ...
- Alors j'ai câblé la sound board et testé.
Et là ... hum ... je vous laisse le plaisir d'écouter ça.
Une partie des samples joués beaucoup trop vite, hmmm curieux ... mais ça semble pas désespéré. C'est l'occasion d'apprendre à diagnostiquer.
C'est comme ça que je me suis retrouvé à craquer sur un lot d'EPROMs avec programmeur vendu ici par Foul, ainsi qu'un effaceur d'EPROM à UV vendu par Enskynet : viewtopic.php?p=1436017
Un vrai trésor pour apprenti-réparateur de PCB
Documentation, état des lieux et tests ...
Liens utiles : https://github.com/mamedev/mame/blob/ma ... model1.cpp https://www.mikesarcade.com/cgi-bin/spi ... ROMref.txt
J'avais d'abord soupçonné la program ROM et j'ai pu programmer une EPROM équivalente pour un swap, sans amélioration.
Finalement après dump, c'est l'une des deux mask-ROM de samples qui semblait mal en point. Le fameux phénomène de bit-rot j'imagine ?
Commandé des PROMs de mêmes caracs et zou, la première programmée a tout de suite rétabli un son parfait. Victoire, ouh yeah ! :- D
Phase 4 :
L'enfer de la conversion vidéo ... ou comment j'ai créé un monstre.
Pour passer le 24kHz du Model 1 en 15kHz du moniteur à dispo, j'avais une solution qui me semblait toute trouvée : la fameuse carte GBS-8200 avec le custom-firmware GBS-Control.
GBS-C peut downscaler en 15kHz, c'est une option d'output sélectionnable tout bêtement et tout le monde en dit du bien.
Sauf que tout le monde ne s'amuse pas à downscaler du 24kHz avec, apparemment. Faut reconnaître que c'est pas un cas d'utilisation très courant.
Le problème :
Dans la pratique le firmware semble se contenter de diviser la résolution 384p par 2, et produit un 192p sur les premiers 4/5èmes de l'écran. (ça sent le "if(res<=480)"...)
C'est là que mon cerveau a dû surchauffer pour trouver une solution, et j'ai sombré dans la déraison.
"Si un GBS-C est pas foutu de downscaler du 24kHz vers du 15kHz ... y'a qu'à mettre un deuxième GBS-C", pensé-je alors dans le plus grand des calmes.
La théorie :
- Un premier GBS-C upscale le 24kHz vers une résolution plus conventionnelle genre 480p donc 31Khz.
- Et le second GBS-C peut enfin faire un downscale 15kHz correct.
Le montage en série que ça implique dans la pratique : Model 1 -> RGBS 24kHz 384p -> GBSC1 -> RGBHV 31kHz 480p -> Sync combiner circuit 1 -> RGBS 31kHz 480p -> GBSC2 -> RGBHV 15kHz 240p -> Sync combiner circuit 2 -> RGBS 15kHz 240p -> 15kHz CRT
Voilà voilà voilà. Bon bon bon. Eh bien essayons.
Lien utile : https://www.retrorgb.com/building-a-pas ... biner.html
(hé Enskynet regarde, ton assistant a servi )
AHAHAHAH ça fonctionne bordel je suis un génie. Ahem.
Je serais quand même curieux de voir ce que ça donnerait en 480i plutôt que 240p, mais pas de solution évidente à ma connaissance.
J'ai pas résisté à la tentation d'y aller de ma petite requête d'évolution dans ce sens sur le GBS-C, sans succès : https://github.com/ramapcsx2/gbs-control/issues/452
(faut dire aussi que j'ai aucune idée de la faisabilité )
Phase 5 :
Refonte de la solution de switch !
Je suis tombé par hasard sur un switch JAMMA s'appuyant uniquement sur des relais : je peux maintenant faire passer les contrôles analogiques par-là directement !
Switch qu'il a fallu que je corrige (pinout mal respecté par endroits) et que je modifie pour gérer l'alimentation comme je le souhaitais : un seul jeu alimenté à la fois.
Une occasion de m'initier à l'utilisation de relais en m'équipant de spécimens adaptés.
Phase 6 :
Regroupement de tous les circuits en un bloc.
Une installation très compacte qui ne m'a pas simplifié la vie, ma je suis content du résultat : ça tient à la verticale pour une installation pratique dans la borne.
Petit avantage auquel je crois pas mal : l'échauffement de la fameuse puce vidéo devrait être atténué par cette orientation, contraitement à la position d'origine à l'horizontale où l'air chaud devait plus facilement stagner (curieusement c'est la puce la plus proche des grands connecteurs entre les couches de PCB ... elle est bien enfermée).
Phase 7 :
Peaufinage du son.
Au moment de la phase précédente de regroupement j'ai aussi utilisé l'espace restant sur la board des sync-combiners pour installer un petit circuit de mixage audio qui mixe à la fois les deux sound boards (carte mère et carte fille) ainsi que les canaux gauche et droite pour obtenir le mono souhaité pour la borne. Aucun soucis, quelques résistances et zou.
En revanche phénomène étrange en installant l'ampli audio au bout : la vidéo s'est mise à afficher un bruit dégueulissime dès que l'ampli est sous tension !
Il s'agissait d'un ampli de classe D dont j'ai pas bien compris le processus exact d'amplification, si ce n'est que c'est pas aussi simple et propre qu'une amplification analogique classique et ça peut occasionner des interférences.
J'ai donc opté pour le remplacer par un circuit d'ampli analogique, plus volumineux mais apparemment moins susceptible de produire ce genre de parasitage : bingo, plus aucun problème vidéo.
Phase 8 :
Rafraîchissement des contrôles.
Assez confiant pour aller au bout du projet, je craque mon slip cette fois-ci sur des contrôles volant/pédales équivalents tout neufs de chez Smallcab, tout fier de pouvoir m'éviter les frais de port en récupérant ça à l'occasion du HFS Summer.
Gros hic en procédant au remplacement : la plaque d'installation du volant n'est pas la même que celle affichée sur la page du site, les trous sont alors pas compatibles avec le panneau de ma borne.
Bien motivé je décide de démonter l'ensemble pour adapter les pièces neuves sur ma plaque d'origine.
C'était théoriquement faisable, mais dans la pratique j'ai jamais été capable d'aller au bout du démontage de l'ensemble neuf : impossible de désolidariser certaines pièces de l'axe principal, alors que sur les pièces d'origine j'y suis parvenu sans soucis.
Pire, les pièces neuves sont vraisemblablement montées avec un couple bien trop fort qui a flingué des filetages.
Au bout du compte j'ai récupéré ce que j'ai pu et je me suis surtout démerdé pour retrouver un volant aux buttées bien amorties et sans aucun jeu. En dépit des galères le résultat me plaît beaucoup, feeling très agréable !
Pour les pédales ce sont les potentiomètres qui se sont avérés incompatibles au niveau form-factor des cosses, et ces potards m'ont pas inspiré confiance (random chinoiserie sans garantie de durabilité), ça me semblait pas de la même qualité que ceux d'origine dont j'avais retrouvé des exemplaires neufs à une autre occasion et que je préfère conserver. J'ai finalement préféré m'en tenir à remplacer les butées. Ce craquage de matos neuf pour juste récupérer du caoutchouc sur un axe, bordel ...
Dernier fun fact concernant les contrôles : j'ai cherché en vain l'écran de calibration dans le service menu de Virtua Racing.
Et puis j'ai tilté : VR ne se joue QUE avec du force feedback. C'est le FF qui centre lui-même !
J'ai paniqué un instant et j'ai re-tilté : ok y'a pas le choix, faut simplement bien orienter le potentiomètre sur la valeur centrale lorsque le volent est en position neutre. Pfiou ...
Phase 9 :
Installation dans la borne et alimentation.
Bon, l'installation physique est facile, y'a la place prévue.
En revanche jusqu'ici j'ai fait tourner VR à l'aide d'une bête alimentation PC, sans aucun problème de puissance donc, et curieusement sans aucun problème non plus pour le niveau du 5V.
Les emmerdes ont commencé dès le moment où j'ai tenté d'alimenter VR avec l'alim de la borne.
En termes de puissance max l'alim' d'origine est largement capable d'encaisser les besoins de l'ensemble VR + tous les circuits annexes.
Et pourtant dans la pratique, VR se lance pas, il n'allume que quelques LEDs qui semblent bien vouloir dire que l'alim lui plaît pas, ça lui suffit pas.
A partir de là j'ai tenté tout ce que j'ai pu : avec ou sans switcher JAMMA pour réduire la longueur de fil qui atténuerait le 5V, puis en jouant sur le potentiomètre de 5V de l'alim' ... rien à faire.
Alors que le System Multi 32 d'OutRunners a aucun problème, VR fait la fine bouche. Je l'ai habitué à trop bien, il ne veut que son alim d'ordi le bougre.
Pas la force d'investiguer davantage, je décide d'installer l'alim' PC à la place de l'alim d'origine, mais même problème pour VR : 5V trop atténué en passant par une telle longueur de câbles ?
Nouvelle idée !
J'utilise des relais comme ceux que j'ai ajoutés à mon switcher JAMMA, mais direct entre l'alim' et VR, à la fois pour le 5V et le GND du stack : l'alim en provenance du JAMMA déclenche le relais qui fournit alors un 5V tout frais sans longueur de fil superflue, sans atténuation.
Bingo, ça fonctionne !
Pas eu la force de refaire des branchements équivalents avec l'alim' d'origine, j'ai laissé comme ça mais pas totalement satisfait d'en arriver là, j'aurais aimé avoir une solution avec du pur matos arcade. Mais bon, techniquement c'est pas si choquant que ça non ? 'fin je sais pas, dites-moi
Le résultat :
Ca maaaarche !
Phase 10 :
Y'a plus qu'à jouer et faire péter les temps sur speedrun.com, ça va chier !
Salut wiz! Superbe ton run sur outrunners
J'étais à fond dedans. Belle immersion.
Incroyable tout ce que tu entreprends.
John faisant du pixel Art avec ses mots aka MOTW2 en 2D. Jean stage:
"je vois déjà son superbe décor : Paris populaire jour de marché près d'un quai, un clocher en arrière plan, un gamin qui chaparde une pomme, des costauds qui debarque les cagots, petite pluie fine animée"