Ретро-консоль из Repka Pi 4: Lakka против Batocera

Продолжаем цикл статей о российской одноплатной плате Repka Pi 4. В первой части мы собрали на ней домашний медиасервер, а сегодня проверим второй популярный сценарий — превращение в ретро-консоль. Производитель на своём сайте обещает поддержку более 100 консолей: NES, Dendy, Sega, PlayStation и других.

Что реально может тянуть Repka Pi 4?

Прежде чем переходить к практике, оценю возможности платы на основе её характеристик:

  • Процессор: Allwinner H6, 4× Cortex-A53 @ 1.6-2 GHz
  • Графика: Mali-T720 MP2
  • Память: 2 GB DDR3 (1866 MHz)

Исходя из этого железа, можно предположить следующие возможности:

  • Без проблем: 8-bit (NES, Sega Master System, Atari), 16-bit (SNES, Mega Drive), Game Boy Color, Game Boy Advance, Neo Geo
  • Должно работать хорошо: PlayStation 1
  • Спорно: Nintendo 64, Dreamcast — зависит от конкретной игры и оптимизации эмулятора
  • Вряд ли потянет: PlayStation 2, GameCube, Wii и всё, что выше по требованиям

Более требовательные консоли в этом обзоре не проверял — исходя из железа, результат будет предсказуемо неутешительным, а для N64 и Dreamcast есть смысл собрать отдельный материал.

Batocera vs Lakka: первый выбор

Производитель Repka Pi предлагает два дистрибутива для ретро-гейминга: Batocera Linux и Lakka. Изначально я установил Batocera — согласно описанию на сайте, это «система эмуляции ретро-игр 8-32bit, поддерживает более 100 консолей». Но столкнулся с критической проблемой: не работал ни Wi-Fi, ни LAN.

Консоль вообще без сети — это крайне неудобный инструмент. Нужно же устанавливать BIOS-файлы для консолей (а Batocera их требует отдельно), настраивать скраппер для обложек и описаний игр, обновлять систему. Можно было бы решить проблему покупкой USB LAN-карточки, но под рукой её не оказалось, и я перешёл к альтернативе.

Lakka — второй вариант от производителя. Здесь ситуация оказалась зеркальной: Wi-Fi заработал, а LAN по-прежнему не работал. Но без Wi-Fi уже можно жить, поэтому остановился на ней.

Установка Lakka на Repka Pi 4

Образ скачиваем с официального сайта производителя:

https://download.repka-pi.ru/repka-pi4/repka_os/other/lakka/repka-pi4_lakka-5.x_stable.zip

Записывал образ на SD-карту через Raspberry Pi Imager на Manjaro. Процесс стандартный: распаковываем архив, выбираем полученный .img-файл, выбираем SD-карту, жмём «Записать». По таймингам из лога Imager: запись заняла — около 51 секунды. Первая загрузка Lakka прошла примерно за 40 секунд.

Первичная настройка

Первое, что сделал после загрузки:

  • Сменил язык: Settings → User Interface → Russian
  • Подключил геймпад: 8BitDo Ultimate 2C Black Myth: Wukong определился как Mad Catz BrawlPad
  • Поменял кнопки местами: Настройки → Ввод → Управление меню → поменял A и B, чтобы они совпадали с физической раскладкой на контроллере
  • Включил SSH: Настройки → Сервисы → SSH — это необходимо для дальнейшей настройки

Грабли со звуком и неожиданное решение

Первый запуск показал, что звука нет. В ближайшем DNS купил USB-аудиоадаптер DEXP 3D CM108 Ver.2, подключил — звук появился, но качество оказалось отвратительным: треск, шум, фон. Пришлось вернуть.

Потом вспомнил, что у меня завалялся переходник Type-C → 3.5 jack для прослушивания музыки с телефона. Подключил его к Repka Pi через USB Type-C-переходник, и звук заработал превосходно. Оказалось, это не просто «пассивный переходник», а устройство, которое система определила как полноценную USB-звуковую карту.

Единственное, что пришлось подкрутить — громкость по умолчанию была слишком высокой. Зашёл в Настройки → Аудио → Уровень громкости и поставил -30 дБ. После этого звук стал чистым и комфортным. Проверить работу звука можно на предустановленной игре Cave Story — она уже есть в Lakka.

Подключение к плате по SSH и SFTP

IP-адрес смотрим в роутере (у меня получилось 192.168.1.87). Подключаемся через Termius:

  • Логин: root
  • Пароль: root

По SSH удобно выполнять команды, а через SFTP-режим Termius можно перетаскивать ROM-файлы прямо в нужные папки — удобнее, чем через встроенный в Lakka файловый менеджер.

Главная грабель: русские переводы ROM не подхватываются сканером

И вот тут столкнулся с самой интересной проблемой. Загрузил ROM-файлы через SFTP в папку /storage/roms/nes/ и /storage/roms/gba/, запустил сканирование через меню «Импорт контента» — и в плейлисты добавился только лицензионный дамп Aladdin. Русские переводы вроде Chip 'n Dale [T+Rus TalkingCat] и Super Mario Advance 4 [T-Rus Pirate] сканер проигнорировал.

