Найти в Дзене
RUVDS

🎧 Doom запустили на… беспроводных наушниках

Да, без экрана Список устройств, на которых «кто-нибудь однажды запустил Doom», снова пополнился. На этот раз – TWS-наушниками PineBuds Pro. У них нет экрана, зато есть открытая прошивка и энтузиаст с большим количеством свободного времени. Разработчик Арин Саркисян (arin-s) портировал Doom на эти наушники, воспользовавшись тем, что внутри каждого из них стоит микроконтроллер Arm Cortex-M4F. Ради эксперимента он разогнал процессор с 100 до 300 МГц и отключил энергосбережение – для встраиваемых чипов это уже почти экстремальный режим. Самой сложной частью оказалась не графика, а память. Код движка пришлось жёстко оптимизировать: убрать всё лишнее, заранее сгенерировать таблицы, часть данных сделать константами и отказаться от кеширования. В итоге движок Doom занял меньше 1 МБ, а ресурсы игры пришлось ужать с 4,2 до 1,7 МБ. Логичный вопрос: как играть без экрана? Картинка выводится на внешнее устройство через UART-подключение (Bluetooth оказался слишком медленным). Изображение переда

🎧 Doom запустили на… беспроводных наушниках. Да, без экрана

Список устройств, на которых «кто-нибудь однажды запустил Doom», снова пополнился. На этот раз – TWS-наушниками PineBuds Pro. У них нет экрана, зато есть открытая прошивка и энтузиаст с большим количеством свободного времени.

Разработчик Арин Саркисян (arin-s) портировал Doom на эти наушники, воспользовавшись тем, что внутри каждого из них стоит микроконтроллер Arm Cortex-M4F. Ради эксперимента он разогнал процессор с 100 до 300 МГц и отключил энергосбережение – для встраиваемых чипов это уже почти экстремальный режим.

Самой сложной частью оказалась не графика, а память. Код движка пришлось жёстко оптимизировать: убрать всё лишнее, заранее сгенерировать таблицы, часть данных сделать константами и отказаться от кеширования. В итоге движок Doom занял меньше 1 МБ, а ресурсы игры пришлось ужать с 4,2 до 1,7 МБ.

Логичный вопрос: как играть без экрана? Картинка выводится на внешнее устройство через UART-подключение (Bluetooth оказался слишком медленным). Изображение передаётся в формате MJPEG, производительность – около 18 FPS. Теоретически можно больше, но процессору уже тяжело кодировать видеопоток.

Проект выложен в открытый доступ на GitHub.