Abonnement aux commentaires

S'abonner pour recevoir les commentaires suivants par email

まこと の ブログ

MaKoTo no burogu — Journal de bord…

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

Une Borne d'Arcade maison -5-

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

Synthèse des tests sur mes cartes graphiques AGP en 15kHz :

- ATI Technologies Inc RV280 [Radeon 9200 PRO] (rev 01)
- nVidia Corporation NV11 [GeForce2 MX/MX 400] (rev b2)
- nVidia Corporation NV44A [GeForce 6200] (rev a1)
- Matrox Graphics, Inc. MGA G400/G450 (rev 85)

                       |  Windows®  | Gnu/Linux  |  Gnu/Linux
                       | Soft 15kHz |    Xorg    | FrameBuffer
————————————————————————————————————————————————————————————————
ATI Radeon 9200        |     OK     |     OK     |     OK
nVidia Geforce 2 MX400 |     OK     |     OK     |     OK
nVidia Geforce 6200    | Écran Noir | Écran Noir |     NON
Matrox G450            |     NON    |     NON    |     OK

Et oui, dans un soucis d'exhaustivité, j'ai commis le sacrilège installer un Windows® pour essayer ''Soft15KHz''… j'avais oublié à quel point c'était merdique à utiliser…

À la vue de cette synthèse on conclue que la majorité des cartes graphiques sont configurables pour accepter des modelines@15KHz en utilisant le Frame Buffer, et qu'avec Xorg ou Windows®, cette possibilité est plus rare !
En fait, cette capacité dépend directement du pilote de la carte graphique (le libre ou le propriétaire), qui dicte au système de fenêtrage quoi faire : entrelacé, pas entrelacé, fréquences hautes, basses, etc.

Méthode N°1+2

[validée sur Ubuntu 10.04LTS]

Introduction :

N'étant pas du genre à lâcher l'affaire si facilement, et à force de chercher comment faire fonctionner la Matrox G450 @15KHz sur Xorg, j'ai fini par trouver quelqu'un qui évoque le fait d'avoir toujours utilisé le driver fb par dessus Xorg pour utiliser sa carte sur un TV…

I'm running my Mythtv PC with a G400 Max, which connects to the Pal TV via a homebrew VGA-Scart cable. X is running over the framebuffer device. That worked very well for more than three years.%%

de quoi pardon ???… hum X_0;

Après renseignements et expérimentations, il est en effet encore possible d'exploiter ce mode obsolète et oublié.

1 - FBDev, le driver Frame Buffer pour Xorg :

On sait qu'il existe différentes méthodes pour afficher une image par dessus la console :

- svgalib [1] et Frame Buffer qui sont eux-mêmes des drivers. (radeonfb pour radeon, matroxfb pour matrox…)
- Xorg qui est un serveur graphique qui utilise des drivers. (mga pour matrox, nv pour nVidia libre, nvidia pour nVidia proprio, radeon pour ATI libre…)

Ce qui fait défaut dans mon cas, c'est que je ne parviens pas à afficher une image @15KHz via les modelines dans xorg.conf avec le driver mga.
Comme cette carte matrox est supportée par le driver Frame Buffer, on va utiliser le driver fbdev pour X à la place de mga

Ce qui revient à dire que même si une carte graphique ne possède pas de drivers pour Xorg, on peut utiliser le Frame Buffer par dessus X pour afficher une image !

2 - Activation du Frame Buffer :

  • Éditer /etc/default/grub

modifier la ligne suivante :

GRUB_CMDLINE_LINUX_DEFAULT="quiet splash nomodeset video=matroxfb"

Et pour prendre en compte les changements, lancer :

sudo update-grub

Par défaut, matroxfb est blacklisté dans le fichier /etc/modprobe.d/blacklist-framebuffer.conf

  • Il faut donc l'éditer et commenter ou supprimer la ligne :

#blacklist matroxfb_base

Après avoir redémarré l'ordi… Une petite vérification :

lsmod |grep fb

fbcon 35102 72
tileblit 1999 1 fbcon
font 7557 1 fbcon
bitblit 4707 1 fbcon
vga16fb 11385 0
vgastate 8961 1 vga16fb
matroxfb_base 21758 2
matroxfb_DAC1064 10048 1 matroxfb_base
matroxfb_accel 3862 1 matroxfb_base
matroxfb_Ti3026 4798 1 matroxfb_base
matroxfb_g450 5450 1 matroxfb_base
g450_pll 5198 2 matroxfb_DAC1064,matroxfb_g450
matroxfb_misc 7601 5 matroxfb_base,matroxfb_DAC1064,matroxfb_Ti3026,matroxfb_g450,g450_pll


3 - Tests du driver FBDev :

Créer le fichier /etc/X11/xorg.conf, le renseigner des lignes suivantes et relancer X :

Section "Device"
    Identifier  "Primary Card"
    Option      "UseFBDev"      "true"
    Driver      "fbdev"
EndSection

Ce qui devrait avoir comme conséquence d'afficher le bureau en 640x480 en couleurs 8 bits.
Un petit coup d'oeil au log :

cat /var/log/Xorg.0.log|grep fbdev

(II) LoadModule: "fbdev"
(II) Loading /usr/lib/xorg/modules/drivers/fbdev_drv.so
(II) Module fbdev: vendor="X.Org Foundation"
(II) FBDEV: driver for framebuffer: fbdev
(II) Loading sub module "fbdevhw"
(II) LoadModule: "fbdevhw"
(II) Loading /usr/lib/xorg/modules/linux/libfbdevhw.so
(II) Module fbdevhw: vendor="X.Org Foundation"

Le module est bien chargé par Linux !
Attention c'est sensible à la casse, on va donc faire aussi :

cat /var/log/Xorg.0.log|grep FBDEV

(II) FBDEV: driver for framebuffer: fbdev
(**) FBDEV(0): claimed PCI slot 1@0:0:0
(II) FBDEV(0): using default device
(II) FBDEV(0): Creating default Display subsection in Screen section
(==) FBDEV(0): Depth 8, (==) framebuffer bpp 8
(==) FBDEV(0): Default visual is PseudoColor
(==) FBDEV(0): Using gamma correction (1.0, 1.0, 1.0)
(II) FBDEV(0): hardware: MATROX (video memory: 16384kB)
(II) FBDEV(0): checking modes against framebuffer device...
(II) FBDEV(0): checking modes against monitor...
(--) FBDEV(0): Virtual size is 640x480 (pitch 640)
(**) FBDEV(0): Built-in mode "current": 25.2 MHz, 31.5 kHz, 59.9 Hz
(II) FBDEV(0): Modeline "current"x0.0 25.18 640 656 752 800 480 490 492 525 +hsync -vsync -csync (31.5 kHz)
(==) FBDEV(0): DPI set to (96, 96)
(**) FBDEV(0): using shadow framebuffer
(==) FBDEV(0): Backing store disabled
(==) FBDEV(0): DPMS enabled

Haa ça cause plus déjà :
On constate que le modeline «current» a été généré.
Comme on va enrichir xorg.conf, la difficulté étant d'aligner les bon arguments, on peut donc s'inspirer de ces informations pour tenter d'augmenter la résolution de l'affichage et la profondeur de couleur;

  • Mais d'abord on va juste entrer les paramètres pour obtenir la même config,

On va donc rajouter ceci à xorg.conf :

Section "Screen"
    Identifier "Default Screen"
    Device      "Primary Card"
    Monitor     "ecranPC"
    Subsection "Display"
    Depth     8
        Modes      "TEST"
    EndSubsection
EndSection

Section "Monitor"
        Identifier   "ecranPC"
### mods OK déduit a partir du log xorg
    Modeline "TEST"   25.18  640 656 752 800  480 490 492 525 +hsync -vsync
EndSection

Redémarrage de X, et hop !

(II) FBDEV: driver for framebuffer: fbdev
(**) FBDEV(0): claimed PCI slot 1@0:0:0
(II) FBDEV(0): using default device
(**) FBDEV(0): Depth 8, (==) framebuffer bpp 8
(==) FBDEV(0): RGB weight 565
(==) FBDEV(0): Default visual is TrueColor
(==) FBDEV(0): Using gamma correction (1.0, 1.0, 1.0)
(II) FBDEV(0): hardware: MATROX (video memory: 16384kB)
(II) FBDEV(0): checking modes against framebuffer device...
(II) FBDEV(0): mode "TEST" ok
(II) FBDEV(0): checking modes against monitor...
(--) FBDEV(0): Virtual size is 640x480 (pitch 640)
(**) FBDEV(0): Mode "TEST": 25.2 MHz (scaled from 0.0 MHz), 31.5 kHz, 60.0 Hz
(II) FBDEV(0): Modeline "TEST"x0.0 25.18 640 656 752 800 480 490 492 525 +hsync -vsync (31.5 kHz)
(==) FBDEV(0): DPI set to (96, 96)
(**) FBDEV(0): using shadow framebuffer
(==) FBDEV(0): Backing store disabled
(==) FBDEV(0): DPMS enabled

Ça marche !!
Petite vérification/astuce, la commande suivante donne la config actuelle :

fbset -x

#Mode "640x480"
# D: 25.176 MHz, H: 31.469 kHz, V: 59.942 Hz
DotClock 25.177
HTimings 640 656 752 800
VTimings 480 490 492 525
Flags "+HSync" "-VSync" # Warning: XFree86 doesn't support accel


  • Maintenant on va augmenter la résolution et la profondeur de couleur.

Grâce au résultat du calculateur de modelines, copié dans la section ''Monitor" :

lrmc 1024 768 60 -multi

# 1024x768x60.00 @ 50.400kHz
Modeline "1024x768x60.00" 64.512000 1024 1048 1200 1280 768 774 778 840 -HSync +VSync

On modifie aussi la section Screen en ajoutant :

    DefaultDepth     16
    Subsection "Display"
    Depth     16
        Modes       "1024x768x60.00" "TEST"
    EndSubsection

Relance de X… Et dans les «Préférences de l'écran», je retrouve mes deux résolutions 640x480 et 1024x768 !
Gagné !
Bien, bah yapluka modifier tout ça pour affichage sur la télévision…

4 - Configuration de xorg.conf pour affichage sur l'écran de TV :

J'ai utilisé un modeline fabriqué et testé grâce à advv[2], qu'on retrouve dans le fichier advmame.rc

  • Voici le fichier complet /etc/X11/xorg.conf :
Section "Device"
        Identifier  "Matrox"
        Option      "UseFBDev"      "true"
        Driver       "fbdev"
EndSection
 
Section "Screen"
        Identifier "Default Screen"
        Device      "Matrox"
        Monitor     "TV"
        DefaultDepth     16
        Subsection "Display"
                Depth     16
                Modes       "MATROX_768x244p"
        EndSubsection
EndSection
 
Section "Monitor"
        Identifier   "TV"
        Modeline "MATROX_768x244p" 17.152 768 840 920 1072 244 247 250 266 +hsync +vsync
EndSection

Reste à relancer X et brancher la TV sur la carte vidéo ^__^

Conclusion :

  • On utilise alors advmame pour jouer dans X (donc via sdl compilé dans advmame avec commutation de l'affichage correct et automatique des jeux) grâce au Frame Buffer… Étonnant non ?!!!
  • Là ou Windows® et Soft15kHz ne pourront rien pour vous, Gnu/Linux propose une méthode hybride qui aura le mérite d'élargir considérablement la liste des cartes vidéos supportées !


Remarque importante !
Il faut impérativement passer en couleur 16bits, car en 8bits, SDL renverra une erreur et il sera impossible de lancer le moindre jeux…

AdvanceMAME - Copyright (C) 1999-2003 by Andrea Mazzoleni
MAME - Copyright (C) 1997-2003 by Nicola Salmoria and the MAME Team
Unable to create the SDL overlay.
video_init failed


À suivre…

Ressources :
http://www.lea-linux.org/documentations/index.php/X_Window
http://casteyde.christian.free.fr/system/linux/guide/online/x12064.html
http://elinux.org/BeagleBoardDebian#Xorg_omapfb_Drivers
http://www.faqs.org/docs/Linux-HOWTO/Framebuffer-HOWTO.html#s17
http://tldp.org/HOWTO/Framebuffer-HOWTO/
http://gate.crashing.org/doc/ppc/doc027.htm#s5.2

Notes

[1] la version disponible dans Ubuntu 1.4.3 est trop ancienne pour AdvanceMame, et je n'ai pas réussit à compiler de version plus récente 1.9.x

[2] voir methode N°2

Ajouter un commentaire

Les commentaires peuvent être formatés en utilisant une syntaxe wiki simplifiée.

Fil des commentaires de ce billet