まこと の ブログ

MaKoTo no burogu — Journal de bord…

Aller au contenu | Aller au menu | Aller à la recherche

Une Borne d'Arcade maison -3-

Suite de l'étude précédente :
>>Sommaire ici !<<

Méthode N°1

[validée sur Ubuntu 10.04LTS]

Introduction :

On va s'intéresser brièvement aux différences entre Téléviseur et Moniteur informatique cathodique.

  • Un téléviseur PAL affiche 25 images par secondes en 625 lignes horizontales, balayées à 15,625kHz par un point lumineux en deux temps : les lignes impaires puis les lignes paires, donc 50 demi-images qu'on dit entrelacées à 50Hz.

La résolution réelle maximale de l'image atteint 768 points de large × 576 lignes de haut. (noté 576i)

  • L'écran informatique affiche des images progressives (images complètes, pas d'entrelacement), fabriquées par une synchro verticale + une horizontale à des résolutions et des fréquences très élevées, permettant de travailler agréablement à faible distance de l'écran.

Par exemple mon tube 17 pouces IIyama A705MT indique comme caractéristiques une plage de Synchro Horizontale de 30 à 86kHz et Verticale de 50 à 180Hz permettant d'afficher par exemple 1024 points x 768 points @85Hz.
L'écran informatique est donc désigné 30kHz.

Ce qu'il fallait démontrer, c'est que la carte graphique de l'ordinateur est conçue pour sortir ces 30kHz, ce qui la rend en l'état, incompatible avec les téléviseurs 15kHz.
Battu ? On abandonne ?
Meuhh non, Xorg est là, paramétrable à souhait !

1 - L'adaptateur Péritel/VGA :

Moyennant une adaptation, on va exploiter les signaux Rouge, Vert, Bleu et les Synchro sortants de la prise VGA de la carte vidéo à destination de l'entrée péritel du TV, Xorg s'occupant de balancer cela en 15kHz.
L'adaptateur doit faire correspondre ces N° de pattes :

      Prise VGA                —        Prise Péritel

Pin N°1: Vidéo Rouge           —     Pin N°15: Rouge
Pin N°2: Vidéo Vert            —     Pin N°11: Vert
Pin N°3: Vidéo Bleu            —     Pin N°7:  Bleu
Pin N°6: Retour rouge          —     Pin N°13: Masse Rouge
Pin N°7: Retour vert           —     Pin N°9:  Masse Verte
Pin N°8: Retour bleu           —     Pin N°5:  Masse Bleue
Pin N°9: +5 V                  —     Pin N°8:  SWITCH
Pin N°10: Masse                —     Pin N°17: Masse Synchro
Pin N°13: HSync et N°14: VSync —     Pin N°20: Synchro.

Ajouter une résistance de 75 Ohms entre la Pin 8 et 16 de la prise péritel, permet, grâce au 5V en provenance de la carte vidéo, de basculer le TV en RVB sur l'entrée AV.

dsc07537.jpg

dsc07536.jpg dsc07535.jpg

Plus d'informations sur la page AdvanceMAME




2 - Paramétrage d'Xorg pour le TV :

  • Sur Ubuntu 10.04LTS, la carte vidéo ATI Radeon 9200 est automatiquement exploitée par un pilote libre, donc rien à installer.

Cela fait aussi quelques temps que le fichier de configuration /etc/X11/xorg.conf n'est plus utilisé pour la configuration du pilote par le système, mais il peut toujours être utilisé par nous autres humains, pour amender la configuration par défaut et ainsi adapter l'affichage à nos besoins.

Ainsi on va devoir y spécifier les sections élémentaires que sont Section "Device", Section "Monitor", et Section "Screen", avec des modificateurs pour l'utilisation du Téléviseur :

### spécifie un nom de carte vidéo (à définir) et le nom du pilote.
Section "Device"
    Identifier  "ATI"
    Driver      "radeon"
EndSection

### spécifie le nom de l'appareil (à définir), les fréquences de balayage et de synchro du TV, ainsi que le modeline 15kHz.
Section "Monitor"
        Identifier   "TV"
## Idéalement ces valeurs  :
#    HorizSync    15.625
#    VertRefresh  50.0
## mais on peut mettre une plage plus souple pour s'adapter au modèle de TV dont on dispose :
        HorizSync    15.0 - 20.0
        VertRefresh  50.0 - 60.0
## le modeline TV @15kHz
    # 720x576x50.00 @ 15.625kHz
    Modeline "720x288x50.08"  13.875000  720 744 808 888  288 293 296 312  -HSync -VSync
EndSection

### Rappel des noms précédents et du mode dans lequel on veut fonctionner.
Section "Screen"
    Identifier "Default Screen"
    Device     "ATI"
    Monitor    "TV"
    DefaultDepth     24
    SubSection "Display"
    Depth     24
    Modes    "720x288x50.08"
    EndSubSection
