2012/07/31

Emulación de Super Nintendo (SNES) en PSP a 100% Full Speed Real

Hay quien todavía piensa que la consola Super Nintendo no puede ser emulada como se merece en la PSP de Sony. Falso. En la red hay mucha información, tanta que desborda, por no hablar de la directamente equivocada o ambigua. En este artículo voy a tratar de poner orden a todo ello y compartir con el lector mi experiencia, esperando que alguien llegue a este rincón y pueda serle de utilidad.

Vaya por delante que soy una persona bastante purista, sin llegar a la locura, pero me gustan las cosas bien hechas. Por eso el tema de la emulación es un quebradero de cabeza para la gente como yo, porque nos negamos a emular chapuceramente cualquier cosa, queremos calidad y fidelidad a los sistemas originales emulados. Cuando he probado un emulador e iba a trompicones, directamente lo eliminaba confiando en que algún día lo pulirían. Así ha sido con muchos de los emuladores para nuestra querida PSP, que han llegado a la perfección en sus últimas versiones, como los de los sistemas CPS1, CPS2, Neo Geo, Megadrive, Turbografx y unos cuantos más. ¡Pero ay la Super Nintendo, esa emblemática consola!

El mejor emulador que había para la Super Nintendo era el Snes9xTYL, un port del famoso Snes9x para nuestras PSPs. La última versión conocida del emulador oficial fue la 0.4.2 y, la verdad y sin ánimo de ofender a nadie ni menospreciar esfuerzos, era una castaña: aceptable para esa gente que se conforma jugando con un frameskip de 3 o más y sólo quiere ver que aparece algo en la pantalla, pero definitivamente patatera para quienes hemos quemado tantas horas con la Super Nintendo original y buscamos una experiencia similar.

Rebuscando a fondo, me di cuenta de que existían varias modificaciones de este emulador, todas basadas en el mismo código y, después de probarlas todas, di con la que era de lejos la mejor. Por tanto, antes de nada, nombremos el emulador que todos necesitáis:

Snes9xTYL mecm, cuya última revisión fue la 091127 (27 de noviembre de 2009).

Cuando descubrí el emulador, como un verdadero tesoro, aún se estaba actualizando, pero el destino quiso que la última release apareciese poco después, con la fecha que os he indicado. Seguí esperando como agua de mayo, pero nada, parecía que el coder detrás del proyecto había pulido el emulador original hasta los límites. Me sorprendió ver que se trataba de un emulador relativamente desconocido, del que nadie hablaba en páginas españolas, y puedo atribuirme el haberlo dado a conocer en Scenebeta, en los comentarios a otra versión del Snes9xTYL llamada Euphoria y aparecida tiempo después.

Lo de esta versión Euphoria merece una mencion aparte: estoy seguro de que su bienintencionado coder desconocía, como casi todos, la existencia de este mecm que os estoy recomendando. El motivo es simple: Euphoria tampoco ha llegado, ni en su última versión de hace ya tiempo, a la calidad del Snes9xTYL mecm, que a todas luces sigue siendo el mejor emulador de Super Nintendo para PSP. Osea, Euphoria ha sido en realidad un proyecto de mejorar algo que ya estaba mejorado.

La última noticia que tuvimos de la emulación de Snes en PSP vino de la mano de una última release, en mi opinión bastante pretenciosa, del Snes9xTYL llamada "Ultimate Snes9xTYL Config", que no era más que la versión mecm con una configuración en teoría optimizada pero bastante mejorable. Bien, perdonad el rollo, pero ya que me pongo con esto quería hacer algo de memoria.

CONFIGURACIÓN OPTIMA PARA CORRER LA MAYORÍA DE JUEGOS A FULL SPEED REAL

En el apartado VIDEO:

Engine: PSP accel. + accur. soft.
Smoothing: yes
Speed limit switch: yes
Speed limit FPS: AUTO (detect PAL/NTSC)
Frameskip: AUTO
Vsync: yes
Render PAL as NTSC: yes
Gamma correction: 0
Show FPS: no

En el apartado SOUND:

Sound mode: emulated, output
Output frequency: 44100Hz
APU Cycles ratio: 100.00%

En el apartado MISC:

Simplemente aseguraos de que el PSP Clockspeed está en 333Mhz.

Ya os dije que soy bastante purista: sonido al máximo, sincronización vertical... ¿y los frames en AUTO? Tranquilos, porque casi todos los juegos os van a correr a full speed.

Entonces, ¿por qué no poner el frameskip directamente en 0?

Muy sencillo: porque hay muchos juegos en Super Nintendo que tienen efectos gráficos especiales, como zooms y demás virguerías que hacía la consola, y entonces los FPS se resienten y el juego va a dos por hora. La buena noticia es que poniendo el Frameskip en AUTO, en estos momentos puntuales el emulador lo aumenta para evitar la pérdida de velocidad, lo cual resulta en una sensación de juego perfecta, y luego los vuelve a dejar en 0 casi todo el tiempo. Tened en cuenta que estos momentos son muy puntuales; en los juegos como Super Mario Kart donde todo el rato hay efectos, debemos aplicar otra configuración como os explicaré luego.

¿Cuál es el error habitual y tentador? Poner el Frameskip directamente en 1, con lo cual no se nota mucho y casi todos los juegos van bien, pero no perfectos. Sin embargo, amigos, un servidor ha probado más de 100 juegos que van a full speed con el Frameskip a 0, de ahí que ponerlo en 1 para evitar las ralentizaciones puntuales es un error y en su lugar hay que usar la mencionada opción AUTO. Ya tenemos nuestro emulador de Super NES a full speed REAL.

NOTA SOBRE LA FRECUENCIA DEL SONIDO Y EL VSYNC: parece cosa de brujería, pero aunque estas dos opciones son reales, es decir, la calidad del sonido varía y la sincronización vertical se nota al estar activada, no afectan para nada a la calidad de la emulación, por eso las dejo activadas y el sonido a máxima calidad. Incluso en el propio emulador (que no deja de ser un port del Snes9xTYL original) se dice del Vsync que debería estar apagado porque se come muchos FPS... falso. ¿Cosa de la GPU? ¿Optimización del código? Ni idea, pero es como os digo.

Si quieres seguir empapándote, lector, ¿cómo he llegado a estas conclusiones? ¿Cómo saber si esta configuración va a funcionar con un juego concreto?

Podéis vosotros mismos poner en "yes" la última opción del apartado VIDEO, la de Show FPS, y comprobar cómo rinde un juego determinado. Los juegos japoneses y americanos, que son los más veloces y fluidos por una historia que alargaría demasiado este artículo, van a un máximo de 60 FPS. Por lo tanto, si ponéis temporalmente el Frameskip en 0 y con la opción Show FPS veis que éstos se mantienen a 60 (e icluso 59 y hasta 58 FPS), sabréis que volviendo a poner luego el Frameskip en AUTO se mantendrá a 0 real y sólo aumentará para evitar los problemas de realentizaciones puntuales. ¡Os vais a sorprender de la inmensa cantidad de juegos que van a full speed con este emulador!

TRUCO 1

¿Se puede hacer algo con juegos que se realentizan un poco, y poniendo el Frameskyp a 0 muestran FPS de 57, 56, 55 o hasta 50?

Sí, ¡pare eso tenemos los juegos PAL! El sistema PAL, osea, cualquier juego que tenga una (E) de Europa al final del título, en vez de una (U) o una (J) de USA y Japón respectivamente, va a un máximo de 50 FPS en vez de 60. Como ya os he dicho, estos juegos son a evitar, puesto que las versiones reales venían de fuera y en la conversión al sistema de televisión europeo perdían velocidad. Pero esa pérdida de velocidad siempre es mejor que un Frameskip de 1 en un juego americano o japonés, y supone una pequeña relajación para nuestro emulador. Un ejemplo de esto es el Donkey Kong Country: así como el 2 y el 3 van sin problemas en NTSC, el primer juego de la saga, curiosamente, se ralentiza hasta los cincuenta y pico FPS. Si en vez de poner el Frameskip en 1 te instalas la versión europea y lo dejas en AUTO, se mantendrá a 49 o 50 frames constantes, ¡esto es el juego tal cual llegó a España! Pero ojo, esto no funciona con todos los juegos: algunos extrañamente, si van algo lentos en su versión NTSC, lo hacen también en PAL, posiblemente porque la conversión original era una chapuza como desgraciadamente solía ocurrir. Es cuestión de probar.

TRUCO 2

¿Qué ocurre con esos juegos que tienen efectos especiales casi todo el tiempo, como el F-Zero o el Super Mario Kart? ¿O con los que, aún sin efectos, van lentos casi todo el tiempo y muestran FPS inferiores a 50?

En ese caso poner el Frameskip en AUTO es un error, porque el emulador lo aumentará y reducirá constantemente, y tendremos una sensación muy desagradable de que a veces todo va fluido y otras como a saltos, y no sólo eso, sino que el emulador tiende a aumentar el Frameskip más de lo necesario cuando va muy justo. En este caso y sólo en éste, es cuando debemos recurrir al Frameskip de 1. El juego irá muy bien, casi perfecto y sólo perderemos un pelín de suavidad, pero la velocidad será constante a más de 50 FPS sin sobresaltos. MUY IMPORTANTE: lo de poner el Frameskip en 1 sólo es recomendable en juegos NTSC, ya que en PAL se empieza a notar demasiado y lastra la experiencia de juego. Por tanto, los juegos PAL son UNICAMENTE para cuando podemos obtener full speed y no tener que poner juegos americanos con Frameskip en 1.

RESUMIENDO:

1- Los juegos preferiblemente siempre en NTSC, de USA o Japón.

2- La inmensa mayoría de juegos con Frameskip en AUTO. Para saber si esto es adecuado, dejáis el frameskip temporalmente en 0, ponéis "yes" en Show FPS y comprobáis que se mantengan en 58-60.

3- Si los FPS bajan de 58 y empezáis a ver 57, 56, 55 y hasta 50, probáis la versión en PAL a ver si se mantiene a 49 o 50 FPS. En ese caso se vuelve a dejar el Frameskip en AUTO.

4- Si también falla el juego PAL o si directamente veíais el juego NTSC a menos de 50 FPS, os quedáis con la versión NTSC pero dejáis configurado el Frameskip en 1.

YA ESTA. Necesita un pelín de dedicación, pero tenéis un emulador de Super Nintendo corriendo a las mil maravillas. Si no queréis liaros, poned la configuración tal y como la he detallado arriba y más del 90% de juegos os correrán a la perfección. Bueno, espero que esta perorata pueda servirle a algún peregrino que acabe en este blog, que por cierto no tiene nada que ver con la emulación. Si es así, me hará mucha ilusión que dejes algún comentario.