<?xml version="1.0" encoding="utf-8" ?><rss version="2.0" xmlns:tt="http://teletype.in/" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:media="http://search.yahoo.com/mrss/"><channel><title>wasdswag</title><generator>teletype.in</generator><description><![CDATA[wasdswag]]></description><image><url>https://img4.teletype.in/files/b7/2d/b72d09d9-7eeb-4758-a479-eceeac89b2cb.jpeg</url><title>wasdswag</title><link>https://teletype.in/@wasdswag</link></image><link>https://teletype.in/@wasdswag?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=wasdswag</link><atom:link rel="self" type="application/rss+xml" href="https://teletype.in/rss/wasdswag?offset=0"></atom:link><atom:link rel="next" type="application/rss+xml" href="https://teletype.in/rss/wasdswag?offset=10"></atom:link><atom:link rel="search" type="application/opensearchdescription+xml" title="Teletype" href="https://teletype.in/opensearch.xml"></atom:link><pubDate>Sun, 31 May 2026 03:04:59 GMT</pubDate><lastBuildDate>Sun, 31 May 2026 03:04:59 GMT</lastBuildDate><item><guid isPermaLink="true">https://teletype.in/@wasdswag/8_f-Qxqekjc</guid><link>https://teletype.in/@wasdswag/8_f-Qxqekjc?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=wasdswag</link><comments>https://teletype.in/@wasdswag/8_f-Qxqekjc?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=wasdswag#comments</comments><dc:creator>wasdswag</dc:creator><title>retropie+nfc</title><pubDate>Mon, 08 Nov 2021 21:10:35 GMT</pubDate><media:content medium="image" url="https://img1.teletype.in/files/c8/91/c891343d-cca6-4350-9bf8-ba3afdc398d0.jpeg"></media:content><description><![CDATA[<img src="https://img2.teletype.in/files/9e/d3/9ed39dfd-06e7-445d-a961-834f4d1196be.jpeg"></img>]]></description><content:encoded><![CDATA[
  <h2 id="RIyv"><a href="https://teletype.in/@wasdswag/retropie" target="_blank">поменял url %) <br />инструкция по сборке ретро-консоли с проездными от метро теперь лежит тут:</a></h2>
  <p id="e1Gs"></p>
  <figure id="v8zR" class="m_original">
    <img src="https://img2.teletype.in/files/9e/d3/9ed39dfd-06e7-445d-a961-834f4d1196be.jpeg" width="960" />
  </figure>

]]></content:encoded></item><item><guid isPermaLink="true">https://teletype.in/@wasdswag/retropie</guid><link>https://teletype.in/@wasdswag/retropie?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=wasdswag</link><comments>https://teletype.in/@wasdswag/retropie?utm_source=teletype&amp;utm_medium=feed_rss&amp;utm_campaign=wasdswag#comments</comments><dc:creator>wasdswag</dc:creator><title>как я собирал ретро-консоль на базе raspberry pi 4 и подружил ее с проездными московского метро</title><pubDate>Mon, 08 Nov 2021 07:03:12 GMT</pubDate><media:content medium="image" url="https://img3.teletype.in/files/25/14/25141328-6d93-45e8-9c00-64296b6b7ca8.jpeg"></media:content><description><![CDATA[<img src="https://img1.teletype.in/files/04/2b/042bb50a-a0f3-48ea-af13-3b70477bcc4e.jpeg"></img>Raspberry Pi — в народе она же малинка — одноплатный компьютер размером с кредитку, к которому можно подключить монитор мышь и клавиатуру и пользоваться ей как обычным десктопным компом, в качестве системы по умолчанию на него устанавливается линукс-дистрибутив на базе Debian — RaspberryPi OS, так же можно накатить Ubuntu или другую линукс системы с поддержкой ARM процессора. ]]></description><content:encoded><![CDATA[
  <h2 id="5UB4"><br />репозиторий проекта на гите:<br /><a href="https://github.com/wasdswag/MagicBox" target="_blank">https://github.com/wasdswag/MagicBox</a></h2>
  <h3 id="VjPc"></h3>
  <figure id="WJmi" class="m_column">
    <iframe src="https://www.youtube.com/embed/pSekRT9MNEU?autoplay=0&loop=0&mute=0"></iframe>
  </figure>
  <h2 id="doIx">немного исторической справки:</h2>
  <p id="xRLI">Raspberry Pi — в народе она же малинка — одноплатный компьютер размером с кредитку, к которому можно подключить монитор мышь и клавиатуру и пользоваться ей как обычным десктопным компом, в качестве системы по умолчанию на него устанавливается линукс-дистрибутив на базе Debian — RaspberryPi OS, так же можно накатить Ubuntu или другую линукс системы с поддержкой ARM процессора. </p>
  <p id="4Lxr"></p>
  <figure id="8yLR" class="m_column">
    <img src="https://img1.teletype.in/files/04/2b/042bb50a-a0f3-48ea-af13-3b70477bcc4e.jpeg" width="2000" />
  </figure>
  <p id="bKYq"></p>
  <p id="dQmv">Но любят его далеко не за «десктоп», пусть и миниатюрный, — для обычных рабочих дел машинка слабовата и едва ли потягается в производительности с обыкновенным смартфоном на андройде, ютубчик в браузере посмотреть со скрипом можно, но не более того. Малинка давно зарекомендовала себя как платформа для различных самоделок и экспериментов, в сети можно найти множество интересных проектов под raspberry pi, от роботов до метеостанций и «умных» зеркал. </p>
  <p id="RDWi">В совокупности с кучей всяких модулей, расширений и всевозможных сенсоров, которые удобно цепляются за ее гребенку пинов GPIO — платформа становится незаменимой игрушкой для гиков и отличным полигоном для прототипирования различных «умных» гаджетов. А полноценный линукс на борту и приличная производительность последней четвертой ревизии девайса дают еще большую гибкость для любых творческих экспериментов :)</p>
  <p id="XnQM">Я давно питаю любовь к этим одноплатникам — делал на их базе несколько арт-ботов, (один из них до сих пор работает в телеге), делал <a href="https://www.youtube.com/watch?v=CJaorNaS-Ng" target="_blank">конвертор лая моей собаки в твиты</a> (и таким образом, листая свою ленту, узнавал, что ей неспокойно, пока я на работе), испытывал сервера на node.js, хостил на нем свой веб-сервер (практически это довольно бессмысленно, но прикольно) и тд</p>
  <p id="1SAo">Использовать малинку как эмулятор старых игр — очень распространенная практика — для этого под нее существует аж несколько готовых эмуляционных систем:  <a href="https://retropie.org.uk/" target="_blank">Retropie</a>, <a href="https://www.recalbox.com/" target="_blank">RecalBox</a> или <a href="https://www.lakka.tv/" target="_blank">Lakka.</a></p>
  <p id="iAjo">Чтобы их поставить — семи пудов во лбу не нужно — просто записываешь образ любой понравившейся системы на микро SD карту (это «жесткий» диск малинки),  закидываешь ромы игр в папку roms, вставляешь это дело в рашпери, подключаешь монитор и любой геймпад — готово. </p>
  <p id="AnPZ">Конечно, в отличии от готовых решений типа Nintendo mini classic — сами игры в комплект не входят, и тут —</p>
  <section style="background-color:hsl(hsl(323, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="j4Of"><strong>важный дисклеймер:</strong></p>
    <p id="GLNL"><strong>игры, (кроме тех случаев, где их принадлежность к паблик-домену непрозрачно указана) — даже самые древние, которые уже не купить в магазине легально, все еще принадлежат своим правообладателям! </strong></p>
  </section>
  <p id="pwh5"><em>*Поэтому ищем на свой страх и риск, исключительно в ознакомительных целях. Гугл справляется с этим на отлично, есть большие тематические форумы и сайты. </em></p>
  <p id="VTZb">От себя, я бы сказал, что в случае, если вы обладатель купленной копии игры, использовать ее образ в эмуляторе кажется наиболее морально и этически приемлемым, однако юридически — это может нарушать лицензионные соглашения. Тем не менее не думаю, что боевые спецназовцы из Atari срочно сделают машину времени и придут ловить вас с поличным :)</p>
  <p id="G90Q">Цена вопроса такой самоделки может быть даже выше, чем готовые решения для ретро-гейминга от той же нинтендо, учитывая, что для рашпери понадобится блок питания не меньше 2.5A для RPi3 и не меньше 3A для четвертой малинки, сама SD карта минимум на 16 gb, (не менее 10 класса и желательно быстрая) геймпады и тд. Все это в комплект не входит (разве что вы покупаете готовый бандл в магазине) </p>
  <p id="eZCC">Зато есть полная гибкость — вы не привязаны к одной платформе (SNES в случае с nintendo classic mini). На третьей малинке вполне легко без дополнительного охлада можно поиграть в игры для первой плойки — тот же Tekken3, Final Fantasy 7, Silent Hill — будет вполне бюджетно, а четвертая малинка с небольшим оверклокингом и охладом без проблем запускает хиты для Dreamcast — Сrazy Taxi, Sonic Adventures 2, Shenmue</p>
  <p id="jqj7">Короче, стоит всерьез рассматривать — если хотите упороться и дух гика в вас живет — в остальных случаях ничего не мешает поставить тот же OpenEmu просто на рабочий комп и в ус не дуть. К тому же он бесплатный.</p>
  <p id="mkBo"></p>
  <h2 id="1DC8">ближе к делу:</h2>
  <p id="XlWr">Мой эксперимент с ретро-консолью и проездными на метро вместо картриджей возник довольно спонтанно. Вообще я просто ждал, когда с али-экспресса мне приедут два чудо-девайса для рашпери:</p>
  <figure id="JOqO" class="m_column">
    <iframe src="https://www.youtube.com/embed/kJn_Kc-wgow?autoplay=0&loop=0&mute=0"></iframe>
  </figure>
  <p id="Zxmz">Вот такой 4-х дюймовый 7(!)-цветный <a href="https://www.waveshare.com/4.01inch-e-paper-hat-f.htm" target="_blank">e-paper экран</a>  — я обожаю «бумажные» дисплеи в читалках, есть в этой технологии какая-то аналогово-цифровая магия, а тут он еще и цветной. Конечно это сугубо не для видео и не для гейминга, там полное обновление изображения занимает секунд 15 (кстати в процессе довольно классно переливается и моргает), но я давно хотел с этим что-нибудь придумать, например сделать игру, где частота кадров 4 кадра в минуту — не баг, а фича. В общем, брал скорее на будущее, с намерением что-то классное с этим потом сделать</p>
  <figure id="Simi" class="m_original">
    <img src="https://img2.teletype.in/files/1f/25/1f25625b-9e74-4438-b044-37d5cbe86866.jpeg" width="800" />
  </figure>
  <p id="0u6W"><a href="https://www.waveshare.com/wiki/UPS_HAT_(B)" target="_blank">Модуль автономного питания</a> c аккумуляторами, который крепится пинами прям к задней панели малинки, не занимая гребенку пинов GPIO. Впоследствии он оказался скорее бесполезным — вернее, это отличная штука для нетребовательных задач, но с ретропаем или запущенной в графическом режиме OS он недодает по вольтажу — в дримкаст с таким точно не поиграешь. </p>
  <p id="Vf04">Возможно это можно пофиксить, или поискать другие аккумы — не спец по электронике, но на всякий случай написал в техподдержку waveshare — вообще говоря довольно странно, что предупреждение о недо-вольтаже возникает даже при штатном использовании с третьей малинкой.</p>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="8x1R"><strong>UPD</strong>: проблему недо-вольтажа можно решить дополнительно запитав малинку через ее штатный usb c порт — подключить шнур USB одним концом к USB порту модуля автономного питания, а type-c в обычный вход для питания малинки. <strong>ВАЖНО: </strong>нельзя совмещать одновременно автономное питание и обычное питание от розетки, (сам блок с батарейками при этом может быть подключен к розетке, но либо все через батарейки, либо без них обычным штатным питаловом.</p>
  </section>
  <p id="LnD7"></p>
  <p id="7Qvd">Девайсы пришли на почту, захотелось протестировать их в действии, и тут я вспомнил, что в шкафу у меня завалялась целая куча использованных проездных на метро. Так как по сути в них обычная NFC метка, была идея использовать их для проекта с RFID сканером в качестве ключа или триггера</p>
  <p id="s58S"></p>
  <figure id="ULqL" class="m_column">
    <img src="https://img3.teletype.in/files/ef/1f/ef1f0d53-1914-41cb-b43e-81b716753c1e.jpeg" width="2049" />
  </figure>
  <p id="Ze5k"></p>
  <p id="ExMf">Недолго думая, я решил попробовать собрать портативную консоль, которая запускала бы любимые игры по «единому», читая команду с метки через сканер RFID. Для рашпери есть вот такая «шляпа»: </p>
  <figure id="Co48" class="m_original">
    <img src="https://img3.teletype.in/files/2f/da/2fdaf1c8-f5ba-4f3f-91ff-f1d4c5af1e93.jpeg" width="800" />
    <figcaption>шляпа или hat — платы расширения для  Raspberry Pi, которые крепятся к ней через GPIO по приницпу бутерброда</figcaption>
  </figure>
  <p id="PiyE">Удобно, что на плате есть удлинитель GPIO пинов, стало быть прикрепив модуль к малинке первым слоем, сверху к этому бутерброду можно добавить и «бумажный» экран и использовать его например для показа артов / обложки запущенной игры и для (неспешного) мониторинга системы — заряд батареи, температура процессора и тд.</p>
  <p id="m6Ny"></p>
  <h2 id="wb9E">итого ингредиенты:</h2>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <ul id="Qnh9">
      <li id="CMGG"><strong>Rasberry PI 4 / 4gb</strong><br />была в запасах не задействованная 3-я, но уж очень хотелось в Dreamcast :) Брал сразу набором на <a href="https://amperka.ru/product/malina-v4-4gb" target="_blank">амперке, </a>чтобы не искать по отдельности все нужные шнуры (microHDMI — HDMI) и блок питания (четверка к ним особо привередлива), плюс там в наборе уже есть микро sd c RaspberryPi OS на 16 гигов.<br />Мне не потребовалась, использовал свою с большим объемом, но лишней точно не будет :)<br />Весь комплект на амперке 10500р — на алике аналогичный возможно обойдется дешевле, но мне не терпелось</li>
    </ul>
    <ul id="YAdq">
      <li id="ZgRj"><strong>PN532 NFC hat </strong>— 1900р</li>
    </ul>
    <ul id="G7yJ">
      <li id="FuPi"><strong>4&#x60; ACeP 7-Color E-Paper E-Ink Display HAT </strong>~3600р</li>
      <li id="S3Li"><strong>UPS HAT (B) </strong>~1600р</li>
      <li id="UQmt"><strong>2 аккумулятора 16850 </strong>~1200р</li>
      <li id="ZnTL"><strong>один вентилятор и 2 медных радиатора для рашпери </strong>~500р</li>
      <li id="0zpl"><strong>большая micro sd карта 256 gb samsung </strong>~3500р</li>
      <li id="sf9n"><strong>лего для корпуса </strong>~1200р</li>
      <li id="3zRZ"><strong>геймпад </strong>(любой, у меня от плойки)</li>
    </ul>
  </section>
  <p id="XWIz"></p>
  <p id="WCq6">Получилось, прямо скажем, не очень бюджетно — но этот набор можно урезать раза в 2-2,5, если убрать экран и питалово на аккумах, которое, как выяснилось позже, оказалось не особо полезным для этой цели. (хотя и позволяет поиграть в нетребовательные игры) Также sd карточка может быть существенно поменьше, я брал с запасом надолго.</p>
  <h3 id="gLxg"></h3>
  <h2 id="icoo">собираем бутерброд:</h2>
  <figure id="SBMD" class="m_column">
    <img src="https://img1.teletype.in/files/02/e9/02e9feba-997a-40c5-8404-516447b1096b.jpeg" width="922" />
  </figure>
  <figure id="Lbvn" class="m_original">
    <img src="https://img2.teletype.in/files/19/71/197173f7-7bda-42d3-aec5-31f9cf8558d7.jpeg" width="721" />
  </figure>
  <p id="aQPv">Также нужно немного охладить нашу малинку — радиаторы для нее самоклеющиеся, насаживаю один на чип процесора и видеоядра (они рядом) плюс маленький вентилятор:</p>
  <p id="sw5m"> </p>
  <figure id="iy4O" class="m_column">
    <img src="https://img4.teletype.in/files/b2/9a/b29a2ad9-a213-4bb9-a591-4e6d86be63f7.jpeg" width="1000" />
  </figure>
  <p id="tnfs">Цепляется он за 4 и 6 пин на GPIO — черным к земле на 6 и красным на 4 (5-вольтовая линия).  </p>
  <p id="Ag5r">Проблема что вся гребенка у меня уже занята NFC модулем, поэтому я просто вытащил два проводка из джампера, оголил кончики и аккуратно <s>припаял</s> насадил маленькими петельками их на пины, прижав сверху  NFC модулем.</p>
  <p id="r7xG">Делать так конечно<strong> категорически не правильно </strong>— лучше аккуратно припаять, но паяльника у меня не было, да и паять я не мастер. В любом случае, очень важно, чтобы ничего не замыкало провода и они были изолированы друг от друга. </p>
  <p id="pZV6">Несмотря на такой колхоз, получилось в целом достаточно аккуратно, а модуль сверху, придавливая, дополнительно все фиксирует.</p>
  <p id="kta2"></p>
  <figure id="ZmSq" class="m_column">
    <img src="https://img2.teletype.in/files/15/81/1581ec83-b7cf-476e-9505-9d010b601b00.jpeg" width="2076" />
  </figure>
  <p id="ivlM"></p>
  <p id="89rE">Сам NFC модуль имеет три режима — по какому интерфейсу коммуницировать с малинкой: UART, SPI и I2C. Для переключения режимов, перед тем как накрывать все это дело экраном и собрать в самопальный корпус из лего — нужно выставить джамперы и переключатели в нужную позицию. </p>
  <p id="em3j">Опытным путем мне подошел интерфейс I2C (про установку и настройку waveshare модулей у них всегда очень подробно изложено в <a href="https://www.waveshare.com/wiki/PN532_NFC_HAT" target="_blank">вики</a>). В моем случае я использовал I2C, так как SPI уже по умолчанию был занят экраном, и по тестам такое подключение сработало лучше всего. Позицию переключателей проще всего регулировать булавкой или иголкой, пальцы для такого великоваты :)</p>
  <figure id="wmRQ" class="m_column">
    <img src="https://img2.teletype.in/files/d4/61/d46178a8-1a09-4fc7-88b7-53d188ffe5ca.png" width="938" />
  </figure>
  <p id="LMf3"></p>
  <h2 id="RGsb">собрал это все в корпус из лего:</h2>
  <figure id="VfFw" class="m_column">
    <img src="https://img4.teletype.in/files/7b/46/7b46a3c1-ddcc-449c-839a-06e355c84dbb.jpeg" width="909" />
  </figure>
  <figure id="ema2" class="m_column">
    <img src="https://img2.teletype.in/files/98/c4/98c41383-d69c-48e8-b062-ee2e89fd7b78.jpeg" width="903" />
  </figure>
  <figure id="ZBYr" class="m_column">
    <img src="https://img1.teletype.in/files/8f/96/8f96098e-e810-4a0f-9ec3-8cab9d25b0f3.jpeg" width="960" />
  </figure>
  <p id="p0NP"></p>
  <h2 id="LIiU">основной софт</h2>
  <p id="UdL6">В выборе эмуляционной системы, я однозначно остановился на<a href="https://retropie.org.uk/" target="_blank"> Retropie</a> — он представляет собой не отдельную в вакууме ось, а надстройку над существующей и хорошо знакомой raspberry pi OS, а это уже даёт привычную среду для дальнейшей кастомизации и настройки. </p>
  <p id="zcGu">Да и комьюнити и документации там побольше. Установка предельно простая: скачиваем <a href="https://www.raspberrypi.com/software/" target="_blank">imager</a> с официального сайта raspberry pi, вставляем micro SD в комп, и в выборе операционки в imager выбираем ретропай для нашей версии малинки (3 и 4 несовместимы между собой!) </p>
  <p id="mUH6">Записываем образ на sd-карту, вставляем в малинку, подключаем к ней монитор, геймпад и клавиатуру (понадобится в ходе настройки) подключаем питание, и ждём загрузку системы. </p>
  <p id="NTF4">Ретропай сходу определит геймпад и предложит его «замэпить» — просто следуем инструкции и нажимаем нужные кнопки. Последний хоткей я оставляю нетронутым, тогда им по умолчанию становится кнопка select. </p>
  <p id="UFSS">Далее в играх под ретроарчем <strong>select+start</strong> — выход, <strong>select+Y</strong> — быстрое меню ретроарч в игре, которое позволяет сохранить текущий стейт игры, настроить контроллер и много всяких дополнительных плюшек.<br /></p>
  <p id="oTGB">Затем в пункте меню Retropie идем в настройки, настраиваем вайфай, заходим в пункт raspi-config (понадобится клавиатура) — <br />в пункте <strong>3: Interface Options</strong> включаем все необходимые интерфейсы, <br />в моем случае это: SSH, I2C, SPI</p>
  <p id="4BaW">Перезагружаем.</p>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="1RfB"><em><strong>SSH</strong> позволяет удаленно управлять малинкой с другого компа через командную строку терминала. Для этого необходимо узнать ее локальный IP-адрес, после подключения к вайфаю сделать это можно просто в основном меню настроек ретропая — там есть соотвествующий пункт «показать IP» например мой: 192.168.200.11</em></p>
    <p id="U92p">на маке или линуксе открываем терминал и далее пишем:<br />(на 10 винде тоже есть терминал (command promt или что-то в этом роде) — если нет — можно скачать Putty)</p>
    <pre id="MQAo">ssh pi@192.168.200.11</pre>
    <p id="vxvB">у нас спросят пароль, если вы специально его не меняли пишем <strong>raspberry</strong></p>
  </section>
  <p id="jeBS"><br />Следующим шагом — в дополнении в ретропаю, можно установить и десктоп — мне он пригодился для одной задачи, но в целом делать это не обязательно, особенно если места не очень много. </p>
  <p id="LMtB">Идем в retropie-setup в пункте tools ищем строку raspbian related tools — выбираем install pixel desktop. После этого выход из emulation station в десктоп можно совершить нажатием кнопки F4 — в командной строке набираем <strong>startx </strong>жмем ENTER (или через основное меню — наряду с логотипами приставок там появится пункт PORTS — вызвать десктоп можно оттуда)</p>
  <p id="etLG">По умолчанию в ретропай не включены все эмуляторы, которые он в принципе поддерживает. Тоже идем в настройки ретропая смотрим дополнительные пакеты и ставим. Некоторые лежат в экспериментальных. </p>
  <p id="6ZM1">Если избирательно — просто ищите нужную вам платформу на сайте ретропая и смотрите вики по настройке и нужному эмулятору, у меня места много, поэтому я просто установил их все разом (это заняло какое-то время).</p>
  <p id="zfwg">Вроде все основные пункты по самому ретропаю я осветил, но всю эту инфу можно без проблем и во всех подробностях найти в сети :)<br /></p>
  <h2 id="wRXv">устанавливаю модули:</h2>
  <p id="x1oO">Тут все просто — инструкции для e-paper экрана, NFC сканнер и UPS блок с аккумуляторами подробно расписаны у производителя на вики страничках:<br /><strong><a href="https://www.waveshare.com/wiki/4.01inch_e-Paper_Module_(F)" target="_blank">экран</a> , <a href="https://www.waveshare.com/wiki/UPS_HAT_(B)" target="_blank">UPS</a> , <a href="https://www.waveshare.com/wiki/PN532_NFC_HAT" target="_blank">NFC сканер</a></strong></p>
  <p id="GSHW">Писать свой скрипт я буду на питоне, поэтому использую инструкции для установки и скрипты-примеры для него.</p>
  <p id="16j5">Все это делается в терминале, если делать на самой рашпери — выходим в режим терминала из графического режима emulation station нажатием клавиши F4, или, если накатили поверх ретропая десктоп — выходим в него и запускаем терминал там. </p>
  <p id="7Dms">Мне же проще всего было проделывать все это удаленно, через SSH — так и команды с вики можно просто копипастить в терминал :)</p>
  <p id="TRsy">Я начал с экрана, попутно по инструкции, устанавливаем весь нужный софт и библиотеки, основное что нам потребуется это менеджер пакетов для питона pip3</p>
  <p id="nVW8">Запуск примеров: после того, как установили, в терминале переходим в директорию, где лежат примеры. Навигация по каталогам: </p>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="hVJC"><strong>cd /путь-к-папке/ </strong><br /><strong>cd ..</strong> перейти на уровень выше<br /><strong>cd ~</strong>  перейти в домашнюю директорию<br /><strong>ls </strong> выводит список файлов и папок внутри директории<br />для быстрого перехода можно набирая команды использовать клавишу tab для автонабора нужных файлов и директорий </p>
  </section>
  <p id="e3sl"></p>
  <p id="Wv28">Запуск примера с экраном, находясь в директории со скриптами:</p>
  <pre id="3Cht">sudo python3 epd_4in01f_test.py</pre>
  <p id="ymJK"><br />Все картинки для e-paper экрана строго ограничены цветовой палитрой, никаких полутонов, а это значит, что их нужно прогонять через dithering-алгоритм. </p>
  <p id="NZyV">Проще всего делать это в фотошопе, а <a href="https://www.waveshare.com/wiki/E-Paper_Floyd-Steinberg" target="_blank">тут</a> есть подробная инструкция. Также разрешение должно быть точно таким же, как и разрешение самого экрана, у меня 640×400. В тестовых скриптах есть примеры и картинки, вместо них можно подставить свои картинки и проверить. По моей задумке экран показывает обложку игры, когда я запускаю ее через «картридж» то есть проездной :)</p>
  <figure id="9yGB" class="m_column">
    <img src="https://img3.teletype.in/files/6e/b8/6eb876a0-2353-49d0-b2c2-ee2c4f2143cf.jpeg" width="823" />
  </figure>
  <figure id="iuZ1" class="m_column">
    <img src="https://img4.teletype.in/files/be/da/bedace1a-f04f-4f79-9deb-686e44cc1721.jpeg" width="914" />
  </figure>
  <p id="4wyP">Вне игры, в режиме ожидания, чтобы была какая-то картинка, можно зарядить любую свою, я же пока решил использовать свой старый скетч на <a href="https://processing.org/" target="_blank">процессинге</a>, который писал черт знает когда, с <a href="https://lab.wasdswag.com/random-person/" target="_blank">генератором рандомных морд</a></p>
  <p id="Njri">Малинка хорошо дружит с процессингом (но именно для этого я ставил десктоп, чтобы все установить и проверить запуск скетчей в редакторе),</p>
  <p id="NLmB">А тут есть <a href="https://medium.com/chi-chi-go-make/runing-headless-processing-sketch-in-rpi4-98bd44e79fce" target="_blank">детальный гид,</a> как запускать скетчи на процессинге в командной строке, без экрана. Мне потребовалось лишь адаптировать разрешение сохраняемой картинки и цвета, чтобы они соответствовали палитре экрана. </p>
  <p id="Ameb">В итоге команду на запуск скетча с генерацией картинки я вывел в отдельный исполняемый шелл-скрипт (о них подробнее будет позже), то есть он запускается из под консоли, минуя сам графический интерфейс редактора</p>
  <p id="dlSw">В целом получилось так: каждые 5 минут в финальном скрипте, если сейчас не запущена игра, мы обновляем экран, и даем команду на запуск скетча, скетч сохраняет картинку в нужную директорию (переписывает один и тот же файл) — и ee мы используем при следующем обновлении экрана. </p>
  <p id="5Zcj">Вообще говоря, в самом питоне уже есть библиотека для работы с графикой PIL (она устанавливается по инструкции вместе с экраном) и аналогичный скетч с генеративной графикой можно написать непосредственно в нем, но мне было лень разбираться, да и не особо нужно. </p>
  <p id="XBVa">Можно просто накачать набор тематических картинок и показывать случайную без всяких лишних заморочек :) </p>
  <p id="kcUk">А можно и вовсе рассмотреть варианты сборки, где экран не дополнительный / декоративный, а на нем и играть прям можно, тогда вся задумка с портативностью и батарейками будет еще более уместной. </p>
  <p id="LvGI">Для малинки существует множество таких экранов, которые подключаются по GPIO + HDMI. Но меня лично заинтересовал вариант с подключением по DSI (к специальной шине для подключения дисплея на рашпери) типа<a href="https://amperka.ru/product/waveshare-display-raspberry-pi-4n3in-dsi" target="_blank"> такого</a>  — так можно собрать все компактно, без лишних проводов.</p>
  <p id="pa5n">С батарейным блоком поступил аналогично — просто <a href="https://www.waveshare.com/wiki/UPS_HAT_(B)" target="_blank">следовал инструкции с вики</a>, потестил скрипт индикации заряда в консоли — все работает</p>
  <p id="dNA2">Если при запуске скрипта с примером консоль ругается на отсутствие какого-то модуля — устанавливаем этот модуль через pip, например, когда я ставил по инструкции модуль с батарейками, у меня не была установлена библиотека smbus. Фиксим:</p>
  <pre id="e2ih">sudo pip3 install smbus </pre>
  <p id="yzSX">Если запустим пример — увидим, как терминал пишет текущий уровень заряда</p>
  <p id="mTrH">Точно так же с NFC hat: <a href="https://www.waveshare.com/wiki/PN532_NFC_HAT" target="_blank">инструкция здесь</a> подключал по I2C интерфейсу.<br />В примерах несколько питон-скриптов на чтение и запись RFID меток.</p>
  <p id="p1uK">Ключ, который выглядит как таблетка от домофона (идет в комплекте с платой) и читается и записывается. Но проездные, по понятной причине только читаются — от записи они защищены, иначе так каждый «умелец» мог бы обеспечить себе безлимитный бесплатный проезд :) </p>
  <p id="Ce99">Можно купить чистые RFID метки и несколько упростить себе жизнь, ведь так можно на сами карточки напрямую записать команду запуска определенной игры. </p>
  <p id="OhtH">Но у меня таких не было, да и определенный reuse шарм в таком случае пропадает. Тем более, что когда свободные «картриджи» закончатся, можно бесплатно пополнить запасы в мусорном ведре у турникета :))</p>
  <p id="mVgo">Невозможность записи я обошел по-другому — у каждого такого проездного есть свой UID, выглядит как уникальный hex код, типа такого:<em> b&#x27;4\xc1\xf7\xa9W\x8b\xa7&#x27; </em></p>
  <p id="ZnRV">Именно его мы можем прочесть в терминале, приложив карточку к сканеру. А если мы можем его прочесть, значит мы можем использовать его как ключ к запуску, просто записав его как ключ в dictionary: </p>
  <pre id="qI3i">{ &lt;UID ключ&gt; : ( &lt;команда запуска игры&gt;, &lt;название игры&gt;, &lt;картинка игры&gt;) } </pre>
  <p id="xzRo">Впоследствии соберу свой каталог в отдельный <a href="https://github.com/wasdswag/MagicBox/blob/main/run/catalogue.py" target="_blank">скрипт</a>, команды запуска лежат исполняемыми .sh файлами — об этом расскажу ниже.</p>
  <h2 id="GcID"><br />собираю свой скрипт</h2>
  <p id="35C5">Беру все нужные мне штуки из скриптов-примеров для модулей, делаю отдельную директорию home/pi/MagicBox — переношу туда нужные библиотеки (вся структура по ссылке на <a href="https://github.com/wasdswag/MagicBox" target="_blank">гите</a>) и комбинирую это все уже в своем скрипте.</p>
  <p id="PdhP">Мой код далеко не идеальный, но все работает. Честно говоря, первый раз пишу на питоне, приходилась долго привыкать не ставить автоматом фигурные скобки {}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{}{} :-)</p>
  <p id="tNHt"><br /><strong>структура такая:</strong></p>
  <ol id="3RLJ">
    <li id="wzhg">основной скрипт называется <a href="https://github.com/wasdswag/MagicBox/blob/main/run/go.py" target="_blank">go.py<br /></a>в нем логика самого сканера карточек<br />и мониторинг других модулей: батареи и экрана<br />необходим модуль subprocess:<br /><em>sudo pip3 install subprocess</em></li>
    <li id="u53t">каталог / словарик с карточками-«картриджами» <a href="https://github.com/wasdswag/MagicBox/blob/main/run/catalogue.py" target="_blank">catalogue.py</a></li>
    <li id="2d4b"><a href="https://github.com/wasdswag/MagicBox/blob/main/run/battery.py" target="_blank">battery.py</a> там практически без изменений скрипт INA219.py из примера.<br />Добавил только автоматическое выключение системы, если уровень заряда меньше 2% и мониторинг температуры процессора</li>
    <li id="Ny23"><a href="https://github.com/wasdswag/MagicBox/blob/main/run/screen.py" target="_blank">screen.py</a> — там методы для обновления бумажного экрана, ему пасуем картинку и тд</li>
  </ol>
  <p id="XINz"></p>
  <p id="MwV3">Устроено это так: есть основной скрипт, в нем два потока — один отвечает за инфу на экране, каждые 10 секунд смотрит есть ли активный картридж с картинкой, мониторит батарею и температуру процессора, другой же отвечает за сканер, и если прикладываешь проездной и он есть в картотеке — запускает игру, и передает мониторинг-системе инфу о картридже, чтобы поменять картинку. И третий цикл в основном потоке для обновления картинок в режиме ожидания, если нет картриджа ждет 5 минут и меняет на картинку с <a href="https://lab.wasdswag.com/random-person/" target="_blank">мордами</a>.<br /></p>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="RtQz">*по возможности<strong> НИКОГДА </strong>не выключайте малинку просто обрубив питание. Микро-SD карточки, на которых записана система очень чувствительны к такого рода стрессам, будут ошибки и бэд-блоки на диске, а то и вовсе полетит система. Именно поэтому, если что-то получилось сделать — советую делать бекап образа, чтобы в случае такой поломки из него можно было восстановить и перезаписать образ системы</p>
    <p id="SPuM">в каталоге я предусмотрел 2 синих проездных с записанными системными командами reboot (sudo reboot) и выключение (sudo shutdown -h now), которые, в случае чего, позволяют быстро выключить или перезапустить малинку безопасно. По-хорошему бы, конечно кнопку отдельную вынести, но не было. (и лень)</p>
  </section>
  <p id="6vLr"></p>
  <p id="1EgW">Весь код писал в SublimeText удаленно, подключив рашпери к компу через протокол Samba, чтобы в проводнике был доступ к файловой системе малинки. <br /><br />Смотрим тут если что, там ничего сложного: <a href="https://ramokromok.com/threads/setting-up-samba-share-on-windows-10-to-access-files-on-the-retropie.105/" target="_blank">https://ramokromok.com/threads/setting-up-samba-share-on-windows-10-to-access-files-on-the-retropie.105/</a><br /><br />Поскольку в настройках по умолчанию в самбе мы видим только папки roms, bios и splashscreens, а свою директорию с программой я сделал в home — обновляю настройки самбы, включив в него доступ ко всей директории home:</p>
  <p id="RZc8">sudo — запуск чего-либо с правами админа<br />nano — это текстовый редактор в терминале</p>
  <p id="Zszh"></p>
  <pre id="5v33">sudo nano /etc/samba/smb.conf</pre>
  <figure id="Wd73" class="m_column">
    <img src="https://img1.teletype.in/files/84/5b/845be9b1-092a-4517-8e0a-3f32299d932c.png" width="1394" />
  </figure>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="6aIc">в нано:<br /><br />ctrl + O → ENTER  — сохранить<br />ctrl + X — выйти</p>
  </section>
  <p id="1i8J">теперь помимо SSH мы можем получить доступ к фалам и папкам малинки прямо в проводнике, создавать и менять там файлы, закидывать ромы игр и тд. (правда иногда это может быть довольно медленно)</p>
  <p id="sCvX"></p>
  <h2 id="tU00">а теперь самое главное: <br />как заставить все это работать?</h2>
  <p id="iP6k">В ретропай, для запуска команд (игр в нашем случае) через консоль, минуя графический интерфейc emulation station, существует шел-скрипт <a href="https://retropie.org.uk/docs/Runcommand/" target="_blank">runcommand.sh</a><br />Запуск игр в нем осуществляется с такими параметрами:</p>
  <section style="background-color:hsl(hsl(199, 50%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="zFAl"><code><strong>/opt/retropie/supplementary/runcommand/runcommand.sh 0 _SYS_ nes &#x27;/home/pi/RetroPie/roms/nes/SuperMarioBros.nes&#x27;</strong></code></p>
  </section>
  <p id="Hwka">То есть: &lt;сам путь к скрипту&gt;, &lt;система (эмулятор)&gt;  &lt;и путь к файлу с ромом&gt;</p>
  <p id="7hm5">Для того чтобы скрипт корректно отработал, предполагается, что мы выходим из графического режима emulation station и запускаем все это дело через терминал.</p>
  <p id="Etwh">Следовательно, перед запуском игры по проездному, нам нужно «убить» все процессы emulation station или уже запущенные ранее игры.<br /><br />Для того, чтобы наш питон-скрипт умел запускать и выполнять команды в терминале, добавляем ему в модули import os (или аналогичная вещь subprocess)</p>
  <p id="w7ue">У каждого процесса в диспетчере задач есть свой уникальный номер, наша задача его выяснить и нежно вырубить командой</p>
  <pre id="3pW7">$ kill -15  &lt;ID&gt;</pre>
  <p id="0E8Z">Аргумент -15 это SIGTERM (то есть нежно) -9 SIGKILL (то есть жестко)<br />всегда по возможности лучше нежно))<br /><br />Делаем массив имен процессов (это список всех возможных эмуляторов и сама emulation station)  посылаем его на проверку методу kill_process в скрипте <a href="https://github.com/wasdswag/MagicBox/blob/main/run/go.py" target="_blank">go.py</a><br />так же, через консольную команду: </p>
  <pre id="nOJx">ps ax | grep &lt;process_name&gt; | grep -v grep</pre>
  <p id="wQ2S">Выводим полную строку этого процесса в диспетчере задач, где первым элементом будет как раз ID процесса, который мы убиваем. И так будет со всеми!!!<br /><br />emulation-station может вырубится не сразу, и тогда может случится асинхрон, все процессы еще не вырубились, а игра уже запустилась, но при этом на экране мы ее не увидим. </p>
  <p id="ucwb">Делаем для нее дополнительную проверку на наличие этого процесса в диспетчере в цикле, <strong>def process_is_running(proc_name)</strong> —<br /><em>&lt;переключить на черно-белый режим&gt; </em>и убивать, убивать, убивать (секунды за 2-3 это происходит) — и только после этого даем команду на запуск рома через runcommand.sh<br /></p>
  <p id="KMaJ">Поскольку команды запуска довольно длинные, и не хотелось их вручную выносить в сам скрипт каталога (будет просто мешанина из стрингов!), я организовал отдельные исполняемые шелл-скрипты под каждую игрулю. <br /><br />sh-скрипт делается так:<br />в терминале переходим в нужную нам директорию, у меня это папка в домашней директории /MagicBox/run/<br />пример:</p>
  <pre id="jIWK">cd MagicBox/run