EndSection


  • Pour calculer le modeline, j'ai utilisé lrmc, un petit soft réservé à cet usage !

- Télécharger et extraire les sources de lrmc, puis se rendre à l'emplacement des sources :

cd /home/makoto/Download/lrmc-0.9.2

- Configurer les sources :

./configure

- Fabriquer le binaire :

make

- Installer le binaire :

sudo make install

- Générer un packet .deb d'installation (optionnel, je l'ai fait pour le mettre à disposition en annexes[1])

sudo checkinstall


Ainsi, La commande suivante va générer le modeline pour une image 720x576@50Hz PAL :

lrmc 720 576 50 -pal

Il suffit alors de copier le résultat dans xorg.conf, comme on viens de le voir.

  • Cependant, la résolution que donne ce modeline n'est pas entrelacée mais progressive.

En effet, j'aurais dû utiliser cette commande :

lrmc 720 576 60 -pal -i

Qui donne :

# 720x576x60.00 @ 15.625kHz
Modeline "720x576x25.00" 13.875000 720 744 808 888 576 586 592 625 -HSync -VSync interlace

Mais elle ne fonctionne pas.
La différence essentielle, c'est qu'en entrelacé j'aurais dû avoir réellement 720x576, alors que je me retrouve avec 720x288 en progressif.
Après quelques recherches, il s'avère simplement que le pilote libre radeon n'est pas capable de générer un signal entrelacé à la sortie de la carte vidéo…
À défaut de tester avec le pilote propriétaire, je verrais ce qu'il en est pour les cartes nVidia.

Vous l'aurez compris, il y a pas mal d'essais à faire avant de trouver le modeline qui fonctionnera le mieux avec le couple téléviseur et carte graphique en cause.
Mais attention, DANGER !!

  • Chaque essais infructueux est un risque d'endommager le téléviseur qui n'est pas prévu pour supporter des fréquences hors normes, il faut donc être très bref lors des tests, si aucune image ne s'affiche.
  • Chose importante également, une fois ce fichier xorg.conf mis en place IL NE FAUT PAS allumer le TV durant le démarrage de l'ordinateur, ni tenter de passer en console tty.

Et oui, la carte vidéo continue d'envoyer du 30kHz en permanence, et donc durant le boot de l'ordi ou en tty… Ce n'est qu'une fois qu'X est lancé que du 15kHz est envoyé.

  • Et vice-versa, quand X est lancé, il ne faut pas brancher de moniteur informatique.

Vu comme ça, ça complique un peu les tests, mais Ubuntu est une chose bien faite et on va pouvoir modifier la configuration d'xorg grâce à un second ordinateur via ssh ou en partage de bureau à distance.

3 - Installation d'AdvanceMAME :

Sur la page de téléchargement, prendre la dernière version des sources d'AdvanceMAME en date (11/01/2009)
- Extraire les sources et se rendre à leurs emplacements :

cd /home/makoto/Download/AdvanceMame/advancemame-0.106.1

Le fichier BUILD nous indique de quoi on aura besoin, à savoir les compilateur suivants :

- GNU gcc C/C++ 3.2.3 or 3.3.4 (or newer)
- GNU make 3.79.1 (or newer)

Et les sources des logiciels suivant :

