PiGRRL-2

Hace unos meses monté un PiGRRL-2. La imagen de tarjeta microSD que Adafruit ofrece para el sistema, viene preconfigurada con todo lo necesario, pero había cosas que no funcionaban a mi gusto (como los emuladores de ZX Spectrum) y quería conocer más de cerca todas las posibilidades de RetroPie. Lo que sigue son los pasos que he seguido para montar una microSD con RetroPie para la PiGRRL-2 desde cero.

Instalación de Raspbian

Comenzamos haciendo una instalación limpia del sistema base. He elegido Raspbian Lite puesto que no necesitamos entorno de escritorio ni las aplicaciones que lleva la instalación normal.

  1. Bajamos Rasbian Lite: https://www.raspberrypi.org/downloads/raspbian/
  2. Instalamos:

     unzip -p 2016-05-27-raspbian-jessie-lite.zip | sudo dd of=/dev/mmcblk0 bs=2M
     sudo sync
    
  3. Pinchamos la tarjeta en la Raspberry Pi y conectamos un cable de red para poder acceder por SSH (user: pi; pwd: raspberry).
  4. Actualizamos la distribución:

     sudo apt-get update
     sudo apt-get upgrade
    
  5. Hacemos algunos ajustes generales:

     sudo raspi-config
    

    5.1. Extendemos la partición a toda la SD (opción: 1 Expand Filesystem).

    5.2. Ajustar el Timezone (opción 5 Internationalisation Options > I2 Change Timezone). Realmente no es necesario, pero me gusta ver fechas coherentes cuando manipulo el sistema.

    5.3. Ajustar los locales (opción 5 Internationalisation Options > I1 Change Locale). Yo por ejemplo elijo en_GB.UTF-8. Es importante que todas las variables que aparecen al ejecutar el comando locale tengan valor correcto e igual en todas ellas. Tras hacer los ajustes es necesario reiniciar, ya que se gestionan mediante variables de entorno de sesión. Tras hacerlo volver a comprobar con el comando locale. Si alguna de las variables sigue con un valor incorrecto (suele ocurrir en LANG, LANGUAGE y LC_ALL), usar el siguiente comando e ir comprobando con sucesivos reinicios hasta que todas las variables tengan el mismo locale:

         sudo update-locale LC_ALL="en_GB.UTF-8"
    

    5.4. Desactivamos el Overscan (opción 9 Advanced Options > A1 Overscan, respondiendo “No”).

    5.5. Forzamos el audio a través del jack 3,5mm (opción 9 Advanced Options > A8 Audio, respondiendo “1 Force 3.5mm”).

Instalación de RetroPie-Setup

  1. Instalamos unos paquetes necesarios:

     sudo apt-get install git dialog xmlstarlet
    
  2. Bajamos el código de RetroPie-Setup:

     cd ~
     git clone --depth=1 https://github.com/RetroPie/RetroPie-Setup.git
    
  3. Ejecutamos RetroPie-Setup:

     cd RetroPie-Setup
     sudo ./retropie_setup.sh
    
  4. Cerramos el cuadro de advertencia que aparece y acudimos a la siguiente ruta: Manage Packages > Quick Install
  5. Respondemos “Yes”. A continuación se desencadenará una secuencia de descargas, compilaciones y configuraciones automáticas de todas las herramientas que integran RetroPie. En mi caso el proceso en una Raspberry Pi 2 tardó unos 13 minutos. Al terminar volvemos a la misma ventana. Pulsamos los botones “Back” y “Exit”.

Instalación de PiTFT

Instalación de fbcp

La PiTFT de Adafruit funciona haciendo framebuffer de la memoria de vídeo de la Raspberry Pi hacia la pequeña pantalla por SPI (explicado aquí). Para que esto funcione hay que instalar un pequeño programa.

  1. Bajamos, compilamos e instalamos:

     cd ~
     sudo apt-get install cmake
     git clone https://github.com/tasanakorn/rpi-fbcp
     cd rpi-fbcp/
     mkdir build
     cd build/
     cmake ..
     make
     sudo install fbcp /usr/local/bin/fbcp
    
  2. Configuramos el sistema para que autoarranque el programa que acabamos de instalar. Para ello editar /etc/rc.local y añadir lo siguiente justo antes de la última línea (exit 0):

     /usr/local/bin/fbcp &
    
  3. Reconfiguramos la consola para que se vea bien en la pequeña PiTFT (Elegimos las opciones “UTF-8”, “Guess optimal character set”, “Terminus” y “6x12 (framebuffer only).”):

     sudo dpkg-reconfigure console-setup
    

Configuración de PiTFT

Además de instalar fbcp habrá que hacer una serie de ajustes en el sistema para que se adapte a la resolución tan especial y modo de trabajo de esta pantalla.

  1. Instalamos un repositorio de Adafruit y un par de paquetes:

     cd ~
     curl -SLs https://apt.adafruit.com/add-pin | sudo bash
     sudo apt-get install raspberrypi-bootloader adafruit-pitft-helper
    
  2. Ejecutamos el aistente para configurar PiTFT:

     sudo adafruit-pitft-helper -t 28r
    
  3. Responder n a la primera pregunta y y a la segunda. Con esto último asociaremos la tecla vinculada al GPIO23 (la segunda empezando por arriba de las cuatro que tiene la pantalla a la izquierda) a un apagado/encendido de la consola que nos servirá para reiniciarla limpiamente si en algún momento perdemos el control en alguno de los emuladores.
  4. Editar el fichero /boot/config.txt y cambiar los valores de la línea que empieza con dtoverlay para dejarla como sigue:

     dtoverlay=pitft28-resistive,rotate=270,speed=80000000,fps=60
    
  5. En el mismo fichero /boot/config.txt añadir las siguientes líneas (si ya existen comentarlas):

     hdmi_force_hotplug=1
     hdmi_group=2
     hdmi_mode=87
     hdmi_cvt=320 240 60 1 0 0 0
    

