NES Mini Optimizada
Compartir en Facebook Compartir en Twitter Compartir en Whatsapp

NES Mini Optimizada

publicado el 06-12-2018 20:58:17

En el anterior artículo os expliqué como montar una Nes Mini Casera con una carcasa de RetroFlag y una Raspberry Pi, en mi caso lo hice con una Raspberry 2, aunque es recomendable hacerlo con una 3 o una 3 B+.

También os comentaba, en la opinión final, si merecía la pena o no. Siendo para mí este el punto más conflictivo, dado que AttractMode para Raspberry no está nada optimizado y el tema de NES mini que hizo Davbarc tampoco lo está, dando como resultado un menú de selección de juegos que se arrastra y se hace imposible utilizarlo.

Es por ello que me decidí a meterle mano al sistema para tratar de optimizarlo y que fuese totalmente funcional en una Raspberry Pi 2. Te comento lo que hice y el gran resultado obtenido.

Código del Tema

Lo primero a tener en cuenta son las propias limitaciones del hardware, la Raspberry es lo que es y tenemos que ajustarnos al hard que tenemos. Es decir cuanto menos trabajo le demos mejor.

Me puse a mirar el código fuente del tema que hizo Davbarc, que fue un gran trabajo, pero la verdad que el código y los archivos que utiliza no estaban nada optimizados y se ve que hizo el tema pensando más en un PC que en una Raspberry.

Una de las cosas que más me llamó la atención es que trabajaba todo a 1080p y que las imágenes tenían una resolución mucho mayor que la que se mostraba en pantalla, con esto me entraba la duda, ¿porqué, en un tema que son todo elementos pixelados, usa tanta resolución? Probé a bajar la resolución de la propia raspberry de 1080p a 720p, y aunque seguía funcionando muy mal, se notaba algo de mejora.

Decídi entonces rehacer el tema al completo en una resolución nativa de 720p, ajustando tamaños de las imágenes (ya que el tema original los reescalaba en la Raspberry) y bajando un poco la calidad sin que llegase a notarse, así libraba a la raspberry de trabajo innecesario. El resultado, la cosa ya empezaba a moverse algo más fluida, pero aún petardeaba un poco.

Como último paso, decidí modificar el propio código del tema, quitando código innecesario y optimizando todo lo posible. Al ejecutarlo en la Raspberry ¡que grata sorpresa! ya iba todo muchísimo mejor, ahora te podías mover libremente por el menú sin ningún problema, de vez en cuando algún parón de un par de segundos, pero nada preocupante, teniendo en cuenta que la SD utilizada era de clase 4.

Menú del tema después de la optimización
Menú del tema después de la optimización

Empezando desde cero

Quería que el tema fuese perfecto y el reescalado que hice para probar si funcionaba se notaba, es por ello que me puse manos a la obra en empezar el tema desde cero, sabiendo ahora que iba a funcionar correctamente y sin ralentizaciones.

Redibujé cada una de las imágenes del tema pixel a pixel en resolución 720p y con su tamaño real en pantalla. Aproveché también para descargar las carátulas y los snaps de cada juego en alta resolución (en el tema original faltaban algunos) y reescalarlos al tamaño real de pantalla.

Aproveché también para hacer que el tema se pareciese aún más al original de Nintendo y modifique un poco alguna de las imágenes del tema de Davbarc que no me convencían. Además también puse una pantalla de boot, para cuando arranque la raspi y una pantalla de carga para que se muestre al ejecutar un juego y un beezel para que adorne la pantalla al jugar.

Pantallas creadas para la Nes Mini Casera optimizada
Pantallas Nes Mini Casera optimizada

Corregí además el icono del número de jugadores de cada juego, que en la imagen bajada por Internet no funcionaba y siempre mostraba 1P, ahora ya muestra los distintos jugadores, siendo posible entre 1P, 2P, 3P, 4P y 4+.

Para terminar con las modificaciones, puse todos los textos en castellano, así como la mayoría de las descripciones de los juegos, aquí ya fui un poco más vago y utilicé un scrapper para conseguirlas.

Con todo el tema preparado, me puse manos a la obra creando la SD. La imagen de la SD que anda circulando por Internet, está muy desfasada y prefería hacer una desde cero con sistema operativo y AtrractMode actualizados a las últimas versiones, además haciendo esto, aseguro compatibilidad con las Raspberrys 3B+, que necesitan de la version Stretch de Raspbian para funcionar.

Descargué la imagen de Retropie 4.4, la última disponible en el momento de escribir este artículo, y la quemé en la SD.

Arrancamos la Raspberry con el retropie y el mando que vayamos a utilizar conectado, ya que nos pedirá configurarlo y esta configuración será la que quedará después grabada.

Salimos de EmulationStation para ir al terminal y ahi configuramos la IP y el servidor SSH para poder conectarnos en remoto y no tener que hacer todo en la propia Raspberry. Primero ponemos una ip fija o por DHCP, yo la utilizaré fija, para ello hacemos lo siguiente:

sudo nano /etc/dhcpcd.conf
interface eth0
static ip_address=x.x.x.x
static routers=x.x.x.x
static domain_name_servers=x.x.x.x

Ahora toca el turno de activar el servido SSH, para ello ejecutamos la utilidad de configuración de la Raspberry:

sudo raspi-config

Reiniciamos la placa.

A partir de aquí nos conectaremos en remoto, paso a actualizar el sistema con:

sudo apt-get update
sudo apt-get upgrade
sudo rpi-update
sudo reboot

Tras el nuevo reinicio, volvemos a entrar en la aplicación de configuración, ya que retropie ahora mismo habrá dejado de arrancar. Activamos la siguiente opción:

Select Boot Options > B1 (Desktopp/CLI) > B2 (Console Autologin)

Aprovechamos si queremos para activar el overclock de la raspi, en el caso del modelo 2 bastante recomendable. Después de esto, reiniciamos de nuevo la Raspberry.

Vamos ahora a instalar y compilar todo lo necesario para poder ejecutar AttractMode en su última versión, a fecha de hoy, dicha versión es la 2.51. Primero las dependencias:

sudo apt-get install cmake libflac-dev libogg-dev libvorbis-dev libopenal-dev libfreetype6-dev libudev-dev libjpeg-dev libudev-dev libfontconfig1-dev

Pasamos ahora a compilar requisitos de AttractMode, importante que estos comandos son para una Raspberry 2 ó 3, si lo estamos compilando para un modelo de 1 único núcleo, en la penúltima línea suprimiremos el comando -j4, que es para utilizar los 4 núcleos a la hora de compilar, quedando dicha línea así, sudo make install

cd ~; mkdir develop
cd ~/develop
git clone --depth 1 https://github.com/mickelson/sfml-pi sfml-pi
mkdir sfml-pi/build; cd sfml-pi/build
cmake .. -DSFML_RPI=1 -DEGL_INCLUDE_DIR=/opt/vc/include -DEGL_LIBRARY=/opt/vc/lib/libbrcmEGL.so -DGLES_INCLUDE_DIR=/opt/vc/include -DGLES_LIBRARY=/opt/vc/lib/libbrcmGLESv2.so
sudo make -j4 install
sudo ldconfig

Vamos a añadir ahora el soporte de aceleración por hardware, avisaros que tarda bastante en compilarlo, puedes ir a cenar por ahí tranquilamente. Al igual que en el anterior, ojo con el comando -j4 si no tenemos una raspberry de 4 núcleos:

cd ~/develop
git clone --depth 1 git://source.ffmpeg.org/ffmpeg.git
cd ffmpeg
./configure --enable-mmal --disable-debug --enable-shared
make -j4
sudo make install
sudo ldconfig

Y ya por último, compilar AttracMode, también cuidado con el -j4

cd ~/develop
git clone --depth 1 https://github.com/mickelson/attract attract
cd attract
make -j4 USE_GLES=1
sudo make install USE_GLES=1

¡Listo! Ya tenemos la última versión de AttractMode compilada y lista para usarse, antes vamos a borrar todos los archivos que hemos creado durante las compilaciones e instalaciones.

cd ~; rm -r -f ./develop

Vamos a cambiar el arranque de la raspi, para que nos inicie directamente en AttractMode, además vamos a aprovechar para silenciar la consola cuando lance algún juego y no salga ningún tipo de texto, para ello editamos el archivo /opt/retropie/configs/all/autostart.sh y sustituimos lo que haya por lo siguiente.

setterm -cursor off
stty -echo
clear
attract 2>&1 | grep -o $'\003\[2J'

Para completar este paso, deberemos crear en esta misma ruta 2 archivos, runcommand-onstart.sh y runcommand-onend.sh, ambos con el mismo contenido que os pongo a continuación.

printf "\033[H\033[2J"

Reiniciamos la Raspberry una vez más y veremos que entra en AttractMode, vamos a las opciones (tecla TAB) y ahí nos creamos un display nuevo y le ponemos el nombre de nuestro tema (NES Mini). Esto lo hacemos para que nos cree la estructura de directorios necesaria. Más adelante volveremos a este apartado.

Ahora mediante SSH, colocamos nuestro tema, en este caso, el de la NES dentro del directorio layouts del directorio de AttractMode. Las caratulas, los snaps, los overviews y los juegos, en sus rutas correspondientes. Subimos también las pantallas que hayamos creado tanto de boot, carga como los beezels. Las rutas de estos archivos son las siguientes:

Juegos: /home/pi/RetroPie/roms/nes
Pantalla boot: /home/pi/Retropie/splashscreens/nintendo-logo.png

Tema: /home/pi/.attract/layouts (Ponemos permisos a 777 para evitar problemas al arranque)
Caratulas: /home/pi/.attract/scraper/Nintendo Entertainment System/flyer
Overviews: /home/pi/.attract/scraper/Nintendo Entertainment System/overview
Snaps: /home/pi/.attract/scraper/Nintendo Entertainment System/snap

Pantalla de carga: /opt/retropie/configs/nes/launching.png
Bezels: /opt/retropie/configs/all/retroarch/overlay

Ya vamos terminando, para tener un arranque silencioso y no ver ningún texto del terminal ni las frambuesas del arranque de la Raspberry, editamos el archivo /boot/cmdline.txt y nos aseguramos que contenga lo siguiente:

loglevel=0 logo.nologo vt.global_cursor_default=0 consoleblank=0 plymouth.enable=0

Modificamos también el archivo /boot/config.txt para que no aparezca la pantalla arcoiris del inicio, le añadimos el siguiente comando disable_splash=1

Ahora para indicar que nos coja la pantalla de carga personalizada en el boot, ejecutamos desde shh en /home/pi/RetroPie-Setup el comando ./retropie_setup.sh y ahí seleccionamos la imagen que cargamos en /home/pi/Retropie/splashscreens/nintendo-logo.png

Por último, entramos en la configuración de AttracMode, y vamos a la visualización que habíamos creado, para indicarle que el tema a mostrar sea el del layout que habíamos subido anteriormente.

Pégale un reinicio más a la raspi y si todo ha ido bien ¡ya tendrás el tema funcionando!

Terminado y probado, ahora ya sí, da gusto moverse por el menú, no hay ningún parón ni ningún pertardeo y eso ¡utilizando una tarjeta SD de clase 4 en una Raspberry 2!

Viendo como funciona a día de hoy tras todas las optimizaciones y una instalación limpia, me replanteo la pregunta que hice en el anterior artículo, ¿merece la pena? sin lugar a dudas, un rotundo sí, nada que envidiar al producto original de Nintendo, con la posibilidad de poner el romset completo y sin ninguna pega de ningún tipo en cuanto a opciones de hacer lo que queramos con el hardware.

Para que puedas comparar, te dejo un video de la misma Raspberry y misma tarjeta SD, ejecutando el tema que se encuentra por Internet sin optimizar y la versión optimizada que he realizado con los pasos de este artículo.

Video de NES mini casera optimizada

Comentarios

Cargando

Quizá te interese...

NES mini Casera

NES mini Casera

09-06-2018 17:25

Hazte tu propia consola NES mini casera basada en una Raspberry. Sigue estos pasos y podrás tener un clon de la original pero más potente.

Leer más
USB instalación multi Windows

USB instalación multi Windows

09-02-2018 10:45

Al realizar una instalación de Windows tenemos que buscar el USB o disco que contiene la versión correcta. ¿Qué tal si hacemos un pendrive que instale Windows 7, 8 y 10 desde el mismo USB?.

Leer más
Clonado de un Disco Duro

Clonado de un Disco Duro

20-01-2018 12:12

Has formateado tu ordenador, has instalado tus programas, dejando todo perfecto. Guarda un clon de tu disco en una imagen y ¡olvídate de reinstalar el sistema operativo!.

Leer más

Aceptar