- NASM 0.98.33 (or newer) [edit : suite à des pb de son et d'affichage, ne pas mettre ce composant]
- SVGALIB 1.9.14 (or newer)
- SDL 1.2.4 (or newer)
- S-Lang 1.4.3 (or newer)
- ncurses 5.4 (or newer)
- FreeType 2.1.7 (or newer)
- zlib 1.1.4 (or newer)
- expat 1.95.6 (or newer)

J'ai donc ajouté libsdl1.2-dev, libslang2-dev, libncurses5-dev, libfreetype6-dev, zlib1g-dev et libexpat1-dev.

sudo apt-get install libsdl1.2-dev libslang2-dev libncurses5-dev libfreetype6-dev zlib1g-dev libexpat1-dev

À noter que la version de libsvga1-dev, est incompatible avec AdvanceMAME, mais on s'en passera.
S'il manque certains éléments, des fonctionnalités d'AdvanceMAME ne fonctionneront pas; ici, l'affichage des jeux par le driver SVGA ne fonctionnera pas, mais heureusement SDL prendra la relève.

Quand tout est prêt on peut lancer :

./configure

À la fin, un résumé des opérations est affiché, indiquant si toutes les dépendances indiquées par BUILD sont satisfaites. Si tel n'est pas le cas, il est temps d'y remédier en cherchant et ajoutant via synaptic, les versions DEV, par exemple libsdl1.2-dev si sdl n'est pas indiqué en face de Video, Sound, Keyboard, Joystick et Mouse.
puis relancer ./configure jusqu'à obtenir quelque chose de quasi parfait, comme ça :

== Host ==
Environment : i686-pc-linux-gnu
Endianess : little
Bits : 32
Assembler for Pentium : no
Assembler MIPS3 emulator for Pentium : no

== Drivers/Libraries ==
Video : fb slang ncurses sdl
Sound : alsa oss sdl
Keyboard : sdl raw event
Joystick : sdl raw event
Mouse : sdl raw event
Misc : zlib expat pthread freetype2

== Compiler ==
CC : gcc
CXX : g++
CFLAGS : -march=native -O2 -fomit-frame-pointer -fno-merge-constants -Wall -Wno-sign-compare -Wno-unused
LDFLAGS : -s

== Configuration ==
Emulator : mame
Debugger : no

Bien, il ne devrait plus y avoir d'obstacle au bon déroulement des prochaines opérations, on peut donc fabriquer le binaire :

make

Puis l'installer :

sudo make install



4 - Installation d'AdvanceMENU :


Une fois les deux logiciels installés, on retrouve les binaires dans /usr/local/bin :

advmame - The AdvanceMAME emulator.
advmenu
advcfg - The automatic video configurator.
advv - The manual video configurator and tester.
advm - The mouse tester.
advk - The keyboard tester.
advs - The sound tester.
advj - The joystick tester.


Il est temps de jouer : !!


Au premier lancement de l'émulateur,

advmame

Le fichier de configuration est crée

Creating a standard configuration file...
Configuration file `/home/makoto/.advance/advmame.rc' created with all the default options.

The default rom search path is `/home/makoto/.advance/rom:/usr/local/share/advance/rom'.
You can change it using the `dir_rom' option in the configuration file.

Idem, au premier lancement du menu,

advmenu

Le fichier de configuration est crée

Creating a standard configuration file...
Adding emulator `advmame'...
Configuration file `/home/makoto/.advance/advmenu.rc' created with all the default options.

Ce sont ces fichiers advmame.rc et advmenu.rc qui vont être édités manuellement pour peaufiner les réglages.
Tout est documenté dans de dossier /usr/local/share/doc/advance ou depuis les sources /home/makoto/Download/AdvanceMame/advancemame-0.106.1/doc ou encore, sur le site du projet AdvanceMAME.

  • advmame.rc

device_sound sdl [car je n'avais pas de son dans les jeux]
device_video auto [en fait c'est sdl qui est utilisé, donc on pourrait le forcer]
display_resize no [pas besoin d'étirer l'image, puisqu'ils sont lancés dans leurs résolutions natives]
display_resizeeffect no [idem]
display_rgbeffect none [on veut se rapprocher du rendu Arcade, donc besoin de rien]

  • advmenu.rc

device_sound sdl [car advmenu freezait sans raison]
sound_backgroud_loop none [pour virer le mp3 de feu qui crépite tiré de DukeNukem3D]
device_joystick auto [pour se passer du clavier lors de la sélection et lancement des jeux]
device_video_output fullscreen [pour lancer advmenu en plein écran]

Bref, pour jouer il suffit de copier des jeux dans le dossier /home/makoto/.advance/rom, puis de taper :

advmame NomDuJeux

Ou alors, pour accéder au menu graphique, suffit de lancer la commande :

advmenu

Ou de créer un lanceur sur le bureau.

Conclusions : !!

  • Cette solution est simple et rapide à mettre en place.
  • On peut tout à fait jouer sur son écran l'ordi en sautant l'étape de modif d'Xorg.
  • N'importe quelle manette USB fait l'affaire, pas testé de manette sur le port Midi.
  • À savoir ! Le pilote libre ATI ne gère pas l'entrelacé, donc aucun modelines entrelacés ne sera reconnu par X. Le pilote propriétaire ATI Catalyst ne supporte plus les cartes radeon 9200, rien ne sert de s'escrimer à l'installer, ça ne fonctionnera pas !
  • Lors de la mise en place dans une borne, il faudra ajouter un circuit électronique pour protéger l'écran TV du 30kHz envoyé par la carte vidéo lors des phases de démarrage et d'arrêt de la borne.
  • À savoir qu'une solution similaire existe sous Windows® avec soft15kHz.


À suivre…

Note

[1] voir ci-dessous

Commentaires

1. Le mardi, 27 décembre 2011, 20:37 par Dominique

Pensez-vous que cela soit une bonne idée de mélanger directement les 2 synchros ?
Voir ici comment mélanger proprement H et V à l'aide d'un transistor pour obtenir de la synchro composite:
http://www.raphnet.net/electronique...
Cela n’endommagera pas la carte.

2. Le jeudi, 29 décembre 2011, 09:44 par MaKoTo

Mélanger directement les 2 synchros ne pose pas de problème particulier pendant la durée des tests.
Ensuite effectivement on peut opter pour un circuit plus élaboré, comme chez l'excellent raphnet, ou encore http://burogu.makotoworkshop.org/in...