Эмуляция консоли Super Nintendo в современных дистрибутивах Linux (сборка Snes9X)

В современных дистрибутивах Ubuntu Linux больше нет единственного нормального эмулятора Super Nintendo под названием Snes9X. Стоит отметить, что есть конечно и универсальные комбайны которые позволяют сразу же эмулировать множество консолей, но у всех у них есть ряд недостатков и если посмотреть на Windows-платформу, то при создании сборников игр именно Snes9X используется в качестве эмулятора по умолчанию. И хотя из за ряда несовместимостей пакета Snes9x больше нет в поставке по умолчанию, мы можем его собрать с некоторыми приседаниями.

 
 
Логотип GITA-DEV

Автор: Черноусов Антон aka Gita-Dev
Опубликовано: 24 Мар 2018 (последние правки 1 месяц)

apt apt-get aptitude dev git install ubuntu консоли утилиты

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

Скриншот из игры Zelda

Основная проблема с которой вы столкнетесь попытавшись собрать это приложение из исходных кодов, это неподдерживаемая более библиотека libpng12, в современных дистрибутивах Ubuntu Linux используется уже libpng16, а устаревшая библиотека удалена из поставки и попытка собрать Snes9x из исходных кодов с гитхаб вызовет ошибку:

../screenshot.o: In function `S9xDoScreenshot(int, int)':
screenshot.cpp:(.text+0xa2): undefined reference to `png_set_longjmp_fn'