Configurar EmuleStation

Vamos a hacer que EmuleStation arranque automáticamente con el sistema.

  1. Añadir lo siguiente al final del fichero /etc/profile:

     [ -n "${SSH_CONNECTION}" ] || emulationstation
    
  2. Configurar con raspi-config el autologin en consola. Para ello seguir la ruta 3 Boot Options > B1 Desktop / CLI > B2 Console Autologin.

Instalación de Retrogame

El pad que incorpora PiGRRL-2 enlaza cada botón con un GPIO determinado. Para que las señales en estos GPIO’s se conviertan en pulsaciones de teclas normales hay que instalar y configurar un software que nos proporciona Adafruit, mediante los siguientes pasos:

  1. Bajamos el código:

     cd ~
     git clone https://github.com/adafruit/Adafruit-Retrogame.git
     cd Adafruit-Retrogame
    
  2. Editamos el fichero ~/Adafruit-Retrogame/retrogame.c y sustituimos la estructura ioStandard que hay a partir de la línea 111 por lo que sigue. Esto hará corresponder algunas de las teclas importantes para manejar los emuladores y el propio EmuleStation con el mapeo de pulsadores del gamepad de PiGRRL 2:

     ioStandard[] = {
         // This pin/key table is used when the PiTFT isn't found
         // (using HDMI or composite instead), as with our original
         // retro gaming guide.
         // Input   Output (from /usr/include/linux/input.h)
         {  17,     KEY_RIGHTSHIFT },  // PiTFT 17
         {  22,     KEY_RIGHTCTRL  },  // PiTFT 22
         {  27,     KEY_ESC        },  // PiTFT 27
         {   4,     KEY_LEFT       },  // Left
         {  16,     KEY_UP         },  // Up
         {  19,     KEY_RIGHT      },  // Right
         {  26,     KEY_DOWN       },  // Down
         {   5,     KEY_SPACE      },  // Select
         {   6,     KEY_ENTER      },  // Start
         {  14,     KEY_LEFTCTRL   },  // A Button
         {  15,     KEY_LEFTALT    },  // B Button
         {  20,     KEY_Z          },  // X Button
         {  18,     KEY_X          },  // Y Button
         {  12,     KEY_A          },  // L Shoulder
         {  13,     KEY_S          },  // R Shoulder
    
         // For credit/start/etc., use USB keyboard or add more buttons.
         {  -1,     -1           } }; // END OF LIST, DO NOT CHANGE
    
  3. Dentro del mismo fichero ~/Adafruit-Retrogame/retrogame.c acudir a la línea 300 (tras el cambio anterior) y sustituir:

     // Select io[] table for Cupcade (TFT) or 'normal' project.
     io = (access("/etc/modprobe.d/adafruit.conf", F_OK) ||
           access("/dev/fb1", F_OK)) ? ioStandard : ioTFT;
    

    por:

     io = ioStandard;
    
  4. Compilamos e instalamos:

     make retrogame
     sudo mv retrogame /usr/local/bin
    
  5. Crear el fichero /etc/udev/rules.d/10-retrogame.rules con el siguiente contenido:

     SUBSYSTEM=="input", ATTRS{name}=="retrogame", ENV{ID_INPUT_KEYBOARD}="1"
    
  6. Añadir lo siguiente al final de /etc/rc.local:

     /usr/local/bin/retrogame &
    
  7. Añadir los siguientes módulos al fichero /etc/modules:

     uinput
     joydev
     snd-bcm2835
    
  8. Sustituir el contenido del fichero /opt/retropie/configs/all/emulationstation/es_input.cfg por:

     <?xml version="1.0"?>
     <inputList>
       <inputAction type="onfinish">
         <command>/opt/retropie/supplementary/emulationstation/scripts/inputconfiguration.sh</command>
       </inputAction>
       <inputConfig type="keyboard" deviceName="Keyboard" deviceGUID="-1">
         <input name="a" type="key" id="1073742048" value="1" />
         <input name="b" type="key" id="1073742050" value="1" />
         <input name="down" type="key" id="1073741905" value="1" />
         <input name="left" type="key" id="1073741904" value="1" />
         <input name="pagedown" type="key" id="120" value="1" />
         <input name="pageup" type="key" id="122" value="1" />
         <input name="right" type="key" id="1073741903" value="1" />
         <input name="select" type="key" id="32" value="1" />
         <input name="start" type="key" id="13" value="1" />
         <input name="up" type="key" id="1073741906" value="1" />
       </inputConfig>
     </inputList>
    

FIN

Sólo queda copiar algunas roms a los directorios correspondientes a cada emulador dentro de la ruta /home/pi/RetroPie/roms. Hasta que no lo hagamos no aparecerá la entrada correspondiente al emulador en EmuleStation. Si añadimos las roms mientras éste está en marcha (conectándonos por sFTP por ejemplo) habrá que reiniciarlo para que las encuentre.

Enlaces: