Múltiples frecuencias/resoluciones en retropie para raspberry con adaptadores HDMI-VGA-EUROCONECTOR

Introducción

La mayoría de monitores arcade de antaño tenían la misma frecuencia horizontal que un televisor de la época, unos 15.7KHz. Salvo excepciones como Mortal Kombat, la mayoría tenía la misma frecuencia vertical que un televisor System M de EEUU (60 Hz) pero en modo progresivo. Por tanto su resolución vertical se reducía a la mitad de un televisor. Es bien sabido que un televisor con conector SCART (euroconector) es ideal para emularlos ya que la mayoría:

  • Admite entrada RGB compatible a nivel eléctrico con VGA.
  • Admite modo progresivo.

Gracias a esto, excelentes adaptadores como RGB-PI permiten conectar una raspberry pi a un televisor con euroconector y emular fielmente arcades con una latencia muy baja. Para mi desgracia, mi raspberry pi tiene ocupado pines vitales del GPIO con esto. Debido a ello no pude usar adaptadores de ese tipo. No obstante, con un juego de adaptadores HDMI-VGA-SCART conseguí una funcionalidad muy parecida salvo por la latencia. A continuación describo como configuré la distribución retropie de la raspberry pi para conseguirlo.

Establecer el modo de video por defecto

La interfaz de usuario de retropie se visualiza bien en el modo de video PAL-B/G/H/I/N de los televisores europeos. Para que la raspberry seleccione ese modo al arrancar, añade al fichero /boot/config.txt de la raspberry las siguientes líneas:

hdmi_group=1
hdmi_mode=21


Definir un modo de video personalizado

Como se comentó, la mayoría de arcades utilizaban una frecuencia horizontal de 15.7KHz y una frecuencia horizontal de 60Hz en modo progresivo, lo que permite una resolución vertical de unas 240 líneas. Respecto a la resolución horizontal, varía mucho de un arcade a otro. Una solución es usar una resolución horizontal muy alta, por ejemplo 1600 pixels, para que al aplicar un escalado entero se ocupe casi toda la pantalla tal y como se describe aquí. Por desgracia no hay ningún modo HDMI estándar que combine esa combinación de resolución vertical y horizontal, por lo que hay que definir uno personalizado. Para ello añade la siguiente línea al fichero /boot/config.txt de la raspberry:

hdmi_cvt=1600 240 60 1 0 0 0


El primer parámetro (1600) indica la resolución horizontal. Si tu adaptador HDMI-VGA/televisor tiene problemas con esta configuración, prueba a reducirla a 1440.

Configurar el modo de video en los emuladores deseados

Puedes indicar a retropie que cambie a un modo de video específico antes de lanzar un emulador. Al salir del emulador, retropie volverá al modo de video usado en el arranque. Para ello crea el fichero /retropie/opt/retropie/configs/all/videomodes.cfg y edítalo. Por cada emulador que quieras que use un modo distinto al del arranque tendrás que añadir al fichero una línea en la forma siguiente:

<nombre_emulador>=<modo_de_video>


Por ejemplo, si quisieras que el emulador de Amiga lr-puae use el modo de video entrelazado estándar de un televisor System M tendrías que añadir la siguiente línea:

puae="NTSC-4:3"


Para los emuladores arcade es conveniente especificar el modo de video personalizado definido previamente con la cadena "DMT 87". Por ejemplo, mi fichero videomodes.cfg tiene el siguiente contenido:
lr-mame2003="DMT 87"
lr-mame2000="DMT 87"
mame4all="DMT 87"


Configurar emuladores para usar escalado entero

La mejor calidad/fidelidad en la emulación se consigue cuando el emulador aplica un escalado entero a la imagen tal y como se detalla aquí. Si usas el modo de video personalizado para los arcades, el escalado vertical será de 1x, mientras que el horizontal dependerá de la resolución horizontal del arcade a emular y de la resolución de horizontal de nuestro modo de video. Para ocupar la mayor parte de la pantalla, el escalado horizontal deberá aumentarse tanto como sea posible sin exceder la resolución de nuestro modo de video. Por ejemplo, si nuestro modo de video tiene una resolución horizontal de 1600 pixels y se desea emular un arcade de Neo Geo con una resolución horizontal de 304 pixels conviene aplicar un escalado horizontal de 5x (5x304=1520, lo que no supera 1600).

Crear entradas nuevas para arcades con frecuencias/resoluciones especiales

Unos pocos arcades utilizan una frecuencia vertical inferior a 60Hz, lo que les permite aumentar ligeramente la resolución vertical. Por ejemplo Mortal Kombat tiene una frecuencia vertical de 53.20 Hz y visualiza 254 líneas. Si se intentase emular usando escalado entero con el modo de video que hemos definido se perderían. Para evitarlo seguí los siguientes pasos:

  • Añadí una nueva entrada al menú de retropie para cambiar la resolución personalizada al lanzar mame-libretro. Para ello copié el fichero /etc/emulationstation/es_systems.cfg en /opt/retropie/configs/all/emulationstation y añadí al fichero copiado las líneas
    <system>
        <name>mame-libretro-53Hz</name>
        <fullname>Multiple Arcade Machine Emulator</fullname>
        <path>/home/pi/RetroPie/roms/mame-libretro-53Hz</path>
        <extension>.zip .ZIP</extension>
        <command>vcgencmd hdmi_cvt 1600 288 53.204948 1 0 0 0;tvservice -e "DMT 87";sleep 0.5;fbset -depth 8 && fbset -depth 16;/opt/retropie/supplementary/runcommand/runcommand.sh 0 _SYS_ mame-libretro %ROM%</command>
        <platform>arcade</platform>
        <theme>mame</theme>
      </system>

    justo antes de la línea
    </systemList>

    Cuando se seleccione un juego de esta entrada se redifinirá el modo de video personalizado antes de lanzar el emulador.
  • Cree la carpeta /retropie/home/pi/RetroPie/roms/mame-libretro-53Hz/mame2003/ y metí allí los ficheros de ROM de los arcades que quería emular con esa resolución/frecuencia en ese emulador.
  • Para que al salir del emulador se redefiniese la resolución del modo personalizado a la que tenía originalmente cree el fichero /retropie/opt/retropie/configs/all/runcommand-onend.sh con el siguiente contenido:
    vcgencmd hdmi_cvt 1600 240 60 1 0 0 0

  • Añadí permisos de ejecución a dicho fichero ejecutando lo siguiente:
    chmod a+x runcommand-onend.sh

  • Reinicié la raspberry pi.
Creo que habia un hilo del hdmi vga en la Pi, buena la informacion

Sobre la latencia, en un principio no deverias tener por el conversor si usas uno pasivo
Muy interesante. Gracias por la info.
2 respuestas