nano crazyTaxi.sh</pre>
  <p id="uaBC">nano — консольный текстовый редактор, <br />crazyTaxi — карточка для игры Crazy Taxi, которую будем делать, <br />.sh — расширение шел-скрипта.</p>
  <p id="JYQd"><br />В открывшемся редакторе пишу текст команды:</p>
  <pre id="ET5M">/opt/retropie/supplementary/runcommand/runcommand.sh 0 _SYS_ dreamcast /home/pi/RetroPie/roms/dreamcast/Crazy_Taxi_v1/CrazyTaxi.gdi
emulationstation</pre>
  <p id="X80j">ctrl + O → ENTER сохранить<br />ctrl + X выйти из nano<br /><br />Это означает: запусти игру по такому-то пути, а на выходе из игры запусти обратно emulation station<br /><br />К тому же, при таком подходе, сам путь к директории нужной игры легко скопировать из проводника, а не писать его ручками, меняя все пробелы в строке на понятные компу &quot;\ &quot;  (по крайней мере на маке все пути корректно копируются в терминал, так, что компуктер это понимает)</p>
  <p id="Wjuv">Далее этому файлу нужно дать доступ, то есть сделать его по настоящему исполняемым. В линуксе очень гибкая система настройки пользовательских прав, есть куча разных атрибутов, но я человек простой и использую ультимейт права для всех подобных скриптов, если не нужно сильно беспокоится о безопасности, поэтому далее:</p>
  <pre id="4h5a">sudo chmod 777 crazyTaxi.sh</pre>
  <p id="ICAr">sudo — это как запустить команду с правами администратора, <br />chmod 777 — ставит права доступа на чтение запись и исполнение любому пользователю</p>
  <p id="0yKV">Далее, в питон-скрипте просто указываем ссылку на директорию где лежат наши .sh скрипты с карточками, и вместо множества букв пасуем эти карточки в словарик с играми.<br /><br />Дополнительно я сделал две системные карточки на выключение и перезагрузку малинки, команды там простые и короткие, поэтому отдельных шел-скриптов, как с играми я не делал:<br />перезагрузка — sudo reboot / выключение — sudo shutdown -h now<br /><br />Осталось только сделать так, чтобы наш основной скрипт запускался автоматом вместе с системой. Для этого в ретропае тоже есть скрипт autostart.sh<br />идем к нему и редактируем:</p>
  <pre id="zhXS">sudo nano /opt/retropie/configs/all/autostart.sh</pre>
  <p id="Goux">мой основной скрипт называется go.py и лежит он в папке home/MagicBox/run<br />пишем команду запуска скрипта:</p>
  <pre id="qbmd">python3 /home/pi/MagicBox/run/go.py &amp; emulationstation</pre>
  <p id="6G6n">ctrl + O → ENTER / ctrl + X</p>
  <p id="DaCo">Так, на старте системы, мы запустим скрипт в основном окне терминала, но если я захочу добавить новые карточки, будет не очень сподручно смотреть их UID код и добавлять в <a href="https://github.com/wasdswag/MagicBox/blob/main/run/catalogue.py" target="_blank">словарик</a> новые ключи. <br /><br />Сейчас программа, если я прикладываю «чистый» проездной печатает в терминал его UID — соответсвенно я его копирую и записываю ключом в словарик.</p>
  <p id="q2ec">Если я ставлю запуск всей системы в автостарт — мой питон скрипт крутится к &quot;главном&quot; окне терминала под emulation station — если я хочу посмотреть вывод в консоль, скопировать чистый ключ, просто подключившись через SSH у меня не получится, нужно смотреть на самой малинке, то есть подрубать клаву, нажимать F4 — смотреть, запоминать — неудобно!<em> (хотя возможно, можно подключить логирование и просмотр записи лога в SSH, но я пока не разобрался)</em><br /><br />На помощь мне приходит замечательное консольное приложение tmux, не раз им пользовался. Оно позволяет организовать работу в терминале «вкладками», которые можно открывать и «сворачивать» не завершая сам процесс.</p>
  <p id="q52z">Я хочу сам основной скрипт закрепить в такой вкладке, чтобы можно было из любого места подключаться и смотреть вывод. </p>
  <p id="0RPj">То есть, я смогу подключится к малинке по SSH, развернуть вкладку, в которой запущен скрипт, приложить новую карточку и скопировать UID, который высветится в терминале, и потом записать его в каталог. </p>
  <p id="1Nwv">тмукса нет по умолчанию в малинке, его надо установить:</p>
  <pre id="Kgpq">sudo apt-get install tmux</pre>
  <p id="OWFZ"><a href="https://losst.ru/shpargalka-po-tmux" target="_blank">шпаргалка</a> по tmux</p>
  <p id="6IhB">Делаю очередной шел-скрипт, в папке /home/pi/bin, чтобы запуск нашего питон скрипта происходил в tmux-вкладке:</p>
  <pre id="PABP">sudo nano /home/pi/bin/magicBox.sh</pre>
  <p id="UUBM">пишу:</p>
  <pre id="B2AG">#!/bin/bash
tmux new-session -s &quot;magic&quot; -d -n &quot;box&quot;
tmux send-keys -t &quot;magic:box&quot; C-z  &#x27;python3 /home/pi/MagicBox/run/go.py&#x27; Enter</pre>
  <p id="j4VZ">Это значит, что на старте системы я создаю новую вкладку, в которой запускаю наш питон-скрипт</p>
  <p id="BMDm">Далее, я могу развернуть эту вкладку через SSH или в терминале самой малинки командой: </p>
  <pre id="QssY">tmux a</pre>
  <p id="AUKD">А свернуть ее сочетанием клавиш ctrl+B+D<br />Теперь можно отредактировать автостарт:</p>
  <pre id="p2WX">sudo nano /opt/retropie/configs/all/autostart.sh</pre>
  <p id="lbi4">закомментировал запуск пайтон-скрипта напрямую, вместо него вписываю команду на запуск шелл-скрипта: </p>
  <pre id="lbi4">/home/pi/bin/magicbox.sh &amp; emulationstation 
#line above run session in a tmux tab for easy debuging
#python3 /home/pi/MagicBox/run/go.py &amp; emulationstation</pre>
  <p id="33j4">Есть правда один минус — запуская скрипт в основном окне терминала, без тмукса, прикладывая карту мы сразу видим на экране дефолтный ретропаевский сплэш-скрин загрузки (выглядит он &quot;терминально&quot; и не то чтобы очень красиво, зато с точки зрения обратной связи сразу понятно — тут что-то происходит)</p>
  <p id="Qi29">С тмуксом — нас выбивает в чистую консоль и через пяток секунд запускается игра. Но поскольку я то знаю, что она запустится, меня это не особо смущает. <br />В конце концов, можно заполнить так всю картотеку, а потом уже перенести запуск скрипта в автостарт напрямую (ну и обратную операцию мы можем сделать в любой момент) </p>
  <h2 id="WG9A"></h2>
  <h2 id="iDPR">оверклокинг</h2>
  <p id="PhfI">С штатными настройками система хорошо справляется с играми PSX <br />и попроще, если хотим поиграть в Dreamcast шедевры, нужно будет немного разогнать проц и видеоядро. Для этого в терминале пишем</p>
  <pre id="jEqd">sudo nano /boot/config.txt</pre>
  <p id="atua">я использовал такие настройки:</p>
  <section style="background-color:hsl(hsl(55,  86%, var(--autocolor-background-lightness, 95%)), 85%, 85%);">
    <p id="9at9">arm_freq=1950<br />over_voltage=4<br />gpu_freq=600<br />v3d-freq=750</p>
  </section>
  <p id="MASd">Конечно, тогда точно потребуется минимальное охлаждение, у меня с маленьким медным радиатором и вентилятором в процессе игры температура колеблется в районе 52—60° доходя до 65° максимум, что в общем, вполне в пределах разумного.<br /></p>
  <p id="Djf5"></p>
  <figure id="tsdt" class="m_column">
    <img src="https://img2.teletype.in/files/9e/d3/9ed39dfd-06e7-445d-a961-834f4d1196be.jpeg" width="960" />
  </figure>
  <p id="Y5Bn"></p>
  <h2 id="llTI">в заключении:</h2>
  <p id="mJfi">Хочу сказать, что в процессе сборки всего проекта, я обнаружил, что меня не первого осенило использовать ретропай в связке с NFC сканером. В сети немного, но есть похожие проекты, которые впоследствии прояснили мне много чего про логику самой работы ретропая.<br /><br />Например есть аналогичный очень добротный проект тут: <br /><a href="https://www.daftmike.com/2016/07/NESPi.html" target="_blank">https://www.daftmike.com/2016/07/NESPi.html<br /></a>Кое-что по коду я подтырил у него, хотя это и потребовало значительной адаптации.<br /> Но там все по-серьезному: с 3D печатью, картриджы имитируют вид оригинальных и тд. </p>
  <p id="gTor">Мне же нравится, что получилась немного &quot;колхозная&quot;, но самостоятельная история, которая не столько напрямую имитирует вид старых консолей и картриджи, сколько просто дает в такой новой форме аналоговые ощущения. <br />Да и сама идея использовать для этого проездные мне показалось занятной.</p>
  <p id="LyDZ"><br />Буду рад если кому-то пригодится этот гид — полностью или частично.<br />Если так — обязательно делитесь тем, что получилось в комментариях :)<br />  </p>

]]></content:encoded></item></channel></rss>