(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

...из Samsung Galaxy S4 Mini и микроконтроллера.
Иногда у меня лежит душа позалипать в какую-нибудь классику с NES, SEGA или PSP. Однако особое место в моём сердечке занимает игровой телефон Nokia N-Gage, который, к сожалению, не получил достойного продолжения. Недавно я пересматривал свою коллекцию гаджетов и подумал: а что, если...
#лонг #diy #игры #консоли #гейминг

❯ Предисловие

Думаю многие мои давние читатели заметили, что как минимум четверть статей в моем блоге так или иначе касается игр и портативного гейминга. За три года существования блога, мы с вами успели не только поностальгировать и "потыкать" игровые гаджеты, но и отремонтировать часть из них, узнать как разрабатывались и работали ‭«под капотом‭» игры и даже попытались спроектировать свою собственную игровую консоль!

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Два года назад в моей голове уже возникала идея сделать ‭«портативку‭» из полурабочего гаджета. В то время я хотел рассказать читателям о том, что многие старые девайсы можно использовать в качестве одноплатных компьютеров и HMI-панелей благодаря наличию пятачков с шиной UART на плате, с которой можно легко взаимодействовать в Android-приложениях! В качестве реального примера использования, я взял планшет с нерабочим тачскрином, подключил через UART геймпад, разработанный на базе RP2040 и написал программу, которая обрабатывает входящие пакеты и инжектит состояние кнопок напрямую в драйвер ввода:

Именно для того чтобы закончить этот проект я приобрел себе Ender3 V2
Именно для того чтобы закончить этот проект я приобрел себе Ender3 V2

По своей натуре, я - прожженный гик и у меня постоянно чешутся руки что-то запрограммировать и собрать самому. Недавно я осматривал свою коллекцию гаджетов и на полочке с смартфонами Samsung обнаружил легендарный Galaxy S4 Mini, который мне когда-то дарил один из читателей. У смартфона отсутствовала задняя крышка, средняя часть корпуса была немного ободрана, однако несмотря на почтенный возраст в 12 лет, смартфон продолжал нормально работать и даже AMOLED-матрица у него ничуть не выгорела!

А где DTF???
А где DTF???

И тут в моей голове что-то щёлкнуло: я вспомнил, что S4 Mini — смартфон с довольно неплохим железом для эмуляторов и очень крутым даже по современным меркам AMOLED дисплеем. На моей памяти, в мире не выходило ни одного серийного игрового телефона в монолитном корпусе с OLED-матрицей, а тут ещё рядом лежал оригинальный N-Gage, который я недавно купил в утиле и восстановил после воды. Я взвесил все за и против, прикинул схему и конструктив будущего устройства и принялся мастерить...

Всё начинается с кубика...
Всё начинается с кубика...

Перед тем как начать работу, нам необходимо определится с тем что нам нужно будет сделать для реализации такого гаджета на практике:

  • В первую очередь, нам необходимо продумать как геймпад будет общаться с нашим устройством. За исключением моего хака с UART'ом, у нас есть два варианта: первый — микроконтроллер выполняет роль USB-HID устройства (прикидываясь клавиатурой) и подключается к OTG-хосту гаджета. Среди плюсов этого подхода можно выделить низкую задержку, однако минусов гораздо больше. Например, далеко не все старые устройства поддерживают OTG и могут быть проблемы с реализацией одновременной работы USB-хоста и зарядки (зависит от реализации OTG в каждом конкретном устройстве). А второй вариант — это Bluetooth-HID, который работает почти с любыми Android устройствами, однако потребляет чуть больше энергии и может иметь небольшой инпут-лаг.

    После расследования выяснилось, что у S4 Mini OTG нет, а значит остается лишь один вариант — Bluetooth. Среди дешевых микроконтроллеров с BT выделяется лишь ESP32, который стоит буквально три пачки доширака. Его мы с вами и выберем.
  • Далее нам необходимо придумать внешний вид устройства. Изначально мне хотелось, чтобы гаджет по форм-фактору и эргономике напоминал оригинальный N-Gage. Но поскольку мне не хотелось делать слишком длинную ‭«колбасу‭» и бюджета по свободному пространству в корпусе откровенно не хватало, мне пришлось пойти на некоторые ухищрения — например, расположить блок кнопок вертикально.
  • Теперь самое сложное — смоделировать более-менее адекватный корпус и подогнать детали так, чтобы их хоть как-то можно было скомпоновать и закрепить. Я в 3D-печати новичок, а в вопросах проектирования корпусов — вообще неотесанный селюк, поэтому мне оставалось лишь смоделировать в блендере выпуклый меш, импортировать в TinkerCad и затем CSG'шками вырезать в нём дыр... отверстия.
  • И самое легкое — написать прошивку для микроконтроллера, а затем развести платы длля обе стороны геймпада, дабы наши кнопочки не просто прикольно щелкали, но и на практике работали в системе!

Звучит как приключение на 5 минут. Но вот как на практике? Давайте посмотрим!

❯ Моделируем корпус

В первую очередь я сел моделировать корпус устройства и прикидывать его размеры. В TinkerCad'е CSG'шками сделать корпус по референсу проблематично (по крайней мере для меня), поэтому я решил смоделировать основу в блендере. Я взял рендеры N-Gage с фронтальной части, установил камеру в ортографическую проекцию и принялся повторять контур корпуса оригинального телефона:

Это не криво. Это ‭«я художник, я так вижу‭»
Это не криво. Это ‭«я художник, я так вижу‭»

Далее я создал грани на одной половинке корпуса и отзеркалил их по горизонтали. Таким образом, корпус получился симметричным (кривым) с обеих сторон.

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...
(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Затем я убрал лишнее ребро посередине и вытянул корпус по оси Z с помощью инструмента Extrude. Теперь это напоминает поделку семиклассника на уроке обращения с рубанком:

Внимательные читатели могли заметить косяк, который из-за затенения я не замечал вплоть до первой печати
Внимательные читатели могли заметить косяк, который из-за затенения я не замечал вплоть до первой печати

После этого я использовал инструмент Inset faces, дабы создать новые грани на плоскости и вытянуть из них фронтальную часть корпуса. Таким образом, мы получаем ровные и мягкие стенки, которые затем можно смягчить ещё больше с помощью модификатора Bevel:

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Однако сейчас геометрия нашего корпуса полая, внутри неё ничего нет. Чтобы добавить внутренние стенки, мы воспользуемся модификатором Boolean (CSG) в блендере: дублируем геометрию нашего корпуса, немного уменьшаем её по оси X и Y (чем меньше дубль, тем толще будут стенки), и затем сдвигаем немного вниз:

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Затем на основном объекте корпуса добавляем модификатор Boolean, устанавливаем режим Difference, ставим дубль в качестве второго объекта и жмём Apply. Теперь у нашего корпуса внутри отнюдь не пустота!

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Далее экспортируем основу корпуса в формат STL, импортируем её в TinkerCad и берём линейку в зубы. Пора замерять габариты нашего устройства и размер дисплея. Поскольку S4 Mini уж очень скругленный, я аппроксимировал его размеры до прямоугольника (ни слово про мыло!):

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Далее я расположил ещё один прямоугольник размером с дисплей, который и вырежет нам необходимое пространство:

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

На этом подготовка болванки корпуса закончена, переходим к реализации геймпада.

❯ Геймпад

Изначально я решил распаять все кнопки геймпада на двух макетных платах — первая с ‭«стрелками‭» будет установлена слева, вторая с кнопками действий — справа. Поскольку место в корпусе сильно ограничено, текстолит я решил распилить: для этого я сделал насечки канцелярским ножом и затем руками отломал ненужные части.

В качестве кнопок я решил использовать обычные DIP-микрики, поскольку в моем городе не было ни плоских SMD-кнопок, ни тем более мягких мембранных. Ну а ещё они прикольно щёлкают. Я, как пользователь механической клавиатуры, гарантирую это!

Ошметки текстолита можно счистить надфилем или просто подровнять канцелярским ножом
Ошметки текстолита можно счистить надфилем или просто подровнять канцелярским ножом

Для реализации обработки кнопок есть несколько подходов:

  • «В лоб‭»: самый простой и самый подходящий для геймпадов. На один входной GPIO микроконтроллера вешается подтягивающий резистор и кнопка, которая коммутирует массу. Главный плюс такого подхода — возможность зажимать сколько угодно кнопок одновременно, а если ножек на микроконтроллере не хватает, то всегда можно использовать сдвиговый регистр!
  • На резисторах: требует наличия ADC в микроконтроллере. Принцип работы заключается в том, что на выходе каждой кнопки установлен резистор определенного номинала. В прошивке микроконтроллера опытным путем задается диапазон значений ADC, который соответствует нажатой кнопке. Такой подход иногда используется в планшетах для обработки кнопок по типу включения, громкости и т.п.
  • Матричный: используется в клавиатурах, в том числе и в телефонах. Позволяет реализовать 16-кнопочную клавиатуру всего с 8-ю сигнальными линиями, однако с таким подходом нельзя нажимать сразу несколько кнопок кнопок в одной ‭«линии‭» одновременно. Этим и страдали некоторые китайские игровые консоли, на которых нельзя было одновременно зажать вверх и влево или A и B!

Поскольку у нас всего 10 кнопок, мы выберем первый подход. Для этого мы подведем общую массу к нашей макетке, от которой пустим перемычки (дорожки) к каждой кнопке:

Флюкс-офф закончился прямо в момент подготовки статьи
Флюкс-офф закончился прямо в момент подготовки статьи

А с другой стороны подпаяем провода, которые пойдут на входы в наш микроконтроллер.

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Далее я снял размеры платы и замерил расстояние между кнопками, дабы накидать макет в CAD'е:

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

И только после этого я наконец-то напечатал первую примерочную болванку, в которой всё помещалось идеально! Время от раздумий до первой болванки — ~5-6 часов:

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

❯ Стыкуем корпус

Если с моделированием корпуса у меня проблем не возникло, то стыковка деталей — вопрос совершенно другой, особенно для человека без опыта проектирования корпусов. В какой-то момент времени, я даже впал в тильт и сломал парочку болванок, хотя планировал их оставить в коллекции на память. Что-ж, будет памятью о моей вспыльчивости.

Сначала я решил сделать толкатели кнопок. Для ‭«стрелок‭» я решил сделать классическую крестовину в духе GBA, а кнопки действий - цилиндрическими. Здесь в целом ничего сложного: подгоняем размеры толкателей к размерам кнопок, делаем у них небольшую выемку снизу, которая будет ‭«шляпкой‭» для самих кнопок, а также добавляем ‭«юбку‭» по бокам как ограничитель, дабы они не выпадали из корпуса:

А она ей как раз!
А она ей как раз!

С крестовиной всё чуточку сложнее: сначала я сделал монолитную в стиле GameBoy, однако из-за того что расстояние между кнопками относительно маленькое, при нажатии на стрелку иногда нажималась и вторая кнопка. Поэтому я решил её разделить на несколько частей, оставив характерный рельеф посередине для лучшей тактильности. Я печатал много разных вариантов: подгонял зазоры для уменьшения люфта и добавлял тактильные выемки, однако остановился на классическом варианте:

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Далее встал вопрос как закрепить плату с геймпадом с обратной части корпуса. Я долго думал и прикидывал варианты: хотел и саморезы вкручивать, и гайки вплавлять, но потом придумал что самым лучшим и надежным решением будут салазки приклеенные на дихлорэтан, которые при желании можно снять не ломая корпус, но которые будут хорошо выдерживать постоянное усилие со стороны игрока!

Мне кажется что это невероятный говнокод и костыль от мира инженеров. Напишите своё мнение на этот счёт в комментариях.
Мне кажется что это невероятный говнокод и костыль от мира инженеров. Напишите своё мнение на этот счёт в комментариях.

Когда зазоры были подогнаны, я принялся моделировать заднюю крышку. Дабы она не выбивалась из общего стиля, я сделал её из фронтальной части корпуса: продублировал, отменил все CSG-операции характерные для основного корпуса и обрезал стенки одним большим кубиком.

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Далее я пошёл в ближайший ‭«хозяйственный‭», попросил самые маленькие саморезы с острой шляпкой и добавил под них места в корпусе, при этом не нарезая резьбу на самой модели.

Учитывая плотность 3D-печати, немудрено что саморезы сворачивают резьбу уже после 5-6 итераций сборки-разборки.
Учитывая плотность 3D-печати, немудрено что саморезы сворачивают резьбу уже после 5-6 итераций сборки-разборки.

Затем я сделал выемки для саморезов на крышке и отверстия для динамика.

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

После этого встал вопрос с разъемом зарядки. Я решил использовать Type-C: заказал несколько разъемов на плате, обмерил их и сделал нишу в корпусе с небольшой поддержкой:

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Ну что-ж, корпус более-менее готов. Теперь можно нарезать модель в слайсере...

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

И напечатать! Как по мне, получилось очень даже стильно. Да, кто-то скажет, мол, видно, что это колхоз, а не Industrial-grade, но как по мне для самоделки вполне на уровне!

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...
(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

На этом разработка корпуса наконец-то закончена!

❯ Пишем прошивку

Теперь когда корпус нашего устройства готов и элементы в нём более-менее стыкуются, можно перейти к написанию прошивки. Как я уже говорил ранее, в качестве микроконтроллера я решил выбрать ESP32 благодаря копеечной цене и наличию неплохого BT-стека:

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

В качестве основы, я взял официальный сэмпл BT HID-устройства с гитхаба Espressif. Собрав прошивку и протестировав что всё работает нормально, я принялся адаптировать её под свои задачи. Сначала я написал код для опроса кнопок: устанавливаем GPIO в режим входа с подтяжкой к высокому уровню, затем по запросу итерируемся по массиву с GPIO и заносим состояние кнопок в отдельный массив:

uint8_t input_gpio_mapping[] = { INPUT_GPIO_LEFT, INPUT_GPIO_RIGHT, INPUT_GPIO_UP, INPUT_GPIO_DOWN, INPUT_GPIO_A, INPUT_GPIO_B, INPUT_GPIO_C, INPUT_GPIO_D, INPUT_GPIO_E, INPUT_GPIO_F }; uint8_t input_key_states[INPUT_KEYS_COUNT]; void input_initialize_hw() { for(int i = 0; i < INPUT_KEYS_COUNT; i++) { gpio_reset_pin(input_gpio_mapping[i]); gpio_set_direction(input_gpio_mapping[i], GPIO_MODE_INPUT); gpio_set_pull_mode(input_gpio_mapping[i], GPIO_PULLUP_ONLY); } } void input_update_key_state() { for(int i = 0; i < INPUT_KEYS_COUNT; i++) input_key_states[i] = !gpio_get_level(input_gpio_mapping[i]); // TODO: Implement timestamp-based debouncing }

У любых механических кнопок есть особенность, которая называется дребезг. Случается она в момент когда мы отпускаем кнопку, но при этом размыкатель ещё не полностью поднялся в крайнее верхнее положение. Бороться с этим можно по разному, самый простой способ — программный, когда мы обновляем состояние кнопки только по прошествии определенного времени (измеряемое в миллисекундах) с момента прошлого апдейта.

Все HID-устройства описываются специальным дескриптором, однако формат пакетов с репортами о состоянии устройства у них очень сильно отличается: мышки передают ускорение по осям X и Y, а также состояние кнопок, клавиатуры передают до 8-нажатых клавиш одновременно (наследие PS/2), а у геймпадов целый ворох стандартов (DirectInput, XInput... чего только нет. Кстати именно поэтому внешние геймпады обычно имеют несколько режимов). Алгоритм отправки репортов очень прост: 60 раз в секунду проверяем состояние кнопок, если какие-то нажаты — заполняем буфер с нажатыми клавишами и затем отправляем репорт хост-устройству.

// Internal input keycode mapping to HID int hid_key_mapping[] = { HID_KEY_DOWN_ARROW, HID_KEY_LEFT_ARROW, HID_KEY_UP_ARROW, HID_KEY_RIGHT_ARROW, HID_KEY_Z, HID_KEY_LEFT_GUI, HID_KEY_V, HID_KEY_ENTER, HID_KEY_C, HID_KEY_X }; uint8_t hid_report[8]; vTaskDelay(1000 / portTICK_PERIOD_MS); while(1) { input_update_key_state(); vTaskDelay((1000 / 60) / portTICK_PERIOD_MS); if (sec_conn) { int hid_report_offs = 0; memset(&hid_report, 0, sizeof(hid_report)); // Not more than 8 keys pressed at once for(int i = 0; i < INPUT_KEYS_COUNT; i++) { if(hid_report_offs == 8) break; if(input_key_states[i]) { hid_report[hid_report_offs] = hid_key_mapping[i]; hid_report_offs++; } } esp_hidd_send_keyboard_value(hid_conn_id, 0, &hid_report, hid_report_offs); } }

Вуаля! Всё работает идеально:

❯ Доводим ПО смартфона

Мы уже почти дошли до финала, осталось лишь чуть-чуть доработать прошивку смартфона! Для этого, его сначала необходимо рутировать: ставим CWM через Odin и устанавливаем SuperSU!

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

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

На смартфонах Samsung за это отвечает бинарник /system/bin/lpm или же /system/bin/playlpm. Изначально я хотел сделать жёсткую ссылку на программу reboot, которая не работала пока не были запущены какие-то Samsung'овские службы. Затем я узнал что есть возможность напрямую направить ядру запрос о перезагрузке устройства с помощью sysrq.

Далее был написан простенький скрипт:

#!/system/bin/sh echo 1 > /proc/sys/kernel/sysrq echo b > /proc/sysrq-trigger

Который тоже не работал. И я понял что lpm нужно подменять другой самопальной программой. Так была написана и собрана с помощью NDK вот такая мелкая утилита, с которой уже всё заработало:

int main(int argc, char** argv) { system("echo 1 > /proc/sys/kernel/sysrq"); system("echo b > /proc/sysrq-trigger"); }

Далее необходимо было решить вопрос с виртуальными кнопками: поскольку в корпусе консоли виден только дисплей смартфона без кнопки Home, нам нужен был способ как-то управлять системой. Для этого было достаточно лишь пропатчить build.prop и добавить qemu.hw.mainkeys=0:

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...
Кнопочки теперь на экране!
Кнопочки теперь на экране!

❯ Аппаратные доработки

Далее необходимо было решить вопрос с зарядкой. Как я уже говорил выше, было решено использовать Type-C. Я заказал разъём на плате, разобрал смартфон и кинул перемычки с цепи питания и сигнальных линий на разъем.

У Samsung'ов в те годы были не совсем стандартные разъемы с кучей пластика и к VBus'у аккуратно подпаяться немного проблематично
У Samsung'ов в те годы были не совсем стандартные разъемы с кучей пластика и к VBus'у аккуратно подпаяться немного проблематично

Теперь нужно решить задачу запитывания микроконтроллера. ESP32 в режиме BLE кушает целые 130мА (что очень много, телефоны нулевых кушали меньше с учетом параллельно работающего GSM-тракта!) в режиме активной передачи данных. Поскольку на самой плате с ESP32 используется LDO AMS1117 с высоким dropout-напряжением в 1.2В, для использования с обычным литий-ионным аккумулятором необходимо было использовать ULDO с дропаутом в ~0.3В...

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

...но зачем, если контроллер питания смартфона — буквально и есть многоканальный DC-DC преобразователь, который выдаёт сразу несколько различных напряжений:

  • 0.8В-1.2В VCore, это шина питания ядер процессора. Именно на ней работает вся или почти вся внутренняя логика системы на кристалле.
  • 1.2V-1.8V VRef - обычно это референсное напряжение для работы процессора с внешней логикой. Впрочем, с таким напряжением может быть и одна из шин питания для каких-то модулей (например камеры), это зависит от платформы.
  • 3.3V - Ну, здесь всё очевидно. 3.3В — одно из самых распространенных напряжений в микроэлектронике и может использоваться в широком спектре модулей. Например оно может использоваться для запитки модуля камеры, различных датчиков, контроллера тачскрина, усилителя и т.п. Именно эта шина питания в идеале нам и нужна.

Однако 3v3 уровни могут быть и логическими. Крайне не рекомендую вешать нагрузку аж в целых 130мА на какую-нибудь цифровую линию, есть неиллюзорный риск спалить процессор или контролер питания. Лучше всего брать эту шину питания с здоровых decoupling-конденсаторов, однако имейте ввиду что шина может быть нагружена другими устройствами и вы со своей нагрузкой в сотню миллиампер можете увести КП в защиту!

В случае с S4 Mini у меня был сервис-мануал с схемой, где я принялся искать нужное напряжение. Изначально у меня была возможность взять 3.3В с питания eMMC, однако по ходу изучения схемы я заметил ещё одну подходящую шину питания — 3P0 (т.е 3В ровно), которая питает Wi-Fi, ИК-порт и тачскрин.

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Я решил заглянуть в даташит на микроконтроллер и убедился, что он умеет работать в том числе и при 3В на входе:

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Тем не менее, 3В — это пороговое напряжение при котором может работать чип. Если питание нестабильное и проседает, то МК либо зависнет, либо упадет в ресет. Однако я был уверен что на выходе DC-DC с КП смартфона точно должно быть всё нормальным. Я быстренько вывел перемычку и запитал МК буквально ‭«в воздухе‭», проверил что всё работает стабильно, а затем припаял несколько жилок с LVDS-кабеля и закрепил УФ-маской:

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Ну что ж, пришло время собрать всё воедино! Не без помощи дихлоэретана салазки были установлены, платы геймпада вставлены, все питания припаяны, а резьба в задней крышке была нарезана.

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

И вот, наконец-то моё детище собрано! Давайте же посмотрим что я там насобирал!

❯ Тестируем

Одним из основных критериев будущего игрового смартфона была конечно-же возможность сохранить функционал телефона. Иными словами, мне очень хотелось чтобы девайс повторял концепцию N-Gage и действительно в себе совмещал возможность звонить и комфортно играть в игры!

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

В целом, я считаю что у меня это вполне получилось. Помимо функций самой звонилки, Android 4.4 всё ещё вполне может порадовать владельца базовым серфингом сети (большинство сайтов не откроется... ну нам и опеннета хватит!) и мессенджерами - здесь пока ещё работают и Telegram, и ВК в лице в Kate Mobile:

Стилёвый гаджет!
Стилёвый гаджет!

Однако есть определенный нюанс... я взял GT-I9190 - т.е односимочную 3G-версию S4 Mini. А как известно, 3G в России уже практически не используется, поэтому вне Wi-Fi придется ограничится EDGE :)

Подписывайтесь на мой паблик в ВК и канал в Telegram - https://t.me/monobogdann
Подписывайтесь на мой паблик в ВК и канал в Telegram - https://t.me/monobogdann

Вчера я сделал анонс статьи на Пикабу и несколько читателей задали резонный вопрос: это же буквально смартфон 2013 года, он же, на первый взгляд, ничего не умеет в современных реалиях. Однако спешу вас заверить, что у S4 Mini под капотом как раз всё не так уж и плохо! 400'ого Snapdragon'а хватает для большинства мобильных игр тех лет, не говоря уже об эмуляторах. При этом в отличии от старших 600'ых снапов (тогда 800'ый ещё не вышел), он не слишком сильно греется и более лоялен к и без того не самому объёмному аккумулятору!

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

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

Когда запускаешь любимый Super Mario Bros на офигенной AMOLED-матрице, то сразу понимаешь что весь проект был затеян точно не зря. После отключения линейного фильтра и растягивания картинки на весь экран, то диву даешься какие тут сочные цвета - не как на ЭЛТ-телевизоре, но тоже очень годно!

Ещё раз напомню, что справа не рамка, а забагованные софт-кнопки. А вот сверху - рукопопие :)
Ещё раз напомню, что справа не рамка, а забагованные софт-кнопки. А вот сверху - рукопопие :)

Тоже самое касается и Batlte City. В целом, какого-то ощутимого инпут-лага нет (учитывая что мы играем на эмуляторе), всё работает очень шустро и играется бодро:

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Давайте же перейдем к чему-то ещё более пестрому и "графонистому" - а именно к Sega Mega Drive с оригинальным Соником! Здесь игра точно также летает, звук не хрипит, а картинка выглядят максимально приятной. Когда-то AMOLED-матрицы Samsung ругали за PenTile и немного не естественную цветовую схему... но в эмуляторах она как-будто какой-то шарм придает.

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Далее я опробовал DOS'овскую классику - Wolfenstein 3D. Помимо "вольфа", я хотел добавить в тесты также и Quake... но порты попались кривые и не запускались. Очевидно что игра, которая шла даже на 286'ом, будет отлично летать на S4 Mini:

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Ну и нативные игрушки здесь тоже работают неплохо. В какие-нибудь аркады типа Angry Brids, Fruit Ninja или Asphalt можно поиграть с большим удовольствием!

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

❯ Заключение

Вот такой незамысловатый и полезный девайс у нас с вами сегодня получился. Вы можете собрать такой и сами, схему, код прошивки и исходные файлы моделей я выкладываю на своём Github. Корпус можно "пощупать" в TinkerCad.

Покажу потомкам, чем их батя занимался в свои 23
Покажу потомкам, чем их батя занимался в свои 23

Сама разработка заняла всего 7 дней, большая часть времени ушла на подгонку деталей. Да, эту неделю я определенно точно почти не спал и даже один раз попсиховал. Однако все время разработки мне было дико весело и интересно. Ну, а что ещё пареньку в 23 года то нужно, кроме как писать код, копаться в девайсах и ТАЗах!?

Жду ваше мнение о моей самоделке в комментариях! А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет, подписывайтесь на мой Telegram-канал ‭«Клуб фанатов балдежа‭», куда я публикую бэкстейджи статей, иногда полезные посты ну и немножечко щитпоста! Если вам интересны ролики на ту же тематику — предлагаю подписаться на мой YouTube-канал.

Если вдруг статья вам понравилась и вы хотели бы помочь мне материально - это можно сделать нажав на кнопку с рублем в комментариях ;)

Опрос общественного мнения - чуть ниже. А пока важное объявление:

Для подготовки статей с разработкой самопальных игрушек под необычные устройства, объявляется розыск телефонов и консолей! В 2000-х годах, китайцы часто делали дешевые телефоны с игровым уклоном — обычно у них было подобие геймпада (джойстика) или хотя бы две кнопки с верхней части устройства, выполняющие функцию A/B, а также предустановлены эмуляторы NES/Sega. Фишка в том, что на таких телефонах можно выполнять нативный код и портировать на них новые эмуляторы, чем я и хочу заняться и написать об этом подробную статью и записать видео! Если у вас есть телефон подобного формата и вы готовы его задонатить или продать, пожалуйста напишите мне в Telegram (@monobogdan) или в комментарии. Также интересуют смартфоны-консоли на Android, там будет контент чуточку другого формата :)

(Лонг) Как я сделал свой игровой смартфон с OLED-дисплеем...

Кроме того, я ищу подделки на брендовые смартфоны 2009-2015 года выпуска. Многие из них работают на весьма интересном железе и об их моддинге я бы мог сделать интересный контент. Особо разыскиваются подделки Apple iPhone и HTC (по типу HD2 и Touch Diamond 2) на Windows Mobile и Android, а также Samsung Galaxy. Также представляют моддерский интерес первые смартфоны Xiaomi из серии Mi, Meizu (ещё на Exynos) и телефоны Motorola на Linux (например, EM30, RAZR V8, ROKR Z6, ROKR E2, ROKR E5, ZINE ZN5, о которых я хотел бы подготовить отдельные статью и видео, поскольку они работали на очень мощных для своих лет процессорах, поддавались серьезному моддингу и были способны запустить даже Quake.

Большое спасибо читателям и зрителям за подгоны, без вас контент бы не выходил!

Как вам статья?
Опа! А вы говорили DTF - для щитпостеров. Но даже щитпостеры могут публиковать хорошие статьи!
На такой годный лонгрид можно накидать шметрик... Филипп оценит!
Статья лонгосодержащая, идентичная натуральной. Конечно результат получился прикольный, но автор — сельское быдло, ничего не смыслящее в инжиниринге и разработке устройств.
Мда, статья — редчайший кал. Пошел промывать глаза.
Собрал свой N-Gage 2? Молодец, как насчет того чтобы выйти на улицу и подкатить к операторше СДЭК!?
Все таки монобогдану пора заменить прокладку на штанах в своей десятке, дабы не занимался микродозингом выхлопных паров и не писал такую дичь.
Как вам девайс?
Здорово получилось! На примере этой статьи мы видим, что на барахолках лежат тысячи девайсов с офигенным эмуляторным железом и AMOLED-дисплеями. Нужно только чуть-чуть поднапрячься…
Прикольно, но не более того. Чисто поиграться разок.
Идея — кал, реализация — кал. Автор — тоже кал.
Ну если у тебя руки из задницы растут, ну не лезь ты в CAD и проектирование!!!
Ооо братан, с такими зазорами мы тебя с мужиками на УАЗе уже заждались! Отправили тебе на мейл оффер жестянщика!!!
254
39
35
5
2
2
1
75 комментариев