Репозиторий проекта на гите Raspberry Pi — в народе она же малинка — хорошо известная среди гиков платформа для экспериментов и прототипирования разной степени умности гаджетов.Думаю тут вряд-ли имеет смысл вдаваться в подробную историческую справку, просто хочу отметить что я давно питаю любовь к этим одноплатникам — делал на их базе несколько арт-ботов, (один из них до сих пор работает в телеге), делал конвертор лая моей собаки в твиты (и таким образом, листая свою ленту, узнавал, что ей неспокойно, пока я на работе), испытывал сервера на node.js, хостил на нем свой веб-сервер (практически это довольно бессмысленно, но прикольно) и тд Использовать малинку как эмулятор старых игр — очень распространенная практика — для этого под нее существует аж несколько готовых эмуляционных систем:  Retropie, RecalBox или Lakka. Чтобы их поставить — семи пядей во лбу не нужно — просто записываешь образ любой понравившейся системы на микро SD карту (это «жесткий» диск малинки),  закидываешь ромы игр в папку roms, вставляешь это дело в рашпери, подключаешь монитор и любой геймпад — готово.  Конечно, в отличии от готовых решений типа Nintendo mini classic — сами игры в комплект не входят, и тут — важный дисклеймер: игры, (кроме тех случаев, где их принадлежность к паблик-домену непрозрачно указана) — даже самые древние, которые уже не купить в магазине легально, все еще принадлежат своим правообладателям! *Поэтому ищем на свой страх и риск, исключительно в ознакомительных целях. Гугл справляется с этим на отлично, есть большие тематические форумы и сайты.  От себя, я бы сказал, что в случае, если вы обладатель купленной копии игры, использовать ее образ в эмуляторе кажется наиболее морально и этически приемлемым, однако юридически — это может нарушать лицензионные соглашения. Тем не менее не думаю, что боевые спецназовцы из Atari срочно сделают машину времени и придут ловить вас с поличным :) Цена вопроса такой самоделки может быть даже выше, чем готовые решения для ретро-гейминга от той же нинтендо, учитывая, что для рашпери понадобится блок питания не меньше 2.5A для RPi3 и не меньше 3A для четвертой малинки, сама SD карта минимум на 16 gb, (не менее 10 класса и желательно быстрая) геймпады и тд. Все это в комплект не входит (разве что вы покупаете готовый бандл в магазине) Зато есть полная гибкость — вы не привязаны к одной платформе (SNES в случае с nintendo classic mini). На третьей малинке вполне легко без дополнительного охлада можно поиграть в игры для первой плойки — тот же Tekken3, Final Fantasy 7, Silent Hill — будет вполне бюджетно, а четвертая малинка с небольшим оверклокингом и охладом без проблем запускает хиты для Dreamcast — Сrazy Taxi, Sonic Adventures 2, Shenmue Короче, стоит всерьез рассматривать — если хотите упороться и дух гика в вас живет — в остальных случаях ничего не мешает поставить тот же OpenEmu просто на рабочий комп и в ус не дуть. К тому же он бесплатный. Мой эксперимент с ретро-консолью и проездными на метро вместо картриджей возник довольно спонтанно. Вообще я просто ждал, когда с али-экспресса мне приедут два чудо-девайса для рашпери: Вот такой 4-х дюймовый 7(!)-цветный e-paper экран  — я обожаю «бумажные» дисплеи в читалках, есть в этой технологии какая-то аналогово-цифровая магия, а тут он еще и цветной. Конечно это сугубо не для видео и не для гейминга, там полное обновление изображения занимает секунд 15 (кстати в процессе довольно классно переливается и моргает), но я давно хотел с этим что-нибудь придумать, например сделать игру, где частота кадров 4 кадра в минуту — не баг, а фича. В общем, брал скорее на будущее, с намерением что-то классное с этим потом сделать Модуль автономного питания c аккумуляторами, который крепится пинами прям к задней панели малинки, не занимая гребенку пинов GPIO. Впоследствии он оказался скорее бесполезным — вернее, это отличная штука для нетребовательных задач, но с ретропаем или запущенной в графическом режиме OS он недодает по вольтажу — в дримкаст с таким точно не поиграешь.  Возможно это можно пофиксить, или поискать другие аккумы — не спец по электронике, но на всякий случай написал в техподдержку waveshare — вообще говоря довольно странно, что предупреждение о недо-вольтаже возникает даже при штатном использовании с третьей малинкой. UPD: проблему недо-вольтажа можно решить дополнительно запитав малинку через ее штатный usb c порт — подключить шнур USB одним концом к USB порту модуля автономного питания, а type-c в обычный вход для питания малинки. ВАЖНО: нельзя совмещать одновременно автономное питание и обычное питание от розетки, (сам блок с батарейками при этом может быть подключен к розетке, но либо все через батарейки, либо без них обычным штатным питаловом. Девайсы пришли на почту, захотелось протестировать их в действии, и тут я вспомнил, что в шкафу у меня завалялась целая куча использованных проездных на метро. Так как по сути в них обычная NFC метка, была идея использовать их для проекта с RFID сканером в качестве ключа или триггера Недолго думая, я решил попробовать собрать портативную консоль, которая запускала бы любимые игры по «единому», читая команду с метки через сканер RFID. Для рашпери есть вот такая «шляпа»:  Удобно, что на плате есть удлинитель GPIO пинов, стало быть прикрепив модуль к малинке первым слоем, сверху к этому бутерброду можно добавить и «бумажный» экран и использовать его например для показа артов / обложки запущенной игры и для (неспешного) мониторинга системы — заряд батареи, температура процессора и тд. Rasberry PI 4 / 4gb была в запасах не задействованная 3-я, но уж очень хотелось в Dreamcast :) Брал сразу набором на амперке, чтобы не искать по отдельности все нужные шнуры (microHDMI — HDMI) и блок питания (четверка к ним особо привередлива), плюс там в наборе уже есть микро sd c RaspberryPi OS на 16 гигов. Мне не потребовалась, использовал свою с большим объемом, но лишней точно не будет :) Весь комплект на амперке 10500р — на алике аналогичный возможно обойдется дешевле, но мне не терпелось PN532 NFC hat — 1900р 4` ACeP 7-Color E-Paper E-Ink Display HAT ~3600р UPS HAT (B) ~1600р 2 аккумулятора 16850 ~1200р один вентилятор и 2 медных радиатора для рашпери ~500р большая micro sd карта 256 gb samsung ~3500р лего для корпуса ~1200р геймпад (любой, у меня от плойки) Получилось, прямо скажем, не очень бюджетно — но этот набор можно урезать раза в 2 — 2.5, если убрать экран и питалово на аккумах, которое, как выяснилось позже, оказалось не особо полезным для этой цели. (хотя и позволяет поиграть в нетребовательные игры) Также SD карточка может быть существенно поменьше, я брал с запасом надолго. Также нужно немного охладить нашу малинку — радиаторы для нее самоклеющиеся, насаживаю один на чип процесора и видеоядра (они рядом) плюс маленький вентилятор: Цепляется он за 4 и 6 пин на GPIO — черным к земле на 6 и красным на 4 (5-вольтовая линия).   Проблема что вся гребенка у меня уже занята NFC модулем, поэтому я просто вытащил два проводка из джампера, оголил кончики и аккуратно припаял насадил маленькими петельками их на пины, прижав сверху  NFC модулем. Делать так конечно категорически не правильно — лучше аккуратно припаять, но паяльника у меня не было, да и паять я не мастер. В любом случае, очень важно, чтобы ничего не замыкало провода и они были изолированы друг от друга.  Несмотря на такой колхоз, получилось в целом достаточно аккуратно, а модуль сверху, придавливая, дополнительно все фиксирует. Сам NFC модуль имеет три режима — по какому интерфейсу коммуницировать с малинкой: UART, SPI и I2C. Для переключения режимов, перед тем как накрывать все это дело экраном и собрать в самопальный корпус из лего — нужно выставить джамперы и переключатели в нужную позицию.  Опытным путем мне подошел интерфейс I2C (про установку и настройку waveshare модулей у них всегда очень подробно изложено в вики). В моем случае я использовал I2C, так как SPI уже по умолчанию был занят экраном, и по тестам такое подключение сработало лучше всего. Позицию переключателей проще всего регулировать булавкой или иголкой, пальцы для такого великоваты :) В выборе эмуляционной системы, я однозначно остановился на Retropie — он представляет собой не отдельную в вакууме ось, а надстройку над существующей и хорошо знакомой raspberry pi OS, а это уже даёт привычную среду для дальнейшей кастомизации и настройки.  Да и комьюнити и документации там побольше. Установка предельно простая: скачиваем imager с официального сайта raspberry pi, вставляем micro SD в комп, и в выборе операционки в imager выбираем ретропай для нашей версии малинки (3 и 4 несовместимы между собой!)  Записываем образ на sd-карту, вставляем в малинку, подключаем к ней монитор, геймпад и клавиатуру (понадобится в ходе настройки) подключаем питание, и ждём загрузку системы.  Ретропай сходу определит геймпад и предложит его «замэпить» — просто следуем инструкции и нажимаем нужные кнопки. Последний хоткей я оставляю нетронутым, тогда им по умолчанию становится кнопка select.  Далее в играх под ретроарчем select+start — выход, select+Y — быстрое меню ретроарч в игре, которое позволяет сохранить текущий стейт игры, настроить контроллер и много всяких дополнительных плюшек. Затем в пункте меню Retropie идем в настройки, настраиваем вайфай, заходим в пункт raspi-config (понадобится клавиатура) — в пункте 3: Interface Options включаем все необходимые интерфейсы, в моем случае это: SSH, I2C, SPI Перезагружаем. SSH позволяет удаленно управлять малинкой с другого компа через командную строку терминала. Для этого необходимо узнать ее локальный IP-адрес, после подключения к вайфаю сделать это можно просто в основном меню настроек ретропая — там есть соотвествующий пункт «показать IP» например мой: 192.168.200.11 открываем с рабочего компа терминал и пишем: у нас спросят пароль, если вы специально его не меняли пишем raspberry Следующим шагом — в дополнении в ретропаю, можно установить и десктоп — мне он пригодился для одной задачи, но в целом делать это не обязательно, особенно если места не очень много.  Идем в retropie-setup в пункте tools ищем строку raspbian related tools — выбираем install pixel desktop. После этого выход из emulation station в десктоп можно совершить нажатием кнопки F4 — в командной строке набираем startx жмем ENTER (или через основное меню — наряду с логотипами приставок там появится пункт PORTS — вызвать десктоп можно оттуда) По умолчанию в ретропай не включены все эмуляторы, которые он в принципе поддерживает. Тоже идем в настройки ретропая смотрим дополнительные пакеты и ставим. Некоторые лежат в экспериментальных.  Если избирательно — просто ищите нужную вам платформу на сайте ретропая и смотрите вики по настройке и нужному эмулятору, у меня места много, поэтому я просто установил их все разом (это заняло какое-то время). Вроде все основные пункты по самому ретропаю я осветил, но всю эту инфу можно без проблем и во всех подробностях найти в сети :) Тут все просто — инструкции для e-paper экрана, NFC сканнер и UPS блок с аккумуляторами подробно расписаны у производителя на вики страничках:экран , UPS , NFC сканер Писать свой скрипт я буду на питоне, поэтому использую инструкции для установки и скрипты-примеры для него. Все это делается в терминале, если делать на самой рашпери — выходим в режим терминала из графического режима emulation station нажатием клавиши F4, или, если накатили поверх ретропая десктоп — выходим в него и запускаем терминал там.  Мне же проще всего было проделывать все это удаленно, через SSH — так и команды с вики можно просто копипастить в терминал :) Я начал с экрана, попутно по инструкции, устанавливаем весь нужный софт и библиотеки, основное что нам потребуется это менеджер пакетов для питона pip3 Запуск примеров: после того, как установили, в терминале переходим в директорию, где лежат примеры. Навигация по каталогам:  cd /путь-к-папке/ cd .. перейти на уровень вышеcd ~  перейти в домашнюю директориюls  выводит список файлов и папок внутри директориидля быстрого перехода можно набирая команды использовать клавишу tab для автонабора нужных файлов и директорий  Запуск примера с экраном, находясь в директории со скриптами: Все картинки для e-paper экрана строго ограничены цветовой палитрой, никаких полутонов, а это значит, что их нужно прогонять через dithering-алгоритм.  Проще всего делать это в фотошопе, а тут есть подробная инструкция. Также разрешение должно быть точно таким же, как и разрешение самого экрана, у меня 640×400. В тестовых скриптах есть примеры и картинки, вместо них можно подставить свои картинки и проверить. По моей задумке экран показывает обложку игры, когда я запускаю ее через «картридж» то есть проездной :) Вне игры, в режиме ожидания, чтобы была какая-то картинка, можно зарядить любую свою, я же пока решил использовать свой старый скетч на процессинге, который писал черт знает когда, с генератором рандомных морд Малинка хорошо дружит с процессингом (но именно для этого я ставил десктоп, чтобы все установить и проверить запуск скетчей в редакторе), А тут есть детальный гид, как запускать скетчи на процессинге в командной строке, без экрана. Мне потребовалось лишь адаптировать разрешение сохраняемой картинки и цвета, чтобы они соответствовали палитре экрана.  В итоге, команду на запуск скетча с генерацией картинки я вывел в отдельный исполняемый шелл-скрипт (о них подробнее будет позже), то есть он запускается из-под консоли, минуя сам графический интерфейс редактора В целом получилось так: каждые 5 минут в финальном скрипте, если сейчас не запущена игра, мы обновляем экран, и даем команду на запуск скетча, скетч сохраняет картинку в нужную директорию (переписывает один и тот же файл) — и ee мы используем при следующем обновлении экрана.  Вообще говоря, в самом питоне уже есть библиотека для работы с графикой PIL (она устанавливается по инструкции вместе с экраном) и аналогичный скетч с генеративной графикой можно написать непосредственно в нем, но мне было лень разбираться, да и не особо нужно.  Можно просто накачать набор тематических картинок и показывать случайную без всяких лишних заморочек :)  А можно и вовсе рассмотреть варианты сборки, где экран не дополнительный / декоративный, а на нем и играть прям можно, тогда вся задумка с портативностью и батарейками будет еще более уместной.  Для малинки существует множество таких экранов, которые подключаются по GPIO + HDMI. Но меня лично заинтересовал вариант с подключением по DSI (к специальной шине для подключения дисплея на рашпери) типа такого  — так можно собрать все компактно, без лишних проводов. С батарейным блоком поступил аналогично — просто следовал инструкции с вики, потестил скрипт индикации заряда в консоли — все работает Если при запуске скрипта с примером консоль ругается на отсутствие какого-то модуля — устанавливаем этот модуль через pip, например, когда я ставил по инструкции модуль с батарейками, у меня не была установлена библиотека smbus. Фиксим: Если запустим пример — увидим, как терминал пишет текущий уровень заряда Точно так же с NFC hat: инструкция здесь подключал по I2C интерфейсу.В примерах несколько питон-скриптов на чтение и запись RFID меток. Ключ, который выглядит как таблетка от домофона (идет в комплекте с платой) и читается и записывается. Но проездные, по понятной причине только читаются — от записи они защищены, иначе так каждый «умелец» мог бы обеспечить себе безлимитный бесплатный проезд :)  Можно купить чистые RFID метки и несколько упростить себе жизнь, ведь так можно на сами карточки напрямую записать команду запуска определенной игры.  Но у меня таких не было, да и определенный reuse шарм в таком случае пропадает. Тем более, что когда свободные «картриджи» закончатся, можно бесплатно пополнить запасы в мусорном ведре у турникета :)) Невозможность записи я обошел по-другому — у каждого такого проездного есть свой UID, выглядит как уникальный hex код, типа такого: b'4\xc1\xf7\xa9W\x8b\xa7'  Именно его мы можем прочесть в терминале, приложив карточку к сканеру. А если мы можем его прочесть, значит мы можем использовать его как ключ к запуску, просто записав его как ключ в dictionary:  Впоследствии соберу свой каталог в отдельный скрипт, команды запуска лежат исполняемыми .sh файлами — об этом расскажу ниже. Беру все нужные мне штуки из скриптов-примеров для модулей, делаю отдельную директорию home/pi/MagicBox — переношу туда нужные библиотеки (вся структура по ссылке на гите) и комбинирую это все уже в своем скрипте. Мой код далеко не идеальный, но все работает. Честно говоря, первый раз пишу на питоне, приходилась долго привыкать не ставить автоматом фигурные скобки {}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{} :-) Cтруктура такая: основной скрипт называется go.pyв нем логика самого сканера карточек и мониторинг других модулей: батареи и экрана. необходим модуль subprocess:sudo pip3 install subprocess каталог / словарик с карточками-«картриджами» catalogue.py battery.py там практически без изменений скрипт INA219.py из примера.Добавил только автоматическое выключение системы, если уровень заряда меньше 2% и мониторинг температуры процессора screen.py — там методы для обновления бумажного экрана, ему пасуем картинку и тд Устроено это так: есть основной скрипт, в нем два потока — один отвечает за инфу на экране, каждые 10 секунд смотрит есть ли активный картридж с картинкой, мониторит батарею и температуру процессора, другой же отвечает за сканер, и если прикладываешь проездной и он есть в картотеке — запускает игру, и передает мониторинг-системе инфу о картридже, чтобы поменять картинку. И третий цикл в основном потоке для обновления картинок в режиме ожидания, если нет картриджа ждет 5 минут и меняет на картинку с мордами. *по возможности НИКОГДА не выключайте малинку просто обрубив питание. Микро-SD карточки, на которых записана система очень чувствительны к такого рода стрессам, будут ошибки и бэд-блоки на диске, а то и вовсе полетит система. Именно поэтому, если что-то получилось сделать — советую делать бекап образа, чтобы в случае такой поломки из него можно было восстановить и перезаписать образ системы В каталоге я предусмотрел 2 синих проездных с записанными системными командами reboot (sudo reboot) и выключение (sudo shutdown -h now), которые, в случае чего, позволяют быстро выключить или перезапустить малинку безопасно. По-хорошему бы конечно кнопку отдельную вынести, но не было. (и лень) Весь код писал в SublimeText удаленно, подключив рашпери к компу через протокол Samba, чтобы в проводнике был доступ к файловой системе малинки.  Смотрим тут если что, там ничего сложного: https://ramokromok.com/threads/setting-up-samba-share-on-windows-10-to-access-files-on-the-retropie.105/ Поскольку в настройках по умолчанию в самбе мы видим только папки roms, bios и splashscreens, а свою директорию с программой я сделал в home — обновляю настройки самбы, включив в него доступ ко всей директории home: sudo — запуск чего-либо с правами админаnano — это текстовый редактор в терминале в нано: ctrl + O → ENTER  — сохранитьctrl + X — выйти теперь помимо SSH мы можем получить доступ к фалам и папкам малинки прямо в проводнике, создавать и менять там файлы, закидывать ромы игр и тд. (правда иногда это может быть довольно медленно). В ретропай, для запуска команд (игр в нашем случае) через консоль, минуя графический интерфейc emulation station, существует шел-скрипт runcommand.shЗапуск игр в нем осуществляется с такими параметрами: /opt/retropie/supplementary/runcommand/runcommand.sh 0 _SYS_ nes '/home/pi/RetroPie/roms/nes/SuperMarioBros.nes' То есть: <сам путь к скрипту>, <система (эмулятор)>  <и путь к файлу с ромом> Для того чтобы скрипт корректно отработал, предполагается, что мы выходим из графического режима emulation station и запускаем все это дело через терминал. Следовательно, перед запуском игры по проездному, нам нужно «убить» все процессы emulation station или уже запущенные ранее игры. Для того, чтобы наш питон-скрипт умел запускать и выполнять команды в терминале, добавляем ему в модули import os (или аналогичная вещь subprocess) У каждого процесса в диспетчере задач есть свой уникальный номер, наша задача его выяснить и нежно вырубить командой Аргумент -15 это SIGTERM (то есть нежно) -9 SIGKILL (то есть жестко)всегда по возможности лучше нежно)) Делаем массив имен процессов (это список всех возможных эмуляторов и сама emulation station)  посылаем его на проверку методу kill_process в скрипте go.pyтак же, через консольную команду:  Выводим полную строку этого процесса в диспетчере задач, где первым элементом будет как раз ID процесса, который мы убиваем. И так будет со всеми!!! emulation-station может вырубится не сразу, и тогда может случится асинхрон, все процессы еще не вырубились, а игра уже запустилась, но при этом на экране мы ее не увидим.  Делаем для нее дополнительную проверку на наличие этого процесса в диспетчере в цикле, def process_is_running(proc_name) —<переключить на черно-белый режим> и убивать, убивать, убивать (секунды за 2-3 это происходит) — и только после этого даем команду на запуск рома через runcommand.sh Поскольку команды запуска довольно длинные, и не хотелось их вручную выносить в сам скрипт каталога (будет просто мешанина из стрингов!), я организовал отдельные исполняемые шелл-скрипты под каждую игрулю.  sh-скрипт делается так:в терминале переходим в нужную нам директорию, у меня это папка в домашней директории /MagicBox/run/пример: nano — консольный текстовый редактор, crazyTaxi — карточка для игры Crazy Taxi, которую будем делать, .sh — расширение шел-скрипта. В открывшемся редакторе пишу текст команды: ctrl + O → ENTER сохранитьctrl + X выйти из nano Это означает: запусти игру по такому-то пути, а на выходе из игры запусти обратно emulation station К тому же, при таком подходе, сам путь к директории нужной игры легко скопировать из проводника, а не писать его ручками, меняя все пробелы в строке на понятные компу "\ "  (по крайней мере на маке все пути корректно копируются в терминал, так, что компуктер это понимает) Далее этому файлу нужно дать доступ, то есть сделать его по настоящему исполняемым. В линуксе очень гибкая система настройки пользовательских прав, есть куча разных атрибутов, но я человек простой и использую ультимейт права для всех подобных скриптов, если не нужно сильно беспокоится о безопасности, поэтому далее: sudo — это как запустить команду с правами администратора, chmod 777 — ставит права доступа на чтение запись и исполнение любому пользователю Далее, в питон-скрипте просто указываем ссылку на директорию где лежат наши .sh скрипты с карточками, и вместо множества букв пасуем эти карточки в словарик с играми. Дополнительно я сделал две системные карточки на выключение и перезагрузку малинки, команды там простые и короткие, поэтому отдельных шел-скриптов, как с играми я не делал:перезагрузка — sudo reboot / выключение — sudo shutdown -h now Осталось только сделать так, чтобы наш основной скрипт запускался автоматом вместе с системой. Для этого в ретропае тоже есть скрипт autostart.shидем к нему и редактируем: Мой основной скрипт называется go.py и лежит он в папке home/MagicBox/runпишем команду запуска скрипта: ctrl + O → ENTER / ctrl + X Так, на старте системы, мы запустим скрипт в основном окне терминала, но если я захочу добавить новые карточки, будет не очень сподручно смотреть их UID код и добавлять в словарик новые ключи.  Сейчас программа, если я прикладываю «чистый» проездной печатает в терминал его UID — соответсвенно я его копирую и записываю ключом в словарик. Если я ставлю запуск всей системы в автостарт — мой питон скрипт крутится к "главном" окне терминала под emulation station — если я хочу посмотреть вывод в консоль, скопировать чистый ключ, просто подключившись через SSH у меня не получится, нужно смотреть на самой малинке, то есть подрубать клаву, нажимать F4 — смотреть, запоминать — неудобно! (хотя возможно, можно подключить логирование и просмотр записи лога в SSH, но я пока не разобрался) На помощь мне приходит замечательное консольное приложение tmux, не раз им пользовался. Оно позволяет организовать работу в терминале «вкладками», которые можно открывать и «сворачивать» не завершая сам процесс. Я хочу сам основной скрипт закрепить в такой вкладке, чтобы можно было из любого места подключаться и смотреть вывод.  То есть, я смогу подключится к малинке по SSH, развернуть вкладку, в которой запущен скрипт, приложить новую карточку и скопировать UID, который высветится в терминале, и потом записать его в каталог.  Тмукса нет по умолчанию в малинке, его надо установить: шпаргалка по tmux Делаю очередной шел-скрипт, в папке /home/pi/bin, чтобы запуск нашего питон скрипта происходил в tmux-вкладке: пишу: Это значит, что на старте системы я создаю новую вкладку, в которой запускаю наш питон-скрипт. Далее, я могу развернуть эту вкладку через SSH или в терминале самой малинки командой:  А свернуть ее сочетанием клавиш ctrl+B+DТеперь можно отредактировать автостарт: закомментировал запуск пайтон-скрипта напрямую, вместо него вписываю команду на запуск шелл-скрипта:  Есть правда один минус — запуская скрипт в основном окне терминала, без тмукса, прикладывая карту мы сразу видим на экране дефолтный ретропаевский сплэш-скрин загрузки (выглядит он "терминально" и не то чтобы очень красиво, зато с точки зрения обратной связи сразу понятно — тут что-то происходит) С тмуксом — нас выбивает в чистую консоль и через пяток секунд запускается игра. Но поскольку я то знаю, что она запустится, меня это не особо смущает. В конце концов, можно заполнить так всю картотеку, а потом уже перенести запуск скрипта в автостарт напрямую (ну и обратную операцию мы можем сделать в любой момент). С штатными настройками система хорошо справляется с играми PSX и попроще, если хотим поиграть в Dreamcast шедевры, нужно будет немного разогнать проц и видеоядро. Для этого в терминале пишем я использовал такие настройки: arm_freq=1950over_voltage=4gpu_freq=600v3d-freq=750 Конечно, тогда точно потребуется минимальное охлаждение, у меня с маленьким медным радиатором и вентилятором в процессе игры температура колеблется в районе 52—60° доходя до 65° максимум, что в общем, вполне в пределах разумного. Хочу сказать, что в процессе сборки всего проекта, я обнаружил, что меня не первого осенило использовать ретропай в связке с NFC сканером. В сети немного, но есть похожие проекты, которые впоследствии прояснили мне много чего про логику самой работы ретропая. Например есть аналогичный очень добротный проект тут. Кое-что по коду я подтырил у него, хотя это и потребовало значительной адаптации.Но там все по-серьезному: с 3D печатью, картриджи имитируют вид оригинальных и тд.  Мне же нравится, что получилась немного "колхозная", но самостоятельная история, которая не столько напрямую имитирует вид старых консолей и картриджи, сколько просто дает в такой новой форме аналоговые ощущения. Да и сама идея использовать для этого проездные мне показалось занятной. Буду рад если кому-то пригодится этот гид — полностью или частично.И буду рад любому фидбеку и предложениям — я далеко не эксперт ни в линуксе ни в питоне :) медиа-художник, разработчик игр, unity / c#