Retroemulación con Raspberry Pi

Como desarrollador que empezó haciendo sus pinitos con un humilde ZX Spectrum+, hace tiempo que le venía dando vueltas a la posibilidad de recordar esos juegos con los que tanto disfruté en mi infancia. La idea era conseguir un sistema que fuera capaz de emular no sólo ese dispositivo sino también otros sistemas como máquinas recreativas, consolas, etc. Afortunadamente la potencia de los ordenadores actuales hace que esta tarea sea relativamente sencilla donde el único problema es elegir entre las decenas de emuladores que existen hoy en día.

Tras valorar varias posibilidades me decidí a montar un sistema de retroemulación utilizando una Raspberry Pi, dispositivo que por su pequeño tamaño, consumo y potencia lo hacen ideal para este cometido.

Qué necesitamos

Para montar nuestro sistema de retroemulación necesitaremos primero el hardware. En este caso una Raspberry Pi que es un mini-ordenador que se denomina de placa simple y de muy bajo coste desarrollado por la fundación Raspberry Pi con el propósito de ser un ordenador para el aprendizaje.

Actualmente está en la versión 3 modelo B+ que cuenta con una velocidad de 1.4Ghz, incorpora puerto Ethernet de 300 Mbits/s y 1Gb de memoria RAM compartida con la GPU. Dispone de 4 puertos USB, una salida HDMI para conectarla a una TV o a un monitor y un puerto microUSB para alimentarla.

Como no dispone de disco duro es necesario contar con una tarjeta microSD que será la que contenga el sistema operativo con el que arrancará la Raspberry. Existen muchísimas distribuiciones con funciones diferentes: servidor multimedia, sistema operativo de escritorio y por supuesto, retroemulación.

Para comenzar necesitaremos:

  • 1 Raspberry Pi 3 Model B+
  • 1 Tarjeta microSD (mínimo 16Gb)
  • 1 Caja para la Raspberry (la placa viene sóla, sin caja)
  • Cable de alimentación (5V y recomendable 2A).

Si no nos queremos complicar la vida podemos optar con comprar un kit con todo lo necesario como este de amazón:

Es importante que valoremos el tamaño de la tarjeta a utilizar. En ocasiones la tarjeta de 16Gb se queda corta y la diferencia de precio entre ella y la de 32 es escasa.

Otro punto a tener en cuenta es que la Raspberry no viene con botón físico de encendido/apagado así que también es importante que el cable de alimentación venga con interruptor. En caso contrario se encenderá según la conectemos a la corriente con el engorro que supondría tener que desenchufarla de cada vez.

Si por otra parte queremos decidir nosotros nuestros propios componentes podemos optar por comprarlos por separado. Por ejemplo:

Una vez que tenemos listo el hardware necesitamos el software. Para la emulación de consolas y ordenadores antiguos existen varios sistemas:

  • Retropie. Es el que lleva más tiempo disponible. Es el más versátil de todos pero precisamente por eso es el más difícil de configurar.
  • Recalbox. Tiene menos opciones de configuración que Retropie por lo que su configuración es más sencilla.
  • Batocera. Es una variante de Recalbox pero que añade mayor estabilidad. Es el que yo elegí ya que buscaba algo que no diera mucha guerra a la hora de configurar y por otra parte fuera suficientemente estable.

Descargamos la plataforma elegida, en mi caso Batocera, que es un fichero con extensión img.gz. Eso indica que es un fichero comprimido. Lo descomprimimos con cualquier utilidad como por ejemplo AlZip y lo dejamos en el disco duro.

Ahora necesitamos formatear la tarjeta microSD. Para ello descargamos la utilidad SD Card Formatter y con ella la formateamos en FAT32.

Cuando ya tenemos la tarjeta formateada descargamos la aplicación Etcher, la instalamos y la ejecutamos.

Pulsamos el botón Select image y seleccionamos la imagen que descomprimimos anteriormente.

Pulsamos el botón Select drive y elegimos la unidad de nuestra microSD.

Por último pulsamos el botón Flash! y esperamos.

Cuando haya acabado ya tenemos nuestra microSD lista para poner en la Raspberry y arrancarla. Si todo ha ido correctamente deberíamos ver la pantalla de carga de Batocera

Resultado de imagen de batocera loading screen

Una vez arrancada queda la parte de la configuración que ya dependerá del hardware utilizado. Podemos conectarle un teclado USB o, como es mi caso, un joystick Mayflash. La detección y configuración del joystick se produce nada más arrancar por lo que no me fue necesario conectarle ni siquiera un teclado.

En esta configuración tenemos que indicarle qué botones serán los que actúen como Aceptar, Cancelar, etc. para poder movernos por los menús.

Ahora tenemos un sistema funcional pero todavía sin juegos (sólo algunos de demostración). Para ello, habrá que descargar las roms de los sistemas que queramos emular (no importa que no aparezcan en la ventana principal, aparecerán cuando existan roms para ellos) teniendo en cuenta que muchas de estas roms tienen prohibida su utilización por derechos de distribución.

Una vez tengamos esas roms la forma más sencilla de pasarlas a la Raspberry es por medio de FTP. Para ello lo primero que tenemos que hacer es tener nuestra Raspberry conectada a nuestra red interna. Esto lo podemos hacer mediante un cable de red desde su puerto a nuestro router (que es la forma más directa) o conectándola a nuestra WiFi.

Una vez que la Raspberry esté dentro de nuestra red tenemos que ir a la configuración de red dentro de los menús de Batocera y saber cuál es la dirección IP que tiene asignada.

Descargamos un programa para la conexión por FTP como WinSCP y una vez instalado y ejecutado nos conectamos a la Raspberry de la siguiente forma:

Cambiando las xxx.xxx.xxx.xxx por la dirección IP que obtuvimos en la configuración de Batocera y utilizando como nombre de usuario root y como contraseña linux.

Si todo va bien deberíamos conectarnos a la Raspberry y poder ver su estructura de carpetas. Sólo tenemos que navegar hasta la carpeta roms, entrar en el sistema que queramos emular y copiar ahí las roms que hemos descargado.

Una vez reiniciada la Raspberry (siempre mejor desde sus menús) la lista de roms se actualizará y las tendremos disponibles para utilizar.