Для определения чипсета кнопочного телефона написал отдельную статью. Предполагается, что вы сначала должны проверить чипсет телефона перед указанными ниже инструкциями.
Исходники здесь, готовые бинарники в Releases.
Волшебная клавиша
Сначала нужно найти "boot key", это кнопка что переводит телефон в режим загрузки прошивки (download mode). Что также позволяет запустить свой код на телефоне, не перезаписывая прошивку.
Если вам попался чип SC6531E, то найти нужную кнопку перебором гораздо проще. Достаточно вытащить батарейку, и зажимать одну кнопку, подключать USB кабель (удерживая кнопку) и смотреть смогла ли программа spd_dump подключиться к телефону (или Zadig для Windows пользователей, что еще не устанавливали драйвер). Если нет, то вынимаем кабель и подключаем удерживая другую кнопку.
Для SC6531DA придётся каждый раз вынимать батарею и ставить обратно, кнопку нужно держать нажатой пока вставляете батарею. USB кабель можно подключить заранее, или после этого, удерживать кнопку во время подключения кабеля не обязательно.
Этого можно избежать, если использовать USB кабель с замкнутыми контактами 4 и 5. В обычных кабелях они не соединены. Это используется в OTG адаптерах (переходник для подключения к телефону, например, флэшки). Производители телефонов и смартфонов с micro-USB разъёмом использовали это для создания специального кабеля, при подключении которым устройство переводится в особый режим загрузки.
Такой кабель можно заказать на Алиэкспресс (и ждать несколько недель)...
...или купить OTG адаптер и AM-AM USB кабель и объединить их вместе.
При подключении таким кабелем искать загрузочную кнопку не нужно.
Для пользователей Linux
Прочитайте Readme от spd_dump, чтобы узнать как запускать без sudo.
Для пользователей Windows
Библиотеке libusb нужна установка драйвера, делается это через программу Zadig. Запустите Zadig, и если вы подключили телефон в загрузочном режиме, то он появится в списке с кодом 1782:4d00. Установите драйвер WinUSB для него.
Как запустить Doom на телефоне
Создать директорию workdir, положить в неё ресурсы игры (.wad файл, например doom1.wad). Doom 2 и другие совместимые тоже поддерживаются, Heretic и Hexen не поддерживаются (использованы исходники ванильной версии Doom от id Software).
Записать эти команды в скрипт (для 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 |
240x320 |
* |
Digma Linx B241 |
SC6531E |
ST7789 |
240x320 |
центр |
F+ Ezzy 4 |
SC6531E |
GC9106 |
128x160 |
1 |
Joy's S21 |
SC6531DA |
GC9108 |
128x160 |
0 |
Vertex M115 |
SC6531DA |
ST7735 |
128x128 |
вверх |
Для 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-х). Плюс телефоны на этом чипе имеют больший экран, разрешением 320x480.
Экран нетрадиционной ориентации
Пока не нашел ни одной LCD панели, что используется на кнопочных телефонах, что имела бы родную горизонтальную ориентацию. Поэтому, если вы видите телефон с экраном установленным горизонтально - то это вертикальный экран установленный горизонтально. Так как дешевые LCD экраны имеют плохие углы обзора - лучше всего в одну сторону, сносно влево/вправо, и очень плохо в противоположную - то получается одним глазом вы видите нормальное изображение, а другим инвертированное, что очень некомфортно для глаз.
Дополнительно
Есть еще тонкости с указанием опций для игры в горизонтальном положении ("--rotate" из примера, и что нужно указывать для экранов установленных горизонтально), об этом написано в Readme на github. Файл с раскладкой клавиш (keymap) для Vertex M115 есть в Releases, там же написано какой опцией его подключить.
P.S.: Видимо еще дополню, если будут распространённые вопросы/проблемы.
Комментарии (11)
EXL
21.12.2022 23:43Было бы здорово, если бы вы перечислили технические характеристики упомянутых вами SOC'ов, интересует частота CPU и количество RAM.
Такой ещё вопрос, есть ли теоретическая возможность запустить подобный порт DOOM'а не в режиме bootloader'а, а в режиме самой прошивки? По типу того, как это было сделано в старых телефонах Sony Ericsson и Siemens посредством Elf'ов и специальных патчей. Подозреваю что всё может упереться в количество RAM.
использованы исходники ванильной версии Doom от id Software
Были ли использованы какие-либо оптимизации ванильных исходников для их работы на этих устройствах? Или мощности этих SOC для DOOM'а хватает с лихвой?
jpegqs Автор
22.12.2022 08:12+1Про чип можете прочитать в моей первой статье.
Уточнение к первой статье: чип SC6531DA оказался более старым, чем SC6531E, но по некоторым характеристикам он лучше, например макс частота 312 МГц, то есть в полтора раза выше.
Можно записать вместо прошивки, но без драйвера для MicroSD это будет бесполезно. При 4 мегабайтах RAM на дешевых моделях - запустить игру вместе с ОС из прошивки - невозможно, только если сделать режим, когда прошивка выгружается (и функции сотовой связи работать не будут), а после выхода из игры загружается снова. При 8 мегабайтах памяти хватит, это чип SC6531H (совместимый с E).
В самих исходниках Doom предполагается (README.asm), что некоторые функции перепишут на ассемблер, и я переписал (doomasm.s в репозитории на гитхабе).
Для Doom мощности чипа более чем хватает. И мне кажется, что проц довольно мощный, ОЗУ ставят очень мало.
EXL
23.12.2022 01:52При 4 мегабайтах RAM на дешевых моделях - запустить игру вместе с ОС из прошивки - невозможно, только если сделать режим, когда прошивка выгружается (и функции сотовой связи работать не будут), а после выхода из игры загружается снова. При 8 мегабайтах памяти хватит, это чип SC6531H (совместимый с E).
Спасибо за ответ, а вы не в курсе, есть ли в природе какие-нибудь версии и порты DOOM, где подобные ограничения сняты и игра вмещается в 1-2 МБ RAM?
jpegqs Автор
24.12.2022 08:28Это не ограничения, а требования. Всё равно как хотеть чтобы автомобиль работал на педалях и называть требования бензина для работы "ограничением". Вам такое зачем?
Помню читал про упрощенный движок Doom для порта на какую-то приставку. Нашел, но раньше читал не на Хабре.
kpetob
23.12.2022 21:16Ничего себе. Воспоминания нахлынули
В 2008 году я искал игру. Потом я её нашёл.
Игра с телефона Benq S700, но нашёл я её благодаря раскопкам прошивки Samsung SGH-P730, в этих телефонах, помимо JAVA, есть игры в формате vcg. Это были "3D" игры. У Benq S700 они лежали на карточке SD, а у SGH-P730 были зашиты в прошивку, в которой я и нашёл следы DooM, стал искать файлы с расширением vcg и таким образом вышел на Project E.N.D.
Ссылка на wad-файл (можно запустить любым движком DooM)
https://yadi.sk/d/FLtxBjUY33fT66
Обзор телефона Benq S700 на mobile-review датируется 8 июня 2005 года (мне в этот день исполнилось 18 лет)
http://www.mobile-review.com/review/benq-s700.shtml
Вместо финальных титров там переделка диалога "All your base are belong to us"
ver 1.7 (2004/10/22)
jpegqs Автор
24.12.2022 08:19Ссылка на wad-файл (можно запустить любым движком DooM)
Всё-таки не любым, или я не нашел правильной опции.
dlinyj
Ух как круто! Подарок ребёнку. А сохраняться можно в этом думе? Прям даже захотел себе такой телефон. Не продаёте случаем? :).
jpegqs Автор
Сохраняться можно, забыл еще тут прямо написать (но это было в первой моей статье), что звук не сделан и играть придётся с подключенным USB кабелем. Можно его отключить после загрузки уровня, но потом зависнет при любом обращении к файловой системе.
При сохранении есть тонкость, что без указания имени сохранения - игра не сохраняет, надо нажать на одну из кнопок смены оружия (что добавит в имя какую-то цифру). Сохраняется в рабочую директорию игры на ваш компьютер. Причём сохранения должны быть совместимы с DOS версией игры, и некоторыми портами игры, если там исправили огрехи ванильной версии (и я ничего не сломал, потому что давно не проверял).
Еще забыл про раскладку клавиш для игры написать (лучше картинку сделать), но разобраться не сложно.
Телефоны продаются на популярном в России интернет-магазине, кроме двух тут остальные куплены специально для тестирования. Брал на распродажах с большими скидками.
dlinyj
А, то есть это не самостоятельное устройство с DOOM. Жаль, а то думал карманный DOOM для ребёнка :).
jpegqs Автор
В теории можно сделать из этого игровую приставку, если разобраться еще с работой MicroSD разъёма. Можно сделать NES/SNES эмулятор. Но у меня нет желания это серьёзно дорабатывать, особенно в одиночку, реверс-инжиниринг это тяжелая работа.
dlinyj
Очень знакомо… Я так с Jornada 720 сломался.