Разворачиваем RetroArch на Raspberry Pi под Arch Linux

Наличие у RaspberryPi RCA-разъема, а следовательно возможность подключения его к телевизору, располагает к тому, чтобы установить на малиновую плату парочку приставочных эмуляторов детства и полностью погрузиться в ностальгию.

На данный момент существует множество способов завести на Raspberry эмулятор, вплоть до готовых прошивок. Тем людям которым все же очень лень собирать все вручную, советую обратить внимание на проект RetroPie. Там можно скачать набор скриптов для установки сборки на вашу плату, или же скачать готовый образ. Мне же образ этот не очень то доставил, во первых, он работал на Debian, а во вторых, не очень то хотелось держать на основной флешке с сервером какую то левую сборку, а в третьих не так уж и стабильно все работает, в случае если подключать Raspberry через RCA шнурок. 

По этому, как и говорилось в сабже, мы берем свежеобновленный Arch и начинаем установку своей сборки. Далее описывается описание моей сборки, руководствуясь в основном прекрасным туториалом от RetroPie

Сперва на перво нам потребуется какой либо менеджер по типу yaourt. С помощью него будут производиться вся сборка системы. 

yaourt -S retroarch-rbp-git  

Тут может появиться много граблей. Сборка требует установки многих пакетов, которые почему то не указаны в зависимостях. Но это не критично. 

Если установка прошла без сучка без задоринки, то у вас на руках появиться набор утилит. На этом этапе можно настроить геймпад, если он имеется у вас в наличии, или конфиг для клавиатуры. У меня был Defender-овский клон геймпада PS2, к счастью программа все определила правильно без каких либо костылей.

И так, сами команды:

cp /etc/retroarch.cfg ~/.retroarch.cfg  
retroarch-joyconfig >> ~/.retroarch.cfg  

Небольшое примечание, если у вас геймпад по типу PS: в начале там где "Up", "Down", "Left", "Right", надо жать клавиши в правой стороне геймпада.

Теперь, когда вы настроили свой геймпад, настйпает самая долгая и утомительная часть: сборка библиотек эмуляторов. Компиляция занимает много времени. Поэтому можно запихнуть все либы сразу пачкой и куда либо отойти, но лучше проконтролировать процесс, на всякий случай :)

yaourt -Ss libretro  

Эта команда выдаст список всех доступных библиотек с названием пакетов. Список поддерживаемых приставок во истину впечатляющий.

И так, вы установили все что вам требуется. Теперь нам требуется красивенький внешний вид, для удобного выбора приставки и игры. Как и в RetroPie, используем EmulationStation. Он предельно прост в настройке и установке.

yaourt -S emulationstation-git  

Тут прошу немного внимания. Для сборки этого пакета вам потребуется cmake. На момент написания поста этот нюанс не был учтен в инструкциях к сборке, поэтому при вопросе от yaourt о редактировании файлика PKGBUILD, согласимся и исправим это недоразумение. Ищем строчку make и пред ней вставляем cmake. Все. Теперь можно со спокойной душой наблюдать за процессом сборки. 

После сборки, нам нужно сгенерить файлики конфигов. От простого пользователя это не получиться, поэтому первый запуск совершаем от имени root:

sudo emulationstation  

Файлики готовы, можно копировать к себе

sudo cp /root/.emulationstation /home/USER/ -R  
chown USER /home/USER/.emulationstation -R  

При первом запуске EmulationStation от вас потребуют сделать конфигурацию управления. Это можно сделать все тем же геймпадом. Если вы совершили какую либо ошибку в этой конфигурации, то ничего страшного. Удалив "~/.emulationstation/es_input.cfg", можно заново сконфигурировать управление

 Основные настройки EmulationStation описаны в essystem.cfg. Первой строкой показан пример подобной настройки. А вот пример моего essystem.cfg:

DESCNAME=Doom  
NAME=doom  
PATH=/home/retro/roms/doom  
EXTENSION=.WAD .wad  
COMMAND=retroarch -L /usr/lib/libretro/libretro-prboom.so --config /home/retro/.retroarch.cfg %ROM%  
PLATFORMID=1

