Re Création du premier jeu vidéo

Redonner vie aux anciens avec la technologie actuelle ...

Tv pong gal

          Qui se souvient des premiers jeux vidéos domestiques commercialisés pour le grand public ? Cette console du millénaire passé proposait 4 jeux à interfacer avec la télé cathodique familiale qui s'appelaient Tennis, Football, Squash et Solo, dont le but était de renvoyer une balle (carrée) vers l'adversaire avec une raquette  (trait blanc) actionné par un potentiomètre tenu à la main ... De longues parties se jouaient, avec le droit de reprendre le gagnant contre un shot de Four Roses, jusqu'au bout de la nuit . En 1976, quand j'étais jeune et beau, j'avais utilisé un circuit intégré dédié: l'AY3-8500 de chez GI et qui se négocie relativement cher, rareté oblige, chez les heureux râcleurs de fonds de tiroirs, avec des doutes sur leur états de santé interne... Là, avec les technologies AVR, Arduino, Raspberry et les open sources, les packages de programme fleurissent sur les réseaux et il n'y a qu'à se servir et les adapter au matériel que l'on développe... ou le contraire ! Au pire des cas, l'IA va vous sortir le bout qui va bien, si on demande poliment, mais ça n'exclue pas la maitrise matérielle et logicielle pour pouvoir faire tourner l'un avec l'autre . Et comme je l'ai promis plus bas, une version plus petite, autonome, et évoluée est décrite sur cette page .Tv pong four 1

           Sur l'image de la console, on remarque autant de boutons que sur le tableau de bord d'un 747 ! Un poussoir de RaZ / Départ; un autre de sélection de jeux parmi les quatre disponibles ;  un bouton pour modifier la longueur des raquettes, grandes ou petites; un commutateur de vitesse de balle lente ou rapide; et un modificateur d'angle de rebond de la balle de 20° ou 40°. Un haut parleur donne des beeps dont la tonalité et la durée est différente selon: le rebond, la marque, la balle perdue, et le contact raquette . Les télévisions ayant évoluées au fil des siècles, il a fallu également travailler la sortie vidéo pour la rendre compatible avec les téléviseurs actuels . Le standard de 625 lignes en PAL et 525 en NTSC est ramené à 115 lignes, et c'est suffisant puisqu'il n'y a plus d'effet de papillotement dû au balayage des anciens écrans, contre 230 sur les "vieux jeux" car la RAM du microcontrôleur n'offre que 2Ko . Tout cela pour dire qu'un cavalier intérieur permet de choisir le mode PAL ou NTSC si la télé n'est pas multi standard (c'est rare !). Un autre jumper interne permet d'opter pour la version 1976 ou 1977 car le circuit a évolué dans le nombre de pixels attribués à la balle, aux murs et à l'épaisseur des raquettes ... Je ne l'ai pas enfiché car je préfère la version '77 . 

          Deux manettes permettent l'action homme-machine et se limitent à un potentiomètre encapsulé dans un boîtier que l'on tient horizontalement dans la paume de la main. Le pouce et l'index actionnent le bouton pour que la raquette vienne renvoyer la balle. La précision de frappe sur la position de la partie de la raquette va jouer sur l'angle de renvoi  (C.F.: 40° pour les extrémités et 20° pour le centre ) afin de lober l'adversaire . Le grand luxe aurait demandé à traiter les raquettes en Wi-Fi ou Bluetooth, mais il est important de garder ce jeu dans son jus et surtout ne pas plomber les coûts de réalisation (<15€ ma version ) ...Tv pong man

Allez hop ! à l'atelier ...

Le Schéma :

Tv pong sch

          C'est pratiquement que de la connectique ! On commence par l'alimentation sur JP12 / JP13: on va pouvoir l'alimenter soit par là, en 12 volts maxi, ce qui va permettre d'activer la commutation lente de la fiche Scart  par la sortie de la borne 4 de JP6 lors de l'allumage du jeu, si la télé est équipée de Péritel ... Sinon, un bloc secteur de 7 à 12 volts sur la fiche DC de l'Arduino UNO ! Le mot est prononcé, c'est bien un Arduino UNO qui va gérer tout notre jeu, et son régulateur 5 volts nous fourni le courant où on en a besoin . Si l'on commence par le haut à gauche, on a les deux potentiomètres d'environ 10K de position de raquettes qui délivrent une tension proportionnelle sur les entrées analogiques A4 et A5. Juste sous les manettes de jeu, les jumpers de configuration système 'en tirant' à GND les pins D4 et D12 pour passer en PAL/NTSC ou Version 1976/1977 . Plus bas, sur JP11, les deux boutons poussoirs dont l'un fait un redémarrage  et une remise à zéro du jeu, ainsi que l'autre qui permet de sélectionner ce à quoi on a envie de jouer, par appuis successifs, amenant un potentiel bas sur les entrées D5 et A3 (traitées en digitale). Le connecteur JP1 ramène les informations des 3 boutons bistables qui définissent nos préférences de jeu, en donnant respectivement des "1" ou des "0" sur les pinuches D8 (Angle de rebond), D7 (Vitesse de balle),  D6 (Longueur des raquettes ). voilà pour la distribution des entrées.

          Et les sorties maintenant; en haut à droite, le traitement du son utilise une amplification en courant avec le transistor T1 (BC547) dont on limite le courant base/émetteur par une résistance de 2K2 (R5) . Celle ci prélève un signal pulsé en fréquence et en durée sur la pin D11 de l'Arduino . Dans le collecteur de T1, j'ai mis en ligne un électrochimique 33µF/16v (C1), déchargé par la résistance R8(560), pour éliminer la composante continue dans le HP, qui ne doit pas servir de radiateur électrique . Pour une bonne immunitée sur l'alimentation,  j'utilise un HP avec une impédance  supérieure à 30 Ohms. Pour le signal vidéo je superpose deux tensions : de 0 à 0,3 volt pour les signaux de synchro, prélevés via la résistance de 1K (R3) sur la pin D9 et la composante vidéo, qui ici est purement binaire puisque je n'utilise que le noir (<0,3 volt) et le blanc ( 1 volt ), en prélevant celle-ci sur la broche D10 via une résistance de 470 Ohms (R4).

 

Le circuit imprimé :

         Ce circuit est réalisé en bakélite simple face, avec seulement un strap (à ne pas oublier ) et que pour des composants dit traversants. Le peu qu'il y a, m'a permis de faire un circuit espacé, largement dimensionné et facile à reproduire. L'Arduino est soudé sur des cosses de barrettes sécables pour une mise en place et un retrait aisé ... J'ai utilisé un vieux boîtier pupitre Teko sur lequel j'ai mis un altuglass translucide pour regrouper les boutons sur la face avant ... avec une led de présence tension, qui ne sert absolument à rien, car la façade laisse passer la lumière de celle de l'UNO . Les manettes sont réalisées à l'imprimante 3D; un simple potentiomètre ! avec un soin à apporter à l'anti-traction des câbles, car dans le feu de l'action, des personnes nerveuses le soumettent à rude épreuve ...Tv pong rel

          La face avant comporte tout les boutons et interrupteurs ... même un de plus, non utilisé chez moi et remplacé par une led (qui ne sert à rien ) : le marche / Arrêt . En effet je pensais, au premier jet, utiliser une alimentation à découpage 220/12volts, puis me suis résolu à utiliser un bloc secteur plugable de récupération et à le brancher sur la fiche de l'Arduino ... Simple et pas cher . Donc comme j'avais déjà usiné la face avant je n'ai pas voulu tout recommencer. Tv pong int 

Le Programme ...

          Une grande finesse ce programme ! Il existait en Open Source et j'ai adapté la version de Grant Searle à mon matériel, suivant la disposition des I/Os du circuit imprimé et les standards de la télévision  ... Il tourne avec une bibliothèque 'arduino-tvout' qui se charge de la gestion et du traçage des éléments d'écran . Comme pour les composants électroniques, c'est bien plaisant de ne pas avoir à fabriquer chaque fois ce qui a le privilège d'exister . Voyons rapidement la structure du programme; pour les détails les commentaires de ligne s'en chargent :

  • Création des chiffres en image Bitmap pour l'affichage des scores à l'écran à 7 segments .
  • Comme d'habitude : les déclarations des IOs, Variables, etc... et le setup.
  • Lecture de la config de standard télé et Version 76 ou 77 de l'AY-8500
  • Le choix du jeu par incrémentation des pressions sur le bouton 
  • Le reset du jeu (pas du micro )
  • Le tracé du terrain avec l'ajout pour les jeux choisis
  • L'affichage des scores
  • Création de la balle en double résolution (visibilité )
  • Détection des coïncidences balle/raquette,  balle/mur et beep adéquat
  • Lecture de la config de vitesse de balle et application
  • Idem pour les angles de rebonds sur les murs
  • Longueur des raquettes
  • Et la boucle rejoue tout ceci, une fois par image, en mettant à jour la position des raquettes et de la balle avec mémorisation de la sortie + màj du score !
  • Si interception de balle, ajustement de l'angle de renvoi, entre haut et bas de raquette et sur le bord ou le centre de la raquette .

La bibliothèque TVout se charge du protocole de digitalisation des signaux TV. qui est modifié et actualisé ici pour apporter fluidité et éviter le "traînage " des mouvements vifs ... Ce qui assure un certain confort de jeu .

 

Les fichiers de réalisation :

         Tous son inclus dans le zip dans 3 sous-répertoires : réalisation électrique, programmes et mécaniques. J'ai multiplié les formats pour permettre à chacun d'importer ce qui lui va pour le mieux, et de reproduire ce qui l'intéresse assez facilement .

Tv pongTv pong (881.86 Ko)

 

Evolution technique du jeu:

          Comme l'intérêt familial est assez vif, j'envisage d'en faire une version matérielle simplifiée ... Je m'affranchirais de l'Arduino UNO pour mettre sur le circuit imprimé un ATMEGA326 avec les sorties son et vidéo directes sur des CINCH ou sur péritel, simplifiant ainsi énormément le schéma et les connexions ... Donc si vous suivez mes pages, ça devrait évoluer au fil du temps.

Et en fin ...

          J'ai été agréablement surpris de voir l'intérêt qui était porté à ces jeux, chez les jeunes et les moins jeunes; certains le découvrant et d'autres évoquant les souvenirs d'une jeunesse enfouie ... Toujours est-il qu'il est bien agréable de s'affronter devant des images plus sportives que violentes, même si le graphisme n'a rien à voir avec ce qui se fait maintenant . Vite ma DeLorean !

 

 

 

Ajouter un commentaire