FPDoom – проект, позволяющий запустить классический Doom, его дополнения и другие портированные игры на очень распространённом на дешевых кнопочных телефонах чипе Spreadtrum SC6531 и его модификациях. Проект содержит порты ванильного Doom, а также Duke3D, Shadow Warrior, Blood, Wolfenstein 3D и порт InfoNES.
Порты выполнены в виде приложений bare-metal, запускаемых через свой загрузчик (добавляется в прошивку, загружает игры с SD-карты). Устанавливается на современные кнопочные телефоны с чипами Spreadtrum SC6530/SC6531, что составляет более половины предложений на российском рынке. Список протестированных моделей и ссылка на описание загрузки приведены в Readme.
Главная особенность нового релиза – это поддержка монохромных экранов низкого разрешения (128x64, 96x68). Казалось бы, такими ужасными экранами только людей пугать, но сейчас как раз подходящее время года. Эти экраны используют 1 бит на пиксель, но при быстром мигании пикселями можно получить оттенки серого. Метод называется temporal dithering, это цифровой аналог ШИМ (PWM). Обновление экрана сделано по таймеру через прерывания, чтобы обеспечить равномерность и постоянность обновления пикселей. Если обновлять по таймеру игры (например, у Doom внутреннее ограничение на 35 кадров в секунду), то изображение очень сильно шумит.
Автору встретилось 3 варианта экранов:
- 128x64 ST7567A: Самый лучший вариант драйвера, он поддерживает увеличение частоты обновления до 300 кадров в секунду, при такой частоте шум едва виден глазом, камера смартфона шум не замечает. Экраны с разрешением 128x64 имеют физическое отношение сторон не 2:1, а примерно 7:5, пиксели вытянутые по вертикали.
- 96x68 HX1230: Это дешевая имитация экранов использующихся в старых Nokia. Драйвером экрана поддерживаются только самые базовые команды, напряжение настроить нельзя, и оно завышенное, из-за чего экран чернит, нужно задирать гамму в играх. Экран этот подключен к чипу через GPIO, который нужно дергать процессором, что приводит к большой нагрузке на процессор. Частота обновления около 75 кадров, заметный шум.
- 128x64 ST7565R: Не поддерживает изменение частоты обновления, стандартная около 77. Если точно попадаешь в частоту, то по экрану медленно проходит чёрная линия. Если не точно, то по экрану постоянно пробегает лёгкий шум (выбран такой вариант).
У всех экранов очень большое время отклика, что приводит к эффекту motion-blur. Тем не менее, что-то различить на экране можно (видео).
Также в этом релизе:
- Уже протестировано на 50 моделях телефонов.
- Написан драйвер для встроенного в чип LZMA-декомпрессора, теперь при загрузке сканируется и сжатая часть прошивки. Ранее для 40% телефонов приходилось вручную доставать из прошивки раскладку клавиш и указывать в аргументах запускаемой игры.
- Для портов Doom и Wolf3D добавлена возможность активировать читы на неуязвимость и все предметы.
>>> Исходный код