DESCNAME=Sega Mega Drive / Genesis  
NAME=genesis  
PATH=/home/retro/roms/megadrive  
EXTENSION=.smd .SMD .md .MD .bin .BIN .zip .ZIP .gz .GZ .bz2 .BZ2 .gen .GEN  
COMMAND=retroarch -L /usr/lib/libretro/libretro-genplus.so --config /home/retro/.retroarch.cfg %ROM%  
PLATFORMID=18

DESCNAME=Nintendo Entertainment System  
NAME=nes  
PATH=/home/retro/roms/nes  
EXTENSION=.nes .NES  
COMMAND=retroarch -L /usr/lib/libretro/libretro-fceu.so --config /home/retro/.retroarch.cfg %ROM%  
PLARFORMID=7

DESCNAME=Sony Playstation 1  
NAME=psx  
PATH=/home/retro/roms/psx  
EXTENSION=.img .IMG .7z .7Z .pbp .PBP .bin .BIN  
COMMAND=retroarch -L /usr/lib/libretro/libretro-mednafen-psx.so --config /home/retro/.retroarch.cfg %ROM%  
PLATFORMID=10  

Как можете видеть стандартным шаблоном для запуска эмулятора это

retroarch -L /usr/lib/libretro/библиотека.so --config адрес-к-конфигу-retroarch %ROM%  

Ничего примечательного тут нет, но прошу обратить внимание на PLATFORMID. Он нужен для красивеньких шаблонов, которые мы сейчас установим. Но для начала таблица соответствия ID-Система:

[25] 3DO
[4911] Amiga
[23] Arcade
[22] Atari 2600
[26] Atari 5200
[27] Atari 7800
[28] Atari Jaguar
[29] Atari Jaguar CD
[30] Atari XE
[31] Colecovision
[40] Commodore 64
[32] Intellivision
[37] Mac OS
[14] Microsoft Xbox
[15] Microsoft Xbox 360
[24] NeoGeo
[4912] Nintendo 3DS
[3] Nintendo 64
[8] Nintendo DS
[7] Nintendo Entertainment System (NES)
[4] Nintendo Game Boy
[5] Nintendo Game Boy Advance
[41] Nintendo Game Boy Color
[2] Nintendo GameCube
[9] Nintendo Wii
[38] Nintendo Wii U
[1] PC
[33] Sega 32X
[21] Sega CD
[16] Sega Dreamcast
[20] Sega Game Gear
[18] Sega Genesis
[35] Sega Master System
[36] Sega Mega Drive
[17] Sega Saturn
[10] Sony Playstation
[11] Sony Playstation 2
[12] Sony Playstation 3
[39] Sony Playstation Vita
[13] Sony PSP
[6] Super Nintendo (SNES)
[34] TurboGrafx 16

А теперь сама установка:

yaourt -S emulationstation-themes  
ls -l /usr/share/EmulationStation/themes/  
ln -s /usr/share/EmulationStation/themes/snes ~/.emulationstation/  

 Теперь, запустив emulationstation, вы можете видеть на сколько все изменилось. Однако, можно сделать все более красивым. Для этого нам нужен Scraper. Эта чудная программка просматривает образы в соответствии с конфигом EmulationStation и выискивает в интернете обложку с описанием к каждой игре. Процесс может занять много времени. Так что не советую заливать сотни образов в систему. Замучаетесь оформлять :)

Установка и сразу же конфигурация:
packer -S emulationstation-scraper  
scraper -m -w 275  

275 говорит о размере изображения, в которое его надо пережать. 

На этом все. Видео результата:

Everything Is AWESOME

К несчастью, собранная либа для PS1 у меня не заработала. Пришлось потрошить сборку RetroPie и перетаскивать .so себе. Так же не забываем файлики scph****.bin от приставок, их я кинул прямо в папку с образами игр. Вроде как схватилось и заработало.