Doom для кнопочных телефонов

Для определения чипсета кнопочного телефона написал отдельную статью. Предполагается, что вы сначала должны проверить чипсет телефона перед указанными ниже инструкциями.

Исходники здесь, готовые бинарники в Releases.

Волшебная клавиша

Сначала нужно найти «boot key», это кнопка что переводит телефон в режим загрузки прошивки (download mode). Что также позволяет запустить свой код на телефоне, не перезаписывая прошивку.

Если вам попался чип SC6531E, то найти нужную кнопку перебором гораздо проще. Достаточно вытащить батарейку, и зажимать одну кнопку, подключать USB кабель (удерживая кнопку) и смотреть смогла ли программа spd_dump подключиться к телефону (или Zadig для Windows пользователей, что еще не устанавливали драйвер). Если нет, то вынимаем кабель и подключаем удерживая другую кнопку.

Для SC6531DA придётся каждый раз вынимать батарею и ставить обратно, кнопку нужно держать нажатой пока вставляете батарею. USB кабель можно подключить заранее, или после этого, удерживать кнопку во время подключения кабеля не обязательно.

Этого можно избежать, если использовать USB кабель с замкнутыми контактами 4 и 5. В обычных кабелях они не соединены. Это используется в OTG адаптерах (переходник для подключения к телефону, например, флэшки). Производители телефонов и смартфонов с micro-USB разъёмом использовали это для создания специального кабеля, при подключении которым устройство переводится в особый режим загрузки.

Такой кабель можно заказать на Алиэкспресс (и ждать несколько недель)…

«boot cable» с Алиэкспресс

…или купить OTG адаптер и AM-AM USB кабель и объединить их вместе.

OTG адаптер и AM-AM USB кабельOTG адаптер и AM-AM USB кабель

При подключении таким кабелем искать загрузочную кнопку не нужно.

Для пользователей Linux

Прочитайте Readme от spd_dump, чтобы узнать как запускать без sudo.

Для пользователей Windows

Библиотеке libusb нужна установка драйвера, делается это через программу Zadig. Запустите Zadig, и если вы подключили телефон в загрузочном режиме, то он появится в списке с кодом 1782:4d00. Установите драйвер WinUSB для него.

так Zadig видит телефон подключенный в download modeтак Zadig видит телефон подключенный в download mode

Как запустить Doom на телефоне

  1. Создать директорию workdir, положить в неё ресурсы игры (.wad файл, например doom1.wad). Doom 2 и другие совместимые тоже поддерживаются, Heretic и Hexen не поддерживаются (использованы исходники ванильной версии Doom от id Software).

  2. Записать эти команды в скрипт (для Windows, в архиве с бинарниками, есть пример «run.bat») и запустить, после этого присоединить телефон к USB (зажав кнопку загрузки, как описано выше):

./spd_dump --wait 300 fdl nor_fdl1.bin 0x40004000 fdl fpdoom.bin ram
cd workdir && ../libc_server -- --bright 50 --rotate 3 doom

На чём получилось запустить

название

чип

LCD

разрешение

boot key

F+ F256

SC6531E

GC9306

240×320

*

Digma Linx B241

SC6531E

ST7789

240×320

центр

F+ Ezzy 4

SC6531E

GC9106

128×160

1

Joy’s S21

SC6531DA

GC9108

128×160

0

Vertex M115

SC6531DA

ST7735

128×128

вверх

Для Vertex M115 не находит таблицу с клавишами, надо подавать отдельной опцией.

  • Все указанные телефоны показаны на картинке к новости.

  • Также записал новое видео, показывающее загрузку Doom на этих телефонах (кроме F+ F256, что был на первом видео).

На чём не получилось

  • Подразумеваются телефоны на чипе SC6531(E/DA), на чипсетах других производителей или других чипсетах Spreadtrum работать не будет.

Экран может быть подключен через разные режимы, LCM или SPI. Первый более распространён, справиться со вторым я не смог.

название

чип

смарт часы DZ09

SC6531DA

BQ 3586 Tank Max

SC6531E

Nobby 170B

SC6531E

  • Для BQ 3586 чипсет указывается как SC6531H, но единственная разница от SC6531E, что я заметил, это увеличенный объём ОЗУ и флэш памяти (8 мегабайт, в отличие от обычных 4-х). Плюс телефоны на этом чипе имеют больший экран, разрешением 320×480.

Экран нетрадиционной ориентации

Пока не нашел ни одной LCD панели, что используется на кнопочных телефонах, что имела бы родную горизонтальную ориентацию. Поэтому, если вы видите телефон с экраном установленным горизонтально — то это вертикальный экран установленный горизонтально. Так как дешевые LCD экраны имеют плохие углы обзора — лучше всего в одну сторону, сносно влево/вправо, и очень плохо в противоположную — то получается одним глазом вы видите нормальное изображение, а другим инвертированное, что очень некомфортно для глаз.

нетрадиционно установленный LCD экраннетрадиционно установленный LCD экран

Дополнительно

Есть еще тонкости с указанием опций для игры в горизонтальном положении (»--rotate» из примера, и что нужно указывать для экранов установленных горизонтально), об этом написано в Readme на github. Файл с раскладкой клавиш (keymap) для Vertex M115 есть в Releases, там же написано какой опцией его подключить.

P.S.: Видимо еще дополню, если будут распространённые вопросы/проблемы.

© Habrahabr.ru