Причина оказалась в самом механизме сканирования. RetroArch (движок Lakka) сверяет CRC32-хеш каждого файла с официальной базой данных No-Intro, в которой хранятся только лицензионные дампы. Хеш пиратского перевода не совпадает ни с одной записью в базе, и сканер просто пропускает файл. При этом сама игра прекрасно работает — если запустить её вручную через «Загрузить контент», база не нужна.

Решение: ручные плейлисты через nano

Чтобы игры с переводами появились в меню, нужно создать или отредактировать плейлисты вручную. Плейлисты в Lakka — это обычные JSON-файлы в /storage/playlists/.

Важный нюанс: имена файлов плейлистов должны строго совпадать с именами баз RetroArch. Например, для NES это Nintendo - Nintendo Entertainment System.lpl (обратите внимание: «Nintendo» повторяется дважды).

Открываем плейлист через SSH:

cd /storage/playlists
nano "Nintendo - Nintendo Entertainment System.lpl"

Структура файла:

{
  "version": "1.5",
  "default_core_path": "",
  "default_core_name": "",
  "label_display_mode": 0,
  "right_thumbnail_mode": 0,
  "left_thumbnail_mode": 0,
  "thumbnail_match_mode": 0,
  "sort_mode": 0,
  "items": [
    {
      "path": "/storage/roms/nes/Chip 'n Dale - Rescue Rangers (U) [T+Rus].zip",
      "label": "Chip 'n Dale - Rescue Rangers (Рус)",
      "core_path": "/tmp/cores/mesen_libretro.so",
      "core_name": "Nintendo - NES / Famicom (Mesen)",
      "crc32": "0|crc",
      "db_name": "Nintendo - Nintendo Entertainment System.lpl"
    }
  ]
}

Важный момент про выбор ядра. Если поставить "core_path": "DETECT", RetroArch при каждом запуске будет спрашивать, каким ядром запустить игру. Чтобы игры запускались сразу, нужно указать ядро явно. Список доступных ядер смотрим командой:

ls /tmp/cores/

Для NES — это mesen_libretro.so, для GBA — mgba_libretro.so, для Mega Drive — genesis_plus_gx_libretro.so, для PlayStation — pcsx_rearmed_libretro.so.

Важный нюанс со сканированием архивов

Прежде чем вообще запускать сканер, нужно включить в настройках Lakka опцию «Сканировать архивы». По умолчанию она выключена, и сканер видит только распакованные файлы. Включаем:

Настройки → Playlist → Scan Archives

Тесты производительности по консолям

Проверил несколько ключевых консолей из разных поколений. Итоги:

КонсольТестовая играРезультат
NES (8-bit)Aladdin, Чип и Дейл 1-2Работает идеально, плавно, без единого подтормаживания
Game Boy AdvanceSuper Mario Advance 4Отлично, звук и графика без нареканий
Sega Mega DriveContra: The Hard CorpsОтлично, плавная работа даже в сценах с множеством спрайтов
PlayStation 1Mega Man X4Работает, но плата ощутимо греется

Температурный режим: реальные цифры

Температуру снимал прямо через SSH командой:

cat /sys/class/thermal/thermal_zone0/temp

Lakka выдаёт значение в миллиградусах Цельсия, поэтому результат нужно делить на 1000. Замеры в разных состояниях:

СостояниеТемператураКомментарий
В простое (главное меню)32°CПлата холодная
Game Boy Advance45°CКомфортно, без нагрузки на охлаждение
PlayStation 1 — начало сессии50°CНачинается ощутимый нагрев
PlayStation 1 — длительная иградо 57°CТемпература растёт и стабилизируется

Вывод по температурам: 57°C — это ощутимо, но не критично. Троттлинг у Allwinner H6 начинается значительно выше (около 80-85°C), так что запас есть. Для большинства 8-bit и 16-bit игр достаточно пассивного радиатора. А вот для длительных сессий на PlayStation 1 рекомендую поставить активное охлаждение — вентилятор на радиатор заметно снизит температуру.

Итоги и выводы

Repka Pi 4 вполне справляется с ролью ретро-консоли для поколений 8-bit и 16-bit, а также Game Boy Advance. PlayStation 1 запускается и играется, но заставляет плату ощутимо греться — это стоит учитывать при выборе корпуса и системы охлаждения.

Плюсы:

  • Плата тянет ключевые консоли своего поколения
  • Lakka работает стабильно, Wi-Fi из коробки
  • Геймпады определяются без проблем
  • Не требуется качать BIOS отдельно (в отличие от Batocera)

Минусы и нюансы:

  • Batocera — нет ни Wi-Fi, ни LAN
  • Lakka не подхватывает русские переводы ROM через сканер — нужно править плейлисты вручную
  • LAN не работает ни в Batocera, ни в Lakka — только Wi-Fi
  • Для PS1 желателен активный кулер

Для своей ниши — ретро-консоль «всё-в-одном» на 8-bit и 16-bit эпоху — Repka Pi 4 подходит хорошо. А вот если хочется играть в N64, Dreamcast или PSP — здесь лучше смотреть в сторону более мощных решений, например, той же Repka Pi 5 на RK3588, или x86-платформ.