И это еще честно говоря не все с чем мне пришлось столкнуться пока я настраивал эмулятор, но пожалуй расскажу обо всем по порядку и начнем с библиотеки libpng12, но честно говоря можно обойтись и без нее, ведь она используется исключительно для работы со скриншотами. Если вы все же решили ее использовать, то она вполне себе собирается из исходных кодов с github (https://github.com/glennrp/libpng/archive/libpng12.zip), но обязательно установите ее с префиксом в отдельный каталог в /usr/local/lib:

# wget https://github.com/glennrp/libpng/archive/libpng12.zip
# unzip ./libpng12.zip
# cd ./libpng-libpng12/
# ./configure --prefix=/usr/local/lib/libpng12
# make && make install

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

# apt-get install git build-essential
# aptitude install minizip libminizip-dev
# apt-get install zlib1g-dev libpng12-dev xorg-dev

Вероятно это не все необходимые библиотеки и просто у меня уже большая часть была установлена, а сейчас мы переходим к сборке консольной утилиты snes9x из официального гитхаба (https://github.com/snes9xgit/snes9x):

# git clone https://github.com/snes9xgit/snes9x.git
# cd ./snes9x/unix/
# autoconf
# ./configure --enable-netplay --enable-netplay LDFLAGS="-L/usr/local/lib/libpng12/lib/" CFLAGS="-I/usr/local/lib/libpng12/includes/"
# make
# make install

Или как я уже говорил, вы можете просто отключить модуль снимков экрана добавив соответствующую опцию к параметрам configure:

./configure --disable-screenshot --enable-netplay

Консольной версией утилиты имеет смысл пользоваться только для ряда экзотических случаев (например я делал превьюшки заставок запуска библиотеки игр), а в реальной жизни хотелось бы получить что-то более "графическое" и мы сейчас соберем GTK-Frontend, для чего перейдите в каталог gtk в корне репозитория исходных кодов проекта и скомпилируйте графический фронт-енд:

# cd ..
# cd gtk
# ./autogen.sh
# ./configure
# make
# make install

Как вы видите после конфигурации, приложение собирается под GTK версии 2 и это тоже проблема:

Snes9x will build with support for the following:

    GTK+ 2.0
    ALSA
    PulseAudio
    OpenGL
    XVideo
    XRandR
    Joysticks
    NetPlay

Я нашел на blogspot описание того, что возможно собрать snex9x-gtk с экспериментальной поддержкой GTK3 (http://maxolasersquad.blogspot.ru/2013/09/compiling-snes9x-on-ubuntu.html), но эта запись была написана в 2013-ом и видимо четыре года назад, что то и работало, но сейчас только GTK2, только хардкор. Попытка собрать с экспериментально поддержкой GTK3 заканчивается ошибкой:

src/gtk_s9xwindow.h:87:9: error: ‘GdkDrawingContext’ does not name a type
         GdkDrawingContext *gdk_drawing_context;

Приложение автоматически интегрируется в системное меню и лишних движений по созданию иконки делать не придется и сразу переходим к больной тебе устаревших GTK-приложений. Собственно почему, я говорю, что GTK2 в современных Linux-дистрибутивах становится проблемой? Лучше я вам просто скриншот покажу.

Ошибки отображения элементов меню GTK2

Пользоваться конечно можно, но не нужно. Лечится это переключением темы отображения GTK-2 приложений и хотя теперь GTK-2 приложения будут выглядеть несколько инородно, но пользоваться ими будет можно.

Смена темы оформления GTK-2 приложений в KDE

Просто смените тему оформления GTK+ 2.x на Raleigh:

Смена темы оформления GTK-2 в KDE Neon

Теперь все оформление приложения отображается корректно, хотя и выглядит как привет из 90-х.

Исправленное GTK-оформление.

Кстати на этом скриншоте я привел пример моих настроек графических фильтров и именно с такими настройками играть можно.

Похожие статьи

Сборка пакета FFmpeg из исходных кодов (с поддержкой CUDA)

Сборка пакета FFmpeg из исходных кодов (с поддержкой CUDA)

Использование аппаратного ускорения позволяет значительно ускорить операции обработки видео, но штатное ПО входящее в поставку дистрибутива Ubuntu Linux не поддерживает аппаратное кодирование/декодирование видео и для активации поддержки NVENCODE вам потребуется собрать FFMPEG из исходных кодов.


Сборка гипервизора контейнеров LXC (LXD) из исходных кодов и настройка окружения разработчика

Сборка гипервизора контейнеров LXC (LXD) из исходных кодов и настройка окружения разработчика

Данная статья родилась в процессе работ над проектом по тестировнию функционала горячей миграции контейнеров LXC. Мы провели сборку LXD из git-репозитария и описали шаги для повторения этих манипипуляций в дальнейшем. Дополнительно мы подготовили инструкцию по созданию окружения для наших разработчиков.


Установка и базовая настройка Zabbix-сервера (сборка из SVN-репозитария)

Установка и базовая настройка Zabbix-сервера (сборка из SVN-репозитария)

В этой статье я попробую описать пошагово, установку последней версии Zabbix-сервера из SVN-репозитария в LXC-контейнер. Ранее, в наших статьях мы уже рассматривали некоторые аспекты установки и настройки Zabbix-сервера и данная статья является скорее компиляцией прошлых заметок для реального внедрения.


Сборка клиента облачного хранилища NextCloud из исходных кодов

Сборка клиента облачного хранилища NextCloud из исходных кодов

Для облачного хранилища Next Cloud (форк проекта OwnCloud), на данный момент, не предоставляется собранный клиент для платформы Linux в виде ночных-билдов для тестирования, но его можно собрать из исходных кодов. Сборка не представляет особой сложности и единственный вопрос который может возникнуть- это разрешить ряд зависимостей необходимых для сборки. В дальнейшем мы планируем настроить сборку пакета для Ubuntu Linux, но сейчас нет времени этим заниматься, тем более, что в клиенте предусмотрена интеграция с KDE (предыдущей версии) и сейчас эта интеграция сломана причем похоже и в OwnCloud тоже.


Сборка VoIP-клиента Linphone из исходных кодов с поддержкой проприетарных видео и аудио кодеков

Сборка VoIP-клиента Linphone из исходных кодов с поддержкой проприетарных видео и аудио кодеков

Этот вопрос я уже несколько раз рассматривал, но как оказалось данные немного устарели и сборка новой версии из Github репозитрия осуществляется немного сложнее и появились новые специфичные подводные камни. Правда стоит отметить, что клиент для Linux и Windows стал выглядеть гораздо лучше хотя в продакшн тащить его я не советую, он еще слишком сырой.


Скрипт и поясняющее видео сборки гипервизора контейнеров LXD из исходных кодов (мастер-ветка)

Скрипт и поясняющее видео сборки гипервизора контейнеров LXD из исходных кодов (мастер-ветка)

В продолжение статьи по сборке GIT-версии гипервизора контейнеров LXD из исходных кодов, я подготовил скрипт выполняющий все описанное в предыдущих статьях в автоматизированном режиме и небольшую видео-демонстрацию того как собрать все в ручном режиме.


Сборка Samba для платформы ARM из исходных кодов

Сборка Samba для платформы ARM из исходных кодов

Сегодня я предлагаю вам ознакомиться не с готовым решением, а принять участие в обсуждении ряда проблем на которые я обратил внимание при работе с общими ресурсами линукс, при доступе из Windows 10. С этими ситуациями я столкнулся при настройке файлового хранилища на базе BananaPI с Samba 4-ой версии.


Сборка MELT из исходных кодов (сборка окружения для тестирования git-версии Kdenlive)

Сборка MELT из исходных кодов (сборка окружения для тестирования git-версии Kdenlive)

В прошлых заметках я уже рассказывал как собрать ffmpeg с поддержкой аппаратного кодирования и декодирования видео-файлов. Сборка ffmpeg с поддержкой CUDA ускорило обработку видео-файлов в четыре раза по сравнению с обработкой на CPU. Следующим этапом я решил применить все имеющиеся наработки для подключения этого функционала в Kdenlive, что теоретически должно ускорить обработку моих видео-заметок.


Скрипты для автоматической сборки Kdenlive из GIT-репозитария с поддержкой CUDA

Скрипты для автоматической сборки Kdenlive из GIT-репозитария с поддержкой CUDA

Как вы наверное знаете, я иногда подготавливаю видео, для своего видео блога в видео-редакторе Kdenlive и в нескольких прошлых статьях я уже рассказывал как можно немного ускорить создание видео-клипов в этом редакторе, но сегодня я пошел дальше и немного модифицировал скрипты автоматизированной сборки Kdenlive для поддержки CUDA.


Сборка и установка дополнительных кодеков для Asterisk (Codec Translators)

Сборка и установка дополнительных кодеков для Asterisk (Codec Translators)

Небольшая шпаргалка как в FreePBX-core добавить проприетарные кодеки. Часть кодеков вы можете использовать бесплатно, а например для кодека g729a вам придется приобрести лицензию. Лицензии покупаются на количество конкурентных подключений и для кодека g729a лицензия стоит 8 долларов, что не так уж и дорого если у вас не колл-центр.


Скрипт сборки VOIP клиента Linphone из исходных кодов (для Ubuntu Linux)

Скрипт сборки VOIP клиента Linphone из исходных кодов (для Ubuntu Linux)

Flexisip, Linphone и еще несколько технологий представляют собой OpenSource часть VOIP-инфраструктуры разрабатываемой Belledonne Communications и на данный момент это единственное решение IP-телефонии в Linux где помимо голосовых звонков, дополнительно представлен полноценный групповой чат и видео-звонки. Одним из главных минусов этой технологии является ее слабая распространенность и как следствие она недостаточно документирована, но как показывает практика официальной документации вполне хватает, а в случае чего можно и в исходные коды залезть.


Сборка Power DNS рекусора из исходных кодов

Сборка Power DNS рекусора из исходных кодов

Сборка DNS-рекурсора особой сложности не представляет и я написал эту заметку исключительно для того чтобы в дальнейшем не мучаться с подбором необходимых для сборки зависимых пакетов


Отзывы и комментарии