На камере Hasselblad X2D запустили Doom: для этого пришлось связать игровой движок со штатным интерфейсом

—

от автора

Разработчик Радиум Ван (Radium Wang) запустил движок Doom на среднеформатной камере Hasselblad X2D 100C. Нажатие кнопки спуска затвора отвечает за огонь по противникам, свайпы по экрану поворачивают Думгая, а встроенный динамик воспроизводит звук. Автор проекта опубликовал исходники.

Эксперименты разработчик проводил на первом поколении X2D 100C с прошивкой 4.2.0 сборки 24849. Камера оснащена 100-мегапиксельным сенсором и 3,6-дюймовым сенсорным дисплеем. Устройство поступило в продажу в 2022 году по цене в 8200 долларов без объектива.

Автор проекта обнаружил в прошивке 64-разрядную ARM‑платформу, Android API 28 и интерфейс на Qt 6.4.1 с Wayland. При этом Qt Quick встроен в штатную программу камеры, и отдельной библиотеки для запуска приложений в системе нет. Поэтому Ван разделил игру на независимый движок и отдельную страницу внутри интерфейса камеры. Для подключения загрузчика страницы использовали замену скомпилированного QML‑файла в памяти процесса без редактирования прошивки.

Проект построен на базе порта doomgeneric. Для вывода изображения, ввода данных и управления игровым циклом разработчик написал адаптер на языке C. Движок собрал с помощью Zig в статический исполняемый файл для ARM64.

Для передачи изображения используются файлы в оперативной памяти. Функция DG_DrawFrame() записывает кадр размером 320 × 200 пикселей во временный BMP и в конце меняет название на frame.bmp. Благодаря этому система не может прочитать недописанный кадр. После QML‑страница проверяет номер кадра, загружает новое изображение и растягивает его до соотношения сторон 4:3. Механизм работает по таймеру в 30 мс.

Управление реализовано также через файлы, но в обратную сторону. Интерфейс записывает состояния клавиш и смещения свайпов, а движок преобразует их в события. Мультитач позволяет одновременно двигаться и поворачивать.

Звуковой модуль считывает эффекты из WAD‑файла игры и формирует 16-битный стереопоток с частотой 48 кГц. Система буфера в общей памяти передаёт поток процессу, который «общается» напрямую с динамиком камеры. Устройство пока может воспроизводить только звуковые эффекты, поддержки музыки — нет.

Код проекта опубликован на GitHub по лицензии GPL. Готовый установщик для версии Doom под Hasselblad X2D разработчик не реализовал.

ссылка на оригинал статьи https://habr.com/ru/articles/1092182/