Выпуск проекта FPDoom 1.20241031, развивающего порты Doom и других игр для кнопочных телефонов

Продолжается развитие проекта FPDoom, который позволяет запустить классический Doom, его дополнения и другие портированные игры на очень распространённом на дешёвых кнопочных телефонах чипе Spreadtrum SC6531 и его модификациях. Чипсету уже около десяти лет, и телефоны выпускаются до сих пор.

Главная особенность нового релиза - это поддержка монохромных экранов низкого разрешения (128x64, 96x68 и даже 64x48). Подобные экраны используют 1 бит на пиксель, но при быстром мигании пикселями можно получить оттенки серого. Метод называется "temporal dithering", это цифровой аналог ШИМ (PWM). Обновление экрана сделано по таймеру через прерывания, чтобы обеспечить равномерность и постоянность обновления пикселей. Если обновлять по таймеру игры (например, у Doom внутреннее ограничение - 35 кадров в секунду), то изображение очень сильно шумит.

Были рассмотрены такие комбинации экранов и контроллеров (драйверов) для них:

  • 128x64 ST7567A: Самый лучший вариант драйвера, он поддерживает увеличение частоты обновления до 300 кадров в секунду, при такой частоте шум едва виден глазом, камера смартфона шум не замечает. Экраны с разрешением 128x64 имеют физическое отношение сторон не 2:1, а примерно 7:5, пиксели вытянутые по вертикали (не все монохромные экраны с таким разрешением, а те что встречаются на кнопочных телефонах, в продаже можно найти экраны с квадратными пикселями).
  • 96x68 HX1230: Это дешёвая имитация экранов, использующихся в старых Nokia. Драйвером экрана поддерживаются только самые базовые команды, напряжение настроить нельзя, и оно завышенное или завышенное в зависимости от телефона, из-за чего экран слишком тёмный или слишком светлый. Экран этот подключён к чипу через GPIO, который нужно дёргать процессором, что приводит к большой нагрузке на процессор. Частота обновления около 75 кадров, заметный шум.
  • 128x64 ST7565R: Не поддерживает изменение частоты обновления, стандартная около 77. Если точно попадаешь в частоту, то по экрану медленно проходит чёрная линия. Если не точно, то по экрану постоянно пробегает лёгкий шум (выбран такой вариант).

    У этих трёх экранов очень большое время отклика, что приводит к эффекту смазывания движущихся объектов (motion blur). Демонстрация Doom на чипе ST7567A. Также есть один редкий и уникальный вариант, встречается на LONG-CZ J9. На упаковке утверждается, что это самый маленький в мире раскладной телефон.

  • 64x48 SSD1306: OLED экран, драйвер поддерживает разрешение до 128x64, но работает с 64x48 экраном. Очень продвинутый по количеству настроек и команд. В отличие от предыдущих экранов - время отклика очень быстрое, даже соседние кадры не сглаживаются, очень сильно шумит, на камеру смартфона даже хуже, потому что камера пропускает часть кадров. Частота обновления чуть более 150. Экран подключён через GPIO, поэтому обновления экрана тратят много процессорного времени. Демонстрация Doom в 64x48.

Также в этом релизе:

  • Выпуск протестирован на 52-и моделях телефонов.
  • Написан драйвер для встроенного в чип LZMA-декомпрессора, теперь при загрузке сканируется и сжатая часть прошивки. Ранее для 40% телефонов приходилось вручную доставать из прошивки раскладку клавиш и указывать в аргументах запускаемой игры.
  • По запросам комментаторов с Opennet: для портов Doom и Wolf3D добавлена возможность активировать читы на неуязвимость и все предметы.