Однобитный гейминг, или правило 34 для микроконтроллеров
Если бы для микроконтроллеров существовало правило 34, то оно, скорее всего, звучало-бы так: «Если это исполняет программы, кто-то уже написал для этого игру». При этом производительность совершенно не важна, как и то, для чего контроллер предназначался в оригинале. Важен сам принцип – если это выполняет программы, на этом можно поиграть.
Игровые системы на самых, казалось-бы, малоподходящих чипах пытались делать уже давно, но сегодняшнее развитие микроэлектроники, прототипирования и производства позволило некоторым из этих устройств стать по-настоящему дешевыми и популярными. В этой статье я покажу несколько примеров портативных игровых консолей, сделанных на довольно неожиданной «начинке» — и заработавших популярность в кругах энтузиастов как ретро–игр, так и программирования и электроники.
Так же, как инди-игры зачастую не слишком технологичны, но могут быть интересным (или красивым) экспериментом, эти устройства, или как их еще называют «инди-консоли» скорее среда для экспериментов и идей, нежели серьезное игровое железо с новыми возможностями.
Инди-консоли обычно делаются на основе какого-то распространенного микроконтроллера — чипа, на котором сразу находятся и процессор, и шина, и ОЗУ/ПЗУ, и основные интерфейсы. Что, во-первых, удобно – можно стразу приделывать нужные устройства ввода-вывода, а во-вторых, микроконтроллеры обычно дешевы и компактны.
Для создания инди-консолей могут использоваться самые разные процессоры и чипсеты, – от ATMega 32u4 (процессор ардуино леонардо) до в десять с лишним раз более быстрого STM32F746IGK, но, чаще всего это будут системы, совместимые с Arduino IDE – будь то оригинальные ардуино, или EST32.
Благодаря, в том числе, компактности микроконтроллеров, сегодня инди консоли обычно делаются в формате небольшой портативки. Варианты платы для подключения к телевизору через AV или c интерфейсом HDMI тоже существовали, но мало какие из этих проектов дожили до наших дней.
Почему инди-консоли?
По своей сути, инди-консоли похожи на так называемые «фэнтезийные консоли» — другой интересный феномен игрового дизайна. Фэнтезийные консоли (Fantasy Consoles) — это программные среды для эмуляции и создания игр для никогда не существовавших физически игровых устройств. Сегодня существуют десятки фэнтезийных консолей и тысячи созданных энтузиастами игр. Разработчиков – чаще всего любителей – привлекают, как ни парадоксально, именно ограничения системы, и связанная с ними возможность сосредоточится на создании игры в простой среде, не отвлекаясь на сложное многообразие возможностей современных игровых движков и запутанное железо ПК и консолей.
У фэнтезийных консолей можно выделить три характерных составляющих —
1) Среда разработки, содержащая текстовый редактор, редактор спрайтов, редактор карт и звуковой редактор.
2) Набор искусственно наложенных ограничений разработки, таких как ограниченное графическое разрешение, цветовые палитры, использование оперативной памяти или дисковое пространство.
3) Игры, приложения и демонстрации, разработанные исходя из этих ограничений, с общими эстетикой и стилем.
Инди-консоли устроены похожим образом — подобно фэнтезийным консолям, они предлагают «игру в создание игры». Игровой дизайн и программирование становятся чем-то вроде мета игры с ограничениями и правилами – подобными ограничениям создателей игр для оригинальных 8-битных приставок. Кроме того, инди-консоли часто имеют открытый код и схемы, и дают практически недостижимый в современных системах контроль над всеми аспектами и возможностями железа.
Одним из первых широко известных и коммерчески успешных проектов на основе ATMega 328 (Arduino UNO) стала консоль Gamebuino (2012). 16 MHz, 2KB ram, 32kb flash, монохромный экран 84x48 пикселей и шесть кнопок. Что еще нужно для игр и творчества?
Консоль была встречена с большим энтузиазмом и успешно профинансирована на Indiegogo, собрав 1055% от запланированной суммы. Консоль стоила 35 евро для бэкеров, и около 38 позже, в онлайн магазине.
В этой консоли есть все, что стало визитной карточкой подобных систем – распространенный и популярный чип с открытой документацией и огромным сообществом энтузиастов, дешевизна, небольшой размер, элегантные схемотехнические решения и дизайн, учитывающий малосерийное производство. И тот факт, что каждая консоль – это одновременно своеобразный девкит, и её можно использовать не только для игры, как таковой, но и для разработки новых игр и расширения экосистемы консоли.
Сегодня именно эту консоль купить уже нельзя, но создавшая её компания существует и выпускает следующую, более мощную, модель. Так же до сих пор живы форумы и сообщества, где можно найти помощь и информацию и до сих пор можно приобрести совместимую консоль – набор для самостоятельной сборки MakerBuino. (Честно сказать, создателей MakerBuino я немного недолюбливаю — некогда недорогой радиолюбительский кит они превратили в хипстерскую коробку с добавлением низкокачественных китайских инструментов и сильно подняли цену)
За последние несколько лет энтузиасты пытались использовать в инди-консолях самые разные чипсеты. Adafruit PyGamer – один из примеров консоли на более мощном железе. Я затрудняюсь сказать, насколько эта консоль «инди» поскольку компания Adafruit достаточно крупный игрок на рынке плат и решений для независимых разработчиков и обучения, но все основные признаки инди-консолей в PyGamer присутствуют в полной мере.
Это недорогая консоль на основе совместимого с Arduino IDE чипсета atsamd51J19. Благодаря большей, чем у базовых ардуино-совместимых контроллеров, мощности она позволяет программирование не только на С++, но и на python, а также использовать визуальную среду Microsoft make code. Благодаря гораздо более шустрому чипсету (120MHz Cortex M4F), объёму памяти (192 кб RAM и 512 kb flash) и цветному экрану 160x128 пикселей эта консоль позволяет создавать довольно продвинутые игры.
Несмотря на достаточно впечатляющие (для консолей подобного типа) характеристики и возможности, PyGamer вполне бюджетна, и продается за 60 долларов за набор с корпусом, запасными кнопками и чехлом или 45 долларов за голую плату.
Иногда инди консоли могут быть очень забавно решены в плане формы и устройства. В 2021 году компания Kittenbot выпустила Newbit Arcade Shield – не консоль как таковую, но расширение (шилд) для популярного обучающего микроконтроллера BBC Micro:bit второй ревизии. Плата с микроконтроллером вставляется в расширение как своеобразный картридж.
Вторая версия micro:bit имеет достаточно неплохое, для этого класса устройств, железо (Nordic Semiconductor nRF52833 64MHz Cortex-M4F, 512kB Flash, 128kB RAM) . Ситуация с этой консолью довольно интересная – за ней не стоит такое количество энтузиастов-самодельщиков, как за ардуино, но micro:bit – микроконтроллер созданный для обучения, и с огромным количеством учебных и методических материалов. Игры-же для этой консоли пишутся в Microsoft makecode arcade, что гораздо проще для освоения, нежели С++ или даже python.
И, наконец - Arduboy – эта, ставшая чуть ли не стандартом, инди консоль во многом похожа на gamebuino. Она основана на ATMega 32u4 — это чип Arduino Leonardo. От чипа Arduino UNO его отличает встроенный USB интерфейс, что позволило сделать Arduboy очень компактным – собственно, маленький размер и изящное решение платы и корпуса было одной из его фишек.
Проект – тогда еще просто небольшая «умная» визитка с чипом, экраном и предустановленной игрой завирусился на ютубе и его создатель, Kevin Bates, решил оставить основную работу и попытаться воплотить идею в жизнь. Компания на кикстартере началась в 2015 году. Проект был успешно профинансирован — было собрано более 400 тыс. долларов при заявленной цели в 25 тысяч. Не только отличный дизайнер, но и технолог, Кевин переселился в Китай, доработал дизайн проекта и наладил производство первой модели. В 2016 году бэкеры получили первые консоли, а чуть позже устройства появились и в магазинах, занимающихся любительской электроникой по всему миру. Изначально в консоли не было внешней памяти, и можно было записать только одну игру – загрузка в память следующей игры происходила вместо предыдущей, через стандартный интерфейс Arduino IDE. Позже, в 2019 году была разработана следующая модель с дополнительным чипом памяти, вмещающим более 200 игр. Производство новой модели началось в 2020 году, она получила название Arduboy FX (Flash eXtension), и именно она актуальна на сегодняшний день.
Кризис комплектующих ударил по всем, включая малосерийное производство, поэтому своей консоли я ждал довольно долго. Но нужно отдать должное Кевину – заказавшие консоль могли постоянно держать руку на пульсе и получали сводки прямо с завода.
Arduboy FX приходит в симпатичной коробочке, где кроме самой консоли находится короткий USB шнур. В отличии от многих инди-консолей, Arduboy приходит уже собранным, а не в виде набора для самостоятельной сборки.
Технические характеристики:
Процессор: 16MHz ATmega32u4 (такой-же, как в Arduino Leonardo & Micro)
Память: 32KB Flash, 2.5KB RAM, 1KB eeprom
Экран: 128×64 1Bit OLED с диагональю 1.5"
Батарея: 180 mAh Thin-Film Lithium Polymer (около 8 часов игры)
Micro-USB 2.0 w/ built in HID profile
Для ввода есть шесть кнопок, четыре из которых используются как Dpad. Так же есть кнопка reset, утопленная в корпус во избежания случайного нажатия.
Кстати, кнопки и пад неожиданно удобные, как и сам процесс игры. Но подводит малюсенький экранчик — диагональ в полтора дюйма несколько напрягает глаза, хотя сам экран очень четкий.
На консоли сразу записано две сотни созданных энтузиастами игр. Часть – чуть упрощенные версии классики вроде зелды, KONG или известных серий JRPG, а часть – оригинальные и разработанные специально под Arduboy. И, надо сказать, что несмотря на ограничения – низкое разрешение экрана и процессор, изначально отнюдь не предназначенный для вывода динамичной графики — разработчикам удаётся создавать стильные и вдохновляющие игры, будь то демейки классических аркад или собственные игры с оригинальными механиками.
Что плавно подводит нас к самому интересному – инди-консолям как возможности для собственного творчества. Как уже сказано выше, каждая инди-консоль — это, одновременно, и своеобразный девкит, позволяющий запускать собственные программы и управлять всеми компонентами консоли на уровне железа (у Arduboy существует отдельная версия, которая называется «dev kit», но она отличается только отсутствием корпуса и кнопками – функционал у нее тот же самый. По сути, так назывался ранний прототип для бэкеров и бета-тестеров) .
Консоль программируется через Arduino IDE, т. е. на С++, но с большим количеством написанных специально под Arduboy библиотек, облегчающих работу с выводом спрайтов, считыванием ввода и звуком. Пока что для Arduboy и его клонов не существует единой графической среды разработки, которая включала бы интегрированные редакторы спрайтов, текста и звука и эмулятор, на подобие того, что есть в фэнтезийных консолях – это одно из направлений, которыми Кевин собирается заняться в будущем.
Но некоторые подвижки уже происходят - написанный одним из участников сообщества редактор спрайтов с экспортом .h файлов, которые можно либо хранить как ассеты для внешнего обращения, либо вставлять прямо в программу.
Создание игры для Arduboy превращается в интересную головоломку, требующую справляться как с минимализмом средств, так и бесконечной оптимизации кода и ассетов. Все проблемы создателей игр для восьмибитных картриджей встают перед разработчиком в полный рост, но, с другой стороны, простота средств заставляет отбросить лишнее и определится с основными механиками, и не позволяет потеряться в глобальности огромных замыслов, что не редко случается с начинающими. В процессе изучения платформы и разработки идей для собственной игры я многое понял о старых играх и, начал подозревать, как и почему жанр JRPG приобрел свои характерные черты.
Еще одна причина присмотреться к платформе – игр для Arduboy не так много, и к любой будет приковано доброжелательно внимание. Так же форумы Arduboy более чем живы, и там нередко можно встретить опытных программистов и спросить у них совета, если что-то пошло не так — не каждая платформа позволяет спросить технического совета (и, нередко, получить его) непосредственно от разработчика консоли =). Еще, поскольку консоль основана на ардуино, то нужную информацию часто можно получить и от разработчиков, не связанных с проектом напрямую.
Как и в случае популярных фэнтезийных консолей, ваша игра не обязательно останется запертой на Arduboy – например, игра Circuit Dude Джонатана Холмса была им позже доработана и сейчас доступна в Стиме, на Нинтендо Свич и на мобильных платформах.
Одна из интересных особенностей Arduboy и залог его длинной жизни как платформы – постоянное возникновение все новых совместимых с ним проектов, как, например, 8BitCADE. Поскольку это решение стало своеобразным стандартом и его схема распространяется совершенно свободно, множество самодельщиков и радиолюбителей собирают собственные аналоги Arduboy и пишут для него игры и программы.
Вездесущие китайцы так же не бросают на произвол судьбы тех, кто хотел бы стать частью сообщества Arduboy, но не может купить оригинал или не хочет собирать все с нуля. https://www. aliexpress.com/item/4000437689219.htm
На сегодняшний день существуют десятки различных доступных для покупки или самостоятельного изготовления инди-консолей – здесь можно посмотреть полный список и, возможно, найти что-то, что вас заинтересует, вдохновит или просто покажется забавным курьезом.
Лично для меня идея инди-портативок и сообщество Arduboy стали причиной вернуться к вещам, которыми я не занимался почти 20 лет — со времен военной службы и учебы в институте. Я начал делать курсы по программированию и IOT, экспериментировать с ардуино и учиться писать правильные диздоки для разработки игр. И даже если увлечение инди-консолями пройдет — полученные знания останутся со мной и, скорее всего, помогут в более серьезной разработке в будущем.
Спасибо за пост! И тема интересная, и подача хорошая)
Спасибо)
Спасибо , я лучше а Стим дек поиграю
Это у стимдечников болезнь какая-то, да?
В таких штуках поражает то, что люди ухитряются на чипе с двумя килобайтами памяти умещать полноценные игры, которые довольно приятно играются. На ардубой даже клон зельды есть.
И спасибо открытости кода этих консолей, можно сделать такую и самому, имея 3д принтер и рублей 500 на составные части.
Делал как-то вот такой вот автомат, на базе софта от ардубоя, играл на нем в mystic balloon, забавная игрушка.
Класс. =) Очень здорово получилось.
Спасибо за статью! Очень интересно!
Хз, наверное немного не по теме, собирали с братом как-то эмулятор NES на Esp32. Вся электроника была куплена у китайцев. Корпус был напечатан на 3д принтере (это была самая первая вещь, которую я начертил и смоделил сам, первый блин комом, поэтому вышло так упорото). Прошивку взяли с гитхаба https://github.com/espressif/esp32-nesemu (или другую, основную на этой, но с дополнительными плюшками, уже не помню, мы тогда много прошивок перепробовали)
Возможно когда-нибудь переделаю в более удобное устройство))
Почему-же, очень даже в тему. Имхо, хорошо вышло, я бы только кнопки из другого пластика напечатал.) И в любом случае, тут не победа, а участие =).
На ESP32 инди-консоли тоже часто делают, кстати, только сегодня большинство таких проектов - не самые популярные.
Есть, например, вот эти ребята -
https://www.crowdsupply.com/byte-mix-lab/microbyte
На ESP больше выстреливают чистые эмуляторы, у меня есть кит от Odroid, оригинальный одроид-го.
Меня всегда вот это удивляло. Есть же куча эмуляторов реального железа. От 8080 и ZX до 6502, 6510 и банальной XT. Только там гигантская база наработок и пользователей.
Вот, например, игра 2009 года для VIC-20.
Очевидно, что под вымышленные консоли делать игры гораздо проще.
Как сказали выше - сильно проще. Не надо изучать реальное железо, и пишут под эти консоли, обычно, на скриптовых языках. Тот же Bitsy вообще кода не требует. Собственно, и самого железа не надо - потому как эмулятор-эмулятором, но если-б я писал под реальную старую систему мне-бы хотелось прогнать на оригинальном железе или, как минимум, на версии с хардверной симуляцией железа на FPGA.
Портировать тоже сильно легче - большинство нынешних фэнтезийных консолей могут сразу выдать код HTML5 для встраивания в веб страницу.
Офигенно) напомнило https://youtu.be/G5701B237tU
Какое бы ни было железо, люди все-равно склонны к прокрастинации и развлечению, поэтому это нормально, что на всем появляются игры)
Да и вообще, игры - это весело) наверное поэтому я и выбрал такую профессию
Комментарий недоступен
Дико извиняюсь, но "правило 34" только одно
Вот бы все душнили аниме-девочками. ^______^
Я во время чтения...
Спасибо а крутую хотя и сложноватую для меня стать. Всё таки смог прочесть и понять) Пусть эти знания и останутся с тобой и пригодятся для более серьёзных разработок!
P.S. В самом последнем слове статьи затесалась ошибка ;)
Спасибо! Поскольку местный редактор с сотового - огненный спидорак сатаны, поправлю уже из дома)
На удивление хорошо написанная статья и материал очень интересный.
Во время чтения ловил себя на мысли, что если завтра все игровые издательства исчезнут, то нам все равно найдется во что поиграть .
Именно так - инди разработчики делают столько потрясающей всячины, что в целом уже совершенно наплевать, куда "катится большой геймдев".
Я рад, спасибо :)
Спасибо за офигенную статью, тема демейков и программирования в ограниченных начальных условиях всегда была интересна для меня
Интересно было, хорошо написано, спасибо за материал
Тема интересная. Ещё бы была возможность где-нибудь это без костылей приобрести...
В статье есть ссылка на одну из консолей на алиэкспресс. Там же по запросу выдает Arduboy в сборе - правда от 6 тысяч вечнодеревянных.
Статья супер, спасибо! Жаль купить такую штуку не просто
На алике наверняка продаются клоны за копейки, софт у консолек открыт, а железо хорошо известно самодельщикам, в этом их достоинство.
При наличии базовых знаний в электронике можно и самому собрать на макетной плате
Спасибо!
Есть много схем, и в принципе, китайцы продают все необходимые детали.
Многие такие консольки собирают просто на макетной плате, без пайки.
На али зайди - клонов вагон и тележка
Это мы добавляем в избранное. Отдельное спасибо за открытие такой чудесной консоли как Pico-8! Обожаю такие маленькие игры.
Я рад, спасибо. Да, Pico-8 потрясающая система и игры делают прям очень хорошие, и так и подмывает самому сесть разбиратся - но где-ж время взять =)?
Спасибо большое за такую интересную статью!)
Было очень интересно как разработчику игр
Комментарий недоступен
Х-м-м-м, а это идея.
Для коллекционера, не более
Твой коммент? Да, для ценителей бесполезных вещей.
будуЮщей