Raspberry Pi 4

For information, Recalbox IS NOT compatible with Raspberry Pi 4 yet.
Pour information, Recalbox N'EST PAS encore compatible avec le Raspberry Pi 4.

The Recalbox Team.

Recalbox sur TV CRT en RGB



  • faut me résumer parce que là je ne comprends rien à ce qu'on attend de moi


  • CRT Fan

    Le but est de pouvoir jouer en RGB sur CRT. Je suis branché par HDMI>VGA>PERITEL en sortant du 240p 60hz. Je suis obligé d'éteindre l'overscan et j'ai besoin de mettre des aspect ratio et des positions custom par core pour pouvoir coller à la télé en CRT qui n'accepte pas qu'on sorte de la résolution native des consoles. En 60hz par exemple, elle demande 224 lignes horizontales à la ligne près sinon il y a du tearing. Sur chaque console la résolution est un peu différente, par exemple Atari 2600 et 7800 c'est 210, PC Engine c'est 272... etc... j'ai besoin que chaque émulateur produise sa propre résolution en gros. Quand on produit des fichiers retroarch custom on perd tous les reglages d'autoconfiguration de Recalbox, comme les manettes que dans mon usage j'alterne souvent (stick, bluetooth, fightpad, numérotation des joueurs...). Pour rester dans l'esprit de la configuration de retroarch via recalbox.conf, il faudrait pouvoir en plus du snes.ratio=custom rajouter des variables custom_ratio=1920 240 et position_x_y= 65 10, je pense que l'integer scale est déjà là. Ceci afin d'éviter de bidouiller tous les fichiers cfg un par un, vu le nombre d'émulateurs et le nombre de manettes ça risque d'être un enfer à chaque changement de configuration de jeu (multi, solo etc....). Il y a un deuxième problème c'est Kodi qui a besoin aussi d'une variable kodi.videomode sinon il choisit sa propre résolution arbitrairement... Merci !



  • @archimage c'est un peu confus tout çà, et je crains que tu ne t'emmêles dans tout ce qui est concerné. Ou alors moi qui ne comprend rien.

    Pour ma part je te conseillerais de forcer un view port unique pour chaque jeu et on verra pour ajuster. Pour les ratio gérés par recalbox (et pas retroarch, attention), on n'a que 16/9 16/10 et 4/3 (à mettre tel quel dans recalbox.onf Ca a été amélioré en 4.1). Pour ca, va dans retroarch et cale ton viewport comme il te plait. Le viewport au moins on pourra le fixer pour tout retroarch sans trop de difficultés


  • CRT Fan

    Je ne comprends pas ce qui est confus... Le viewport doit être custom et unique par console. Pour ne pas avoir de tearing j'ai besoin de sortir du 1920x224 pour la snes, du 1920x210 pour atari et 1920x275 pour pc engine, tous recentrés de 60 en y et 5 en x... c'est ma télé CRT via cette installation HDMI>VGA>SCART qui exige ça pour que l'image soit traitée correctement. Comme ça ne correspond pas aux preset par défaut dans recalbox, j(16:9, 4:3...) j'ai mis custom. Sauf qu'il retient un seul ratio custom pour toutes les consoles alors qu'elles sont toutes différentes.. . Si je mets 224 l'atari et la pc engine produisent du tearing.. J'ai cru comprendre qu'il y a deux manières pour forcer un viewport par console, soit mettre "save settings per core", soit charger une "configuration custom" depuis recalbox.conf. A partir de là apparait mon problème de manettes qui ne suivent plus les réglages d'Emulationstation. Je veux enregistrer ces réglages par console, sans perdre l'autoconf des manettes au démarrage des cores de retroarch. D'où ma proposition d'intégrer de nouvelles variables d'autoconf depuis recalbox.conf.



  • @archimage said in Recalbox sur TV CRT en RGB:

    Je veux enregistrer ces réglages par console, sans perdre l'autoconf des manettes au démarrage des cores de retroarch.

    Sans toucher à configgen, c'est impossible, comme te l'a dit @acris Tu veux du custom avec une moulinette automatique par-dessus. L'essence même du custom, ce que l'automatisation ne passe pas par là, et c'est binaire : l'un ou l'autre, pas de mix possible, les cas ambigüs deviennent alors ingérables.

    D'où ma proposition d'intégrer de nouvelles variables d'autoconf depuis recalbox.conf.

    Ce n'est pas ajouter des variables qu'il faut, c'est surtout écrire le code qui le prend en compte dans configgen. Et, en toute honnêteté, tu es bien le premier à pousser la config aussi loin, je ne promets rien sur la prise en compte de tes demandes. Et, sincèrement, ca virerait à l'usine à gaz, ca n'est pas vraiment l'esprit recalbox.

    Pour répondre définitivement à ta question : tu connais Python ? Si oui, tu auras résolu ton problème en 20 minutes


  • CRT Fan

    "Sans toucher à configgen, c'est impossible, comme te l'a dit @acris Tu veux du custom avec une moulinette automatique par-dessus. L'essence même du custom, ce que l'automatisation ne passe pas par là, et c'est binaire : l'un ou l'autre, pas de mix possible, les cas ambigüs deviennent alors ingérables."

    Quand on peut mettre snes.integerscale=on alors que c'est off par défaut, sur tous les autres c'est du custom sur de l'automatisé, ce n'est pas inconcevable de dire que je veux telle résolution pour tel core à partir du moment où on peut déclencher ces variables présentes dans Retroarch.

    Je conçois que ça paraisse compliqué et accessoire. Mais l'enjeu est important, il s'agit d'utiliser correctement l'emulation sur une télé CRT. J'essaie de faire avancer les choses du mieux que je peux. Recalbox doit rester simple je suis d'accord. Mais il gagnerait à pouvoir être utilisé sur un CRT en RGB, le rendu est absolument magnifique, largement supérieur en qualité et en fluidité à ce qu'on sort sur les écrans HD.. il faut le voir en vrai pour le croire... J'ai passé beaucoup de temps à trouver comment sortir depuis le raspberry un signal rgb sans downscaler. C'est déjà un miracle que ce soit possible par cette installation. Cela ouvre beaucoup de possibilités à l'émulation qui tend à se rapprocher du rendu réel des consoles sans shaders ou artifices. Notamment en Arcade. Ce serait dommage que ces barrières de 20 min viennent entraver le résultat. Non malheureusement je ne connais pas Python, j'aurais bien aimé aider plus, mais je ne sais pas programmer. Je vais continuer à essayer de bricoler pour voir ce que je peux trouver de satisfaisant.



  • Parce que certaines options sont gérées, oui, parce qu'on les a prises en compte dans l'automatisme. Ce n'est pas le cas des viewports

    La solution en python je peux te la faire. Elle nécessitera que tu crées un fichier .cfg par émulateur que tu veux reconfigurer, avec simplement les options qui t'intéressent. Après, au lieu de lancer retroarch tout court, je te modifierai ce qu'il faut pour que retroarch cumule le cfg de l'autoconfig + ton custom. quelque chose qu'on a déjà expérimenté pour la 4.1 avec les overlays, donc techniquement ca devrait se faire.

    Ca serait plus simple que tu passes sur IRC si tu veux qu'on fasse ca ensemble, il y a un lien dans la barre en haut

    Pour l'arcade ... yallah ! les resolutions des roms c'est le salon de l'agriculture ma parole !


  • CRT Fan

    ***Pour l'arcade ... yallah ! les resolutions des roms c'est le salon de l'agriculture ma parole !

    Le 240p intéresse pas mal de monde, et on paie des upscalers/downscalers 300 euros pour pouvoir générer cette résolution SD RGB avec des scanline sur HD, sauf que peu de gens savent que c'est possible avec le raspberry nativement directement sur un vieux CRT. Meme des cartes graphiques haut de gamme peuvent ne pas avoir l'option.

    Je te rejoins tout de suite sur irc



  • bon, résolu pour une recalbox 4.0.0-beta4 (marechera sur toute 4.0.0, meme la stable) en bossant de concert avec @archimage en faisant :

    • créer un fichier par systeme dans /recalbox/share/system/configs/retroarch (ex : snes.cfg) avec dedans uniquement les commandes propre au système qu'on (ex : aspect_ratio_index = "22")
    • modifier /usr/lib/python2.7/site-packages/configgen/generators/libretro/libretroGenerator.py pour qu'il ressemble à :
    import Command
    import libretroControllers
    import recalboxFiles
    import libretroConfig
    import shutil
    from generators.Generator import Generator
    import os.path
    
    
    class LibretroGenerator(Generator):
        # Main entry of the module
        # Configure retroarch and return a command
        def generate(self, system, rom, playersControllers):
            # Settings recalbox default config file if no user defined one
            if not system.config['configfile']:
                # Using recalbox config file
                system.config['configfile'] = recalboxFiles.retroarchCustom
                # Create retroarchcustom.cfg if does not exists
                if not os.path.isfile(recalboxFiles.retroarchCustom):
                    shutil.copyfile(recalboxFiles.retroarchCustomOrigin, recalboxFiles.retroarchCustom)
                #  Write controllers configuration files
                libretroControllers.writeControllersConfig(system, playersControllers)
                # Write configuration to retroarchcustom.cfg
                libretroConfig.writeLibretroConfig(system)
    
            # Retroarch core on the filesystem
            retroarchCore = recalboxFiles.retroarchCores + system.config['core'] + recalboxFiles.libretroExt
    
            # the command to run
            customCfg = "/recalbox/share/system/configs/retroarch/{}.cfg".format(system.name)
            if os.path.isfile(customCfg):
                commandArray = [recalboxFiles.retroarchBin, "-L", retroarchCore, "--config", system.config['configfile'], "--append", customCfg, rom]
            else:
                commandArray = [recalboxFiles.retroarchBin, "-L", retroarchCore, "--config", system.config['configfile'], rom]
            return Command.Command(videomode=system.config['videomode'], array=commandArray)
    

    et hop ...


  • CRT Fan

    Merci beaucoup ! La config marche super, c'est plus facile de customiser une bete automatisée de cette manière ! Les resolutions sont parfaites.



  • Bon, après les discussion qu'on a eues sur IRC pour les histoires de résolution, ES et tout ca ... Sachant que tu utilises une résolution particulière saisie dans /boot/config.txt et qu'elle se retrouve en DMT 87, et que tu sais en quelle résolution tu veux ES (CEA 21 HDMI pour l'exemple ici, qui apparait à 2 endroits) voilà les étapes :

    1. éditer recalbox.conf et mettre global.videomode=default (si ca ne marche pas, forcer bêtement le DMT 87 HDMI)
    2. éditer /etc/init.d/S02splash et ajouter tvservice -e "CEA 21 HDMI"entre le start) et la ligne avec fbv
    3. éditer /usr/lib/python2.7/site-packages/configgen/utils/videoMode.py et remplacer dans la dernière ligne tvservice -p par tvservice -e 'CEA 21 HDMI'

    La prochaine étape serait de rajouter ca plus joliment en passant par le recalbox.conf pour ce CEA 21 HDMI. Pas difficile, mais ca nécessite un peu plus de code et donc j'aime autant le tester avant

    Pour ceux qui lisent à titre de curiosité : @archimage veut pouvoir lancer ses émulateurs en 240p (qui est DMT 87 dans son cas, un mode video custom), mais ES est illisible en 240p. Donc on cherche à booter le pi en 240p (je ne détaillerai pas pourquoi, c'est complexe), changer la résolution en CEA 21 (du 576i je crois) pour ES uniquement, lancer un émulateur en 240p, mais quand même revenir en CEA 21 lorsqu'on quitte l'émulateur. Toutes ces options sont axées retroarch, on n'a pas testé quoique ce soit d'autre (encore ?)


  • CRT Fan

    @subs Merci ça marche ! L'emulateur tourne bien en 240p, et Kodi aussi à défaut de pouvoir le lancer en 480i ou 576i, si quelqu'un au passage sait comment forcer Kodi à accepter le mode entrelacé ce serait cool pour pouvoir laisser le 240p uniquement pour l'emulation. Autrement l'autre variante serait de laisser ES et Retroarch en 240p, en fabricant un thème adapté car le mode entrelacé crée un flicker important qu'il est impossible de réduire sur ES.



  • Suite:

    1. éditer /usr/lib/python2.7/site-packages/configgen/utils/videoMode.py pour qu'il ressemble à :
    #!/usr/bin/env python
    import os
    import sys
    import recalboxFiles
    from settings.unixSettings import UnixSettings
    
    # Set a specific video mode
    def setVideoMode(videomode):
        os.system(createVideoModeLine(videomode))
    
    def createVideoModeLine(videoMode):
        return "tvservice -e '{}'".format(videoMode)
    
    # Set a specific video mode
    def isSupported(index, mode="CEA", drive="HDMI"):
       # todo
        return True
    
    # Switch to prefered mode
    def setPreffered():
        recalSettings = UnixSettings(recalboxFiles.recalboxConf)
        esVideoMode = recalSettings.load('system.es.videomode')
        if esVideoMode is None:
            os.system("tvservice -p")
        else:
            os.system("tvservice -e '{}'".format(esVideoMode))
    
    1. Editer /etc/init.d/S31emulationstation (plutot que le S02splash d'avant) pour qu'il ressemble à :
    #!/bin/sh
    #
    #
    
    log=/recalbox/share/system/logs/recalbox.log
    systemsetting="python /usr/lib/python2.7/site-packages/configgen/settings/recalboxSettings.pyc"
    
    case "$1" in
      start)
    	enabled="`$systemsetting  -command load -key system.es.atstartup`"
    	videoMode="`$systemsetting  -command load -key system.es.videomode`"
            if [ "$enabled" != "0" ];then
    		echo $videoMode | grep -qE "(CEA|DMT) [0-9]{1,2} (HDMI|DVI)"
    		[ $? = "0" ] && tvservice -e "$videoMode"
    		settings_lang="`$systemsetting -command load -key system.language`"
            	recallog "starting emulationstation with lang = $settings_lang"
                    command="HOME=/recalbox/share/system LC_ALL=\"${settings_lang}.UTF-8\" SDL_VIDEO_GL_DRIVER=/usr/lib/libGLESv2.so SDL_VIDEO_EGL_DRIVER=/usr/lib/libGLESv2.so SDL_NOMOUSE=1 /usr/bin/emulationstation"
            	recallog "Starting emulationstation with command : "
            	recallog "$command"
            	eval $command >> $log &
    	fi
    	;;
      stop)
    	killall emulationstation
    	;;
      restart|reload)
            "$0" stop
            "$0" start
    	;;
      *)
    	echo "Usage: $0 {start|stop|restart}"
    	exit 1
    esac
    
    exit $?
    
    1. Ajouter system.es.videomode= dans recalbox.conf et remplir comme d'hab avec qqc genre CEA 21 HDMI

  • CRT Fan

    @subs Nickel ! Merci c'est intégré et ça marche bien, il ne reste plus que le thème à refaire, je suis en train de travailler dessus, et Kodi à débloquer en 480i



  • Wow.... Le sujet m'intéresse à fond ! Mais je ne comprends rien... Lol ya moyen d'avoir un résumé pour avoir le rgb sur crt ? Parce que je ne suis pas du tout spécialiste mais l'écran n'est vraiment pas top sur crt et la sortie vidéo de raspberry

    Merci !


  • CRT Fan

    @cyril-wagon Oui, pour résumer tu as besoin d'un convertisseur hdmi>vga avec sortie jack, ainsi qu'un cable vga>péritel auquel tu pourras brancher la sortie audio (ou sur un autre ampli si tu préfères). Ensuite il faut créer un mode d'affichage custom pour sortir du 240p pour les jeux. Le 480i sera préférable pour le moment pour Emulationstation. Nous avons trouvé un moyen de lancer Kodi en 240p en attendant de réussir à le démarrer en 480i. Sache que cette opération est expérimentale, la télé ne doit pas recevoir des résolutions qu'elle ne comprend pas au risque de l'endommager sur le long terme. Par contre le rendu est vraiment magnifique, bien mieux que le composite et le hdmi. Sur mon vieux CRT sony ça pète en tout cas. C'est fluide, les couleurs te sautent aux yeux, et le scanline naturel de la télé fait son travail en 240p. Je ferai un tuto quand tous les tests seront finis. Je suis en train de bosser sur un thème custom CRT 4/3 avec Rockaddicted et sur l'intégration des résolutions avec Substring qui a réalisé les parties citées plus haut.



  • des photos composite vs hdmi vs RGB seraient carrément éloquantes :)


  • CRT Fan

    @subs je n'arrive pas à prendre des photos de mon CRT en évitant les balayages... enplus je n'ai pas le cable composite je l'ai donné... sur youtube on voit pas mal de video montrant la différence entre composite et rgb sur les jeux


  • CRT Maniac

    Si tu regardes du coté des "convertisseurs" Rpi vers JAMMA, tu peux voir que la résolution retenue (non entrelacée) est de 720x240.
    Avoir du 1920x240 est pas forcement utile, sauf si tu n'arrives pas a avoir un résultat satisfaisant en 720x240.

    Je rappelle que le JAMMA est le standard de connecteur arcade entre les PCB (cartes de jeux d'arcade, CPS, MVS...) et le moniteur/manettes des bornes d’arcades. (l'ampli audio étant lui, sur les cartes).

    (Une TV CRT et un moniteur d'arcade étant quasis la même chose) (-> 15Khz).


  • CRT Fan

    @ironic Oui c'est ce que j'ai lu aussi, ce n'est pas forcément utile, je vais faire des tests comparatifs. En fait je me suis mis par défaut sur 1920 car j'ai constaté que la définition était plus nette. Le 720 était plus pixellisé. Dans les deux cas ce n'est pas un format conventionnel, ça nécessite de réajuster sur les outils de calibrage (retroarch et kodi)


Log in to reply
 

Want to support us ?

Join us on :

384
Online

48585
Users

17593
Topics

132545
Posts

Looks like your connection to Recalbox Forum was lost, please wait while we try to reconnect.