Ну... Почти. Перед вами достаточно уникальный смартфон для своих лет. L925 (встречается также вариация L1020) вышел в 2013 году из под пера неизвестного китайского завода и явно косит на легендарный 40-мегапиксельный камерафон от Nokia
Ключевая фишка этой модели была в цене. Новым смартфон можно было купить примерно за 1.500 рублей с учётом всех наценок - это был самый дешёвый розничный смартфон без симлока и операторских услуг. В себестоимости он действительно был в районе 500-600 рублей (когда рубль был по 30).
Зати деньги, пользователь получал простенькую, но не самую плохую TN-матрицу с разрешением 480x320, полноценный ёмкостный тачскрин на два касания, аккумулятор типа BL-5B, как в Nokia E71. По железу было в целом не так уж и плохо по меркам бюджеток тех лет:
Чипсет: Spreadtrum SC6820 (ныне Unisoc) с одним ядром Cortex-A5, работающим на частоте 1ГГц и GPU Mali300 в одноядерной конфигурации
Память: 256МБ DDR1 и 256МБ NAND.
Коммуникации: 2G (и только 2G), Wi-Fi, Bluetooth, FM.
При этом чипсет был чудом инженерной мысли. Он в сочетал в одном кристалле почти все модули, необходимые для работы устройства: большую часть радиотракта, включая часть фронтэнда, контроллер питания с чарджером литиевых аккумуляторов и набором LDO для питания остальных модулей устройства, Baseband-сопроцессор, а также различную периферию. Смартфону на его базе требовался лишь дополнительная часть фронтэнда, усилитель и комбочип с Wi-Fi и Bluetooth. Чип появился в 2011 году, а для тех лет это вполне неплохие характеристики, особенно когда люди массово ходили с устройствами на базе заметно более слабого Qualcomm MSM7227.
Этот чипсет применялся в основном в смартфонах Samsung, Fly и... китайских подделках. Да, когда то этот процессор был основной для всех этих поддельных Samsung'ов, iPhone'ов на Андроиде и HTC. Нередко они нагло врали в характеристиках и писали мол "у меня медиатек, пусть и младший, а не какой то там спредтрум!!!"
Моя же история знакомства с такими телефонами началась в 2013 году, когда я был ещё школяром с китайской Java-подделкой под Galaxy S III в качестве основного телефона, но уже с планшетом на Android (на базе Allwinner A10). Уж очень долго я упрашивал маман выделить мне 2 тыщи рублей и купить ну хоть какой нибудь Android смартфон, на что маман в один день согласилась и повела меня не в Евросеть или связной, а на Ейский рынок электроники :)
Как итог, маман купила мне реплику Galaxy S3 Mini, я в припрыжку побежал домой и сразу начал скачивать все желаемые игры. А затем смартфон разрядился, я его подкинул на зарядку и он больше не включился :( Честно сказать, если бы он у меня остался сейчас - я бы попытался разобраться в чем дело, но на следующий же день он был обменян на другую реплику - на том же чипсете, только с Android 2.2 на борту...
К и без того тормозной референсной прошивке Spreadtrum, где пользовательскому софту оставалось ~32МБ памяти, производитель накатил оболочку по типу тачвиза и живые обои с мухомором... Это был уникальный опыт: школяр в 2013 сидит через 2G на Spaces, качает треки Linkin Park по принципу "слушаю один трек, другой докачивается, если не докачался - снова слушаем :)" и играет в игры, которые постоянно вылетают от нехватки ОЗУ. А уж как все плохо было с софтом на 2.2...
Потом у меня появился клон S4 на все том же чипсете, только плюсом был огромный (по тем временам) экран и Android 2.3. На нем я довольно долго сидел, но АКБ на таких устройствах к сожалению быстро вспухали, а изготовливать их сам я не умел :(
Прошло 13 лет, а я все ещё помню тот самый первый свой Android-смартфон и иногда выискиваю старые подделки на брендовые смартфоны, которые в свободное время пытаюсь реставрировать или замоддить. О парочке таких, включая люмию из поста, я писал статью, а вот китайский S4, айфон 5C на Андроиде и NoName-моноблок из своей юности я так и не нашел :( Видимо большинство таких гаджетов незаслуженно ушло в металлолом!
Китайский айфон после воды, который я купил и восстановил
Клавиатура съёмная, при желании прижимается к телефону, причём она полностью работает в системе (включая менюшки). При этом с реализацией клавиатуры инженеры не запаривались и для удешевления развели на ней Row/Column напрямую, без промежуточных контроллеров :)
Живу во Владивостоке. И у нас тут большая часть овощей и фруктов из Китая. Даже в палатках китайскими торгуют. Брокколи, цветная капуста, кабачки, баклажаны - только китайские везде, без альтернативы. Есть приморские огурцы, картофель, морковь, но китайские аналоги чаще даже дешевле, чем местные. Если в магазине есть приморские овощи/фрукты, беру их.
Вот, что страшно…
В местных новостях как-то читала, что обнаружили партию «ядовитых» яблок из Китая с критическими показателями пестицидов и нитратов. Также видела как-то передачу по тв как китайцы на наших русских полях выращивают овощи сдабривая их запрещенной химией (пестициды и нитраты). Показывали прям облавы на эти «огороды», как китайцы закапывали в землю эти мешки с химией и прочее… Офигела тогда знатно, не поверила бы на слово , если бы не увидела.
Зная как цветет и процветает коррупция у нас на Дальнем Востоке и тесную дружбу с Китаем, у меня нет уверенности в том, что все китайское у нас на прилавках безопасно. И нет уверенности, что сетевики вообще проверяют качество реализуемых продуктов (главное дешевле купить и дороже продать).
И я только сейчас с появлением малыша задумалась какими овощами и фруктами его кормить? Если даже, посмотрев в инете лаб. проверки качества детского питания, в некоторых марках выявляют пестициды.
Хотела бы отправить на проверку в лабораторию пару овощей и фруктов на химию, но такие проверки стоят очень дорого. А других вариантов качественной проверки нет. А охото кормить детей (хотя бы до 5лет) качественными экологичными овощами и фруктами. И вот и задумалась как быть…
Может кто-то делал проверки состава и качества китайских продуктов? Есть ли у вас доверие к китайским овощам/продуктам?
Осторожно: в статье я постарался подробно и простым языком написать об аппаратном моддинге и ковыряние в железе, хакинге Linux и обходе проприетарной оболочки, а также программировании и портировании софта с других платформ. Но есть нюанс...
Я очень большой фанат портативных гаджетов с полноценными QWERTY-клавиатурами: ноутбуков, коммуникаторов и различных хэндхелдов. Когда в мои руки попадает девайс с Linux или Windows CE в том или ином виде, я стараюсь максимально расширить функционал устройства и порой даже портирую программы с других платформ! Недавно мне удалось купить китайский детский обучающий ноутбук с MIPS-процессором и поворотным дисплеем всего за 1 000 рублей. Интересно узнать о том, как я хакнул девайс и причём здесь Dingoo A320? Тогда жду вас под катом!
❯ Предыстория
В конце 2000-х годов, цена на бюджетные ноутбуки снизилась настолько, что купить полноценный лэптоп мог почти каждый студент. Если в начале нулевых годов миниатюрность была роскошью и стоила довольно дорого по отношению к обычным 15-дюймовым бюджетникам, то с выходом Asus EEEPC в 2007 году, маленькие нетбуки с 7-дюймовыми дисплеями наоборот образовали новый сегмент рынка недорогих портативных устройств.
Сейчас мы с вами привыкли, что большинство ноутбуков работает на базе процессоров с двумя архитектурами — x86_64 и ARM. Однако в те времена, инженеры и производители активно экспериментировали и с альтернативными архитектурами — например, MIPS. В 2009 году, некая китайская компания Noah Educational Holdings, которая занималась разработкой портативных устройств для обучения дошколят и школьников младших классов, выпустила на рынок свой собственный миниатюрный обучающий ноутбук — Noah NP5000.
Обычно, когда читатель слышит «детский ноутбук», он представляет себе небольшое устройство с почти полноценной QWERTY-клавиатурой, небольшим монохромным ЖК-дисплеем и набором некоторых обучающих программ. При этом замоддить такие устройства не представляется возможным — в них используются микроконтроллеры с масочной ROM (прожигаемой на заводе), которые скорее всего являются близкими родственниками процессоров тех самых Тетрисов!
Однако в случае с NP5000 всё было совершенно по другому — дисплей здесь уже цветной, а не монохромный, вместо батареек используется полноценный аккумулятор, да и в целом девайс выглядит действительно как взрослый миниатюрный нетбук с поворотным экраном! При включении пользователя встречает заставка с логотипом компании и характерным пингвинчиком, рабочий стол, напоминающий Windows XP и определенный набор обучающих программ на китайском языке.
В один день я листал Goofish (китайский аналог Авито) в поисках интересных гаджетов, именно пингвинчик и привлёк моё внимание. Информации о том, на каком процессоре работает ноутбук, можно ли на него устанавливать сторонние приложения и что он вообще умеет в сети не было. Однако приятная цена в 1 000 рублей и желание заполучить интересный девайс в коллекцию взяли верх — и я решил рискнуть!
Мчу на своем болиде за ноутбуком для дошколят!
Когда девайс приехал ко мне, я немного поковырял его родную оболочку, попытался выйти в терминал, поставить пакеты OpenWRT — но всё тщетно, оболочка тщательно была закрыта от ушлых детских ручек! Поэтому я решил разобрать девайс и узнать, на каком процессоре он работает и есть ли у нас UART, на котором можно поискать рут-консоль или хотя-бы консоль U-Boot.
Девайс помог привезти в Россию мой подписчик Роман и сервис YouCanBuy, за что им огромное спасибо! Также этой статьи не было бы без подписчика Андрея, который занял мне определенную сумму для заказа ништячков из Китая, за что ему отдельная благодарность!
❯ Что внутри?
Разбирается маленький нетбук почти также, как и его взрослые собратья — через клавиатуру! Со стороны поддона виднеется съёмная крышка, которая на x86-устройстве должна содержать в себе место под HDD и слоты для оперативной памяти. Однако в нашем случае, здесь скрывается кое-что поинтереснее: видите характерное место под миниджек с подписанными пинами RX и TX? Это и есть UART, о котором я говорил в прошлом абзаце.
Плата ноутбука выделяется низкой плотностью монтажа и отсутствием какого либо охлаждения. Процессор, оперативная память и флэшка скрыты под большим защитным экраном на винтиках, в то время как дополнительные модули скрываются под экранами, которые припаяны к плате.
В качестве процессора используется легендарный Ingenic JZ4757! Это готовая система на кристалле, включающая в себя MIPS-ядро собственной разработки с микроархитектурой XBurst, работающее на частоте до 380МГц, видеоконтроллер с возможностью вывода картинки на дисплей или телевизор, аудиокодек, USB-хост и т. п. Слева от процессора расположились два чипа ОЗУ типа SDRAM, в сумме образующие 64Мб, а чуть ниже распаяна NAND-флэшка от компании Samsung на 2Гб. Справа снизу «спрятался» чип часов реального времени — с которого при желании можно было бы взять шину I2C!
Что странно — маркировка флэшки была наполовину затерта с завода, при том что ноутбук ни разу не разбирался... видимо использовали Б/У-накопитель?
Я не зря назвал процессоры от Ingenic легендарными. Дело в том что именно JZ'шки использовались во многих легендарных портативных гаджетах нулевых годов. Например, JZ4732 использовался в популярной эмуляторной игровой консоли Dingoo A320, а JZ4725 использовался в журнале Vogue с экранчиком и OpenHardware-ноутбуке Ben NanoNote. Ingenic славились своей открытостью к сообществу моддеров и свободно предоставляла исходный код ядра Linux, BSP для Windows CE и даже код своей проприетарной прошивки для MP4-плееров!
Далее я решил подпаяться к UART'у, дабы почитать что у нас туда пишет система. Вне зависимости от чипсета или устройства, довольно часто на UART летят логи загрузчика и ядра, а иногда на нём можно найти и рутовую консоль. Благодаря такому «бэкдору» можно попытаться хакнуть самые разные устройства: например, тонкие клиенты на процессорах Marvell или незамысловатый ТВ-бокс. В качестве USB-UART преобразователя я использую плату с ESP32 с постоянным RESET'ом на микроконтроллере (дабы не вмешивался в работу шины):
Не забываем общую массу, иначе на шине будет мусор!
❯ Хакаем
Далее я включил ноутбук, настроил Putty на свой COM-порт с бодрейтом 115200 и увидел логи. Выяснилось что в качестве загрузчика используется всеми любимый U-Boot (в котором нельзя прервать процесс загрузки), а в качестве ядра — Linux версии аж 2.6! И конечно же на этом терминале висела полноценная рут-консоль!
Далее я сразу решил проверить с какой системой мне придется иметь дело: заглянул в top, обнаружив что используется оболочка Qtopia (формальная альтернатива Xorg и DirectFB для КПК на Linux), пошерстил по папкам с бинарниками и посмотрел inittab. Наша задача — заставить ноутбук запускаться с текстовым терминалом на дисплее, а Qtopia запускать уже по желанию.
Сначала я закомментировал запуск Qtopia в скрипте автозагрузки - inittab'е. Однако если просто «прибить» оболочку — после включения ноутбука нас будет встречать пустой экран без какого либо взаимодействия. Поскольку у меня не было возможности изменить cmdline ядра и перенаправить консоль на терминал fbcon, я решил это сделать уже в юзерспейсе с помощью системного вызова TIOCCONS, однако он по каким-то причинам выдавал ошибку. Тогда пришлось немного костылить и дублировать терминал с помощью getty:
После этого у меня начал нормально работать терминал! Правда, без скроллинга... пока не знаю почему. Теперь, когда у нас есть рутовая консоль и полноценный busybox, можно немного поэкспериментировать!
❯ Портируем эмуляторы
Далее я решил попробовать портировать эмуляторы с родственной данному ноутбуку Dingoo A320. В родной системе почти никакие эмуляторы не работали даже после подкидывания всех необходимых библиотек (в том числе и uclibc с SDL), однако после chroot'а в систему от Dingoo A320 у меня запустились часть эмуляторов. Однако в этом ноутбуке используется оригинальный непропатченный кривой драйвер фреймбуфера, который постоянно сыпет ошибками и не умеет работать в виртуальном разрешении. Из-за этого, часть эмуляторов выглядело... примерно вот так:
В эмуляторе был некорректно реализован скейлинг, который портил память
А часть вот так:
Разрешение оригинальной Dingoo A320 — 240x320, а в ноутбуке — 800x480
И я понял что без патчей в исходном коде не обойтись. Для сборки программ под старые Linux-машины, кросс-компилятор из репозиториев свежих дистрибутивов не подойдет — слишком новая версия glibc. Более того, некоторые устройства могут использовать uclibc вместо glibc, как, например, та же самая динга. Поэтому может потребоваться установка уже готового тулчейна — благо для динги он сохранился в сети. Распаковываем архив в /opt/, добавляем в переменную PATH путь к папке bin/ и пробуем собирать тестовую программу. Всё работает!
Далее предстояло найти исходный код эмуляторов для динги. Часть из них можно найти на гите (в качестве портов на GCW-Zero), часть — на сайте OpenHandhelds. Первым дело я решил портировать эмулятор GameBoy Color. Поскольку эмулятор работает поверх библиотеки SDL, в первую очередь я изменил видеорежим с 240x320 на 800x480...
if (!(fbSurface = SDL_SetVideoMode(240, 320, vmode[2], flags))) die("SDL: can't set video mode: %s\n", SDL_GetError());
И ожидаемо ничего не получил, никто растягивать картинку за меня не будет! Поэтому я сначала написал простейшую функцию скейлинга картинки на флоатах с заранее посчитанным шагом интерполяции, затем оптимизировал её до fixed-point арифметики, а после и вовсе решил «запечь» координаты для сэмплинга в один большой массив.
void BlitScale(SDL_Surface* srcSurface, SDL_Surface* dstSurface, framebuffer_scale_t* scales) { int i, j;
for (i = 0; i < dstSurface->h; i++) { for (j = 0; j < dstSurface->w; j++) { framebuffer_scale_t scale = scales[i * dstSurface->w + j];
Крайний вариант был самым быстрым, однако в нативном разрешении ноутбука я получил примерно 50%-скорости от реальной консоли — т. е., по сути, не играбельно. При этом в видеорежиме 240x320 всё работало нормально и упор был явно не в скорость растягивания картинки... по каким-то причинам либо блиттер SDL работал слишком медленно, либо драйвер фреймбуфера спотыкался об преобразование форматов пикселя из-за чего всё и тормозило.
Далее я решил попробовать запустить другие эмуляторы. NES, Sega Master System и другие консоли работали отлично... пока я не устанавливал разрешение выше 240x320. Ради интереса, я запустил оболочку для Linux-консолей gmenu2x с Ben NanoNote, которая вместо SDL использует DirectFB и получил вот такую картину. Epic fail...
После этого я решил попробовать накатить всем известный Debian. В отличии от эмуляторов, здесь пересобирать ничего не нужно: достаточно лишь собрать rootfs с необходимыми пакетами, отформатировать SD-карточку и chroot'унутся в систему. Для сборки можно использовать две утилиты — debootstrap и multistrap:
Сначала я хотел накатить что-то относительно современное по типу Debian Buster или Jessie, однако вскоре выяснилось, что ядро 2.6 эти версии системы не поддерживают...
Оказалось что последней версией Debian, поддерживающей ядро 2.6, был Squeeze вышедший в далёком 2011 году. После сборки и копирования рутфс, необходимо было выполнить вторую стадию установки системы, а именно фактическую распаковку и установку пакетов:
Установка БАЗОВЫХ пакетов занимает около 20 минут!
Далее мне удалось подкинуть некоторые пакеты и даже попытаться запустить иксы (на 64Мб ОЗУ!)... но затем я погряз в зависимостях и всё таки решил попытаться подкинуть сеть. Выяснилось что в ядре есть поддержка встроенного в чипсет Ethernet-контроллера, однако PHY на плате то не распаян!
❯ Заключение
Вот такая статья о попытке превратить китайский бюджетный MIPS-ноутбук в портативную игровую консоль у нас с вами получилось. И хотя в определенном смысле мне удалось добиться успехов — выйти в рутовую консоль, накатить Debian и запустить эмуляторы в половинном разрешении, всё равно это всё таки больше Epic fail... Но по крайней мере, эти бессонные ночи были очень веселыми!
А вам надеюсь было интересно почитать мой опыт моддинга такого замечательного девайса. Пишите своё мнение в комментариях! Если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет, подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я публикую бэкстейджи статей, иногда полезные посты ну и немножечко щитпоста! Если вам интересны мои видео той же тематики — предлагаю подписаться на мой YouTube-канал.
Как вам девайс?
Очень важно! Разыскиваются девайсы для будущих статей!
Друзья! Для подготовки статей с разработкой самопальных игрушек под необычные устройства, объявляется розыск телефонов и консолей! В 2000-х годах, китайцы часто делали дешевые телефоны с игровым уклоном — обычно у них было подобие геймпада (джойстика) или хотя бы две кнопки с верхней части устройства, выполняющие функцию A/B, а также предустановлены эмуляторы NES/Sega. Фишка в том, что на таких телефонах можно выполнять нативный код и портировать на них новые эмуляторы, чем я и хочу заняться и написать об этом подробную статью и записать видео! Если у вас есть телефон подобного формата и вы готовы его задонатить или продать, пожалуйста напишите мне в Telegram (@monobogdan) или в комментарии. Также интересуют смартфоны-консоли на Android (на рынке РФ точно была Func Much-01), там будет контент чуточку другого формата :)
А также я ищу старые (2010-2014) подделки на брендовые смартфоны Samsung, Apple и т. п. Они зачастую работают на весьма интересных чипсетах и поддаются хорошему моддингу, парочку статей уже вышло, но у меня ещё есть идеи по их моддингу! Также может у кого-то остались самые первые смартфоны Xiaomi (серии Mi), Meizu (ещё на Exynos) или телефоны Motorola на Linux (например, EM30, RAZR V8, ROKR Z6, ROKR E2, ROKR E5, ZINE ZN5 и т.п, о них я хотел бы подготовить специальную статью и видео т. к. на самом деле они работали на очень мощных для своих лет процессорах, поддавались серьезному моддингу и были способны запустить даже Quake!). Всем большое спасибо за донаты!
А ещё я держу все свои мобилы в одной корзине при себе (в смысле, все проекты у одного облачного провайдера) — Timeweb. Потому нагло рекомендую то, чем пользуюсь сам — вэлкам:
Около двух лет назад я купил на онлайн-барахолке занимательный телефон игровой направленности под именем Kechaoda K110. На первый взгляд ничего необычного, в телефоне была предустановлена многоигровка на 80 с лишним игр, однако мне захотелось чего-то большего и я начал ковырять ковырять прошивку устройства в hex-редакторе на манер наличия обычного рома... Но то, что я обнаружил, разобрав устройство, повергло меня в шок и восторженные возгласы в сторону китайских инженеров. Интересно узнать о том, как китайцы сделали уникальный двухпроцессорный телефон всего за 2 000 рублей? Тогда жду вас под катом!
❯ Предисловие
Поскольку сегодняшняя статья у нас о весьма редком представителе телефона-игровой консоли, перед фактическим обзором устройства предлагаю вспомнить предысторию появления мобильного гейминга в целом.
Мобильный гейминг уже довольно давно и прочно вошёл в нашу повседневную жизнь. Игры на телефонах начали появляться ещё в самом начале нулевых, когда их ресурсов стало хватать не только на обработку GSM-сети, но и на запуск различных прикладных программ. За место под солнцем боролось сразу три программные платформы:
Первой платформой была Java, а конкретно J2ME, предоставляющая относительно унифицированный способ разработки приложений под самые разные телефоны и коммуникаторы. J2ME отличалась довольно низким порогом вхождения и довольно высокой производительностью, в частности благодаря тому, что большинство коммерческих Java-машин поддерживали JIT, а ARM даже ввели набор инструкций для ускорения JVM-байткода! Пользователи же полюбители Java в первую очередь за расширяемость и наличие крутейших фич: например программного растеризатора 3D-графики, который позволял выдавать очень неплохую графику на кнопочных телефонах с процессорами всего 100-200МГц:
Одна из легендарных Java-игр: Galaxy on Fire 2. На телефоне помещалась полноценная RPG в космосе с своим сюжетом и торговлей!
Вторая платформа называлась Mophun и была менее распространенной, но считалась прямым конкурентом J2ME. Игры для Mophun писались на диалекте C, который как и J2ME интерпретировался, однако JIT (насколько мне известно) в нём не было. В основном, Mophun-приложения поддерживались на телефонах Sony Ericsson и позже на смартфонах с Symbian на борту, да и в отличии от J2ME был предназначен скорее для игр, чем для прикладных прлиожений.
Третья платформа называлась Qualcomm Brew. Её нечасто можно было встретить в СНГ, поскольку приложения распространялись через сети оператора и стоили денег, пиратить программы можно было только на джейлбрейкнутых устройствах, коих было мало. Основное отличие Brew от других платформ — приложения пишутся на обычном C и соответственно являются обычными нативными бинарниками, совместимыми только с устройствами на чипсетах Qualcomm.
В 2002 году, главными портативными консолями были GameBoy Color и GameBoy Advance. Nokia, недавно выпустившая свой первый Symbian-смартфон Nokia 7650, смекнула что на базе смартфонной платформы можно сделать свою собственную игровую консоль — да ещё и гораздо мощнее чем консоли от Nintendo! Изначально был представлен концепт N-Gage, а уже в марте 2003 года вышел первый телефон в подобном форм-факторе — 3300. И хотя 3300 был S40-телефоном и был больше ориентирован на мультимейные возможности, тем не менее его вполне можно назвать одним из первых игровых телефонов в целом.
В октябре того же года, на рынке появился N-Gage — легендарный смартфон, который из-за некоторых инженерных особенностей, не получил широкого распространения среди пользователей на релизе, но со временем стал цениться среди любителей поиграть в дороге благодаря портам таких шедевров, как Sonic N, Tomb Raider с PS1 и самостоятельным тайтлам как например Asphalt 2.
N-Gage экономически был не очень успешен, поэтому многие производители (кроме локальных рынков азиатских стран) отложили идею разработки игрового телефона в долгий ящик... кроме китайцев! Уж они чего только не делали: клоны N-Gage, причудливые игровые телефоны, игровые айфоны, телефоны-PSP... и эти телефоны действительно выходили на рынок! Ну не гении ли?
Эти телефоны объединяет наличие эмулятора денди на борту и иногда Java-машины, а значит их вполне можно считать игровыми.
Сейчас всё те же китайские производители экспериментируют и выводят на рынок как эмуляторные консоли с Linux на борту, так и очень редко игровые телефоны с настоящими, физическими кнопками. Два года назад изучая онлайн-барахолку, я наткнулся на объявление о продаже занимательного игрового телефона — Kechaoda K110, который явно был похож на игровую консоль и более того, смахивал на более широкую версию Nokia N-Gage! Само собой я сразу же его заказал, а как только телефон приехал ко мне, то принялся дампить прошивку и искать возможность добавить ещё игр!
❯ Что внутри?
Включив телефон, я не обнаружил в меню никаких игр и эмуляторов, кроме стандартного сокобана. Оказалось что переход в игровой режим производится нажатием соответствующей кнопки с геймпадом... что вызвало у меня достаточно смешанные чувства. Сначала я подумал, что инженеры каким-то образом ставят на паузу задачи с MMI (интерфейсом устройства) и освобождают ресурсы, дабы освободить процессорное время для эмулятора.
Поэтому я сразу же решил снять дамп прошивки с устройства, дабы изучить его в hex-редакторе. Дампить устройства на процессорах Spreadtrum несложно: нужно лишь найти Boot key (кнопку, которая переведет телефон в режим прошивки) и подключить телефон с зажатым буткеем к ПК, а затем «слить» прошивку с помощью сервисного софта типа Miracle Thunder. Однако этого будет мало, ведь из-за использования очень маленьких SPI-флэшек всего на 4Мб в качестве основного накопителя, код и все ресурсы сжимаются на этапе сборки прошивки и распаковываются на лету. Вот уж необычное решение!
Данные в прошивке запакованы алгоритмом сжатия LZMA. В сети уже есть готовый распаковщик который помог мне расковырять дамп и перейти к изучению разделов флэшки в hex-редакторе. Всего эти раздела 4: kern с ядром RTOS, res с ресурсами по типу строк и значков, а также usr с пользовательскими настройками, строками и вероятно mmi-программами и ps, где тоже есть какая-то часть модулей, связанная с RTOS. Однако вот незадача, никаких дебаг-строк от опен-сорсных эмуляторов NES, ни самих ромов (которые имеют несколько форматов, но самый распространенный из них — iNES) я не обнаружил.
После этого я решил разобрать устройство, дабы понять где же хранятся ромы для NES. Телефон состоит из двух частей. Слева у нас плата с телефонной частью устройства, которая состоит из процессора Spreadtrum SC6531E, 4Мб SPI-флэшка и 4Мб ОЗУ. Стандартная телефонная платформа для бюджетных кнопочных устройств. Справа же была некая плата, к которой идёт шлейф на целых 39 пинов и на которой расположена часть кнопок. Многовато для матричной клавиатуры, согласитесь?
С обратной стороны правой платы я обнаружил ни что иное как... соплю! Вернее, более корректно сказать бескорпусной чип, т. е. кристалл, приаянный к плате и покрытый сверху специальным компаундом. И тут паззл начал собираться: рядом стояла SPI-флэшка формата 64x8, некий чип вообще без какой либо маркировки (возможно усилитель) и во главе некий процессор без корпуса!
Я сразу же выпаял SPI-флэшку и установил её в программатор, дабы поскорее её прочитать и попробовать понять, можно ли заменить список игр на ней. Микросхемы с подобных плат необходимо выпаивать только паяльником! При работе с феном есть риск повредить компаунд и соответственно крайне хрупкую структуру кристалла, а заменить такой чип в домашних условиях нереально.
Вычитав дамп, я обнаружил текстовые строки с описанием игр в меню многоигровки и попытался понять структуру картрирджа. Я начал гуглить что-то в духе «Sup game console 8Mb SPI flash» и наткнулся на информацию, что иногда в современных ультрабюджетных консолях с Dendy-многоигровками используются SPI-флэшки с процессорами производства компании VRTech. Как я узнал позже, VRTech не просто делают современные аппаратные клоны «денди» в виде системы на кристалле, но и дорабатывают её архитектуру: добавляют поддержку ЖК-матриц, новые команды и регистры и иные прикольные штуки. Есть даже компилятор C и SDK под их 6502-совместимые ядра!
Дампы флэшек для процессоров VRTech содержат в начале код для инициализации ЖК-дисплея и возможно какой-то периферии (об этом сможет рассказать гуру NES — @ClusterM, в связи с чем приглашаю его в комментарии) и дамп картриджей с OneBus-маппером. То есть технически, мы можем не просто заменить многоигровку, адаптировав дамп с другой консоли, но и расширить список игр небольшим аппаратным хаком: необходимо припаять параллельно вторую SPI-флэшку, однако выводы ChipSelect у каждой вывести на какой-нибудь миниатюрный тумблер в корпусе, который коммутировал бы массу на нужный нам чип памяти! Помимо SDK, на сайте VRTech лежал и эмулятор, который смог загрузить мой дамп, пусть и с косяками (картинка появилась лишь на пару кадров и затем пропала). Зато я точно смог установить, что за процессор используется в игровой части телефона — VRTech VT09!
По итогу функциональная схема телефона простая как табуретка и одновременно гениальная: когда мы переходим в игровой режим, телефонная часть отключает свои линии для управления дисплеем, выход с ЦАП'а на усилитель и GPIO для прослушивания состояния матричной клавиатуры, а затем подаёт питание на процессор игровой части устройства. Затем, когда пользователь зажимает кнопку «назад», телефонная часть снимает питание с NES-процессора и берёт обратно контроль периферии. Ну гениально же, разве нет? :)
Таким образом, разработчики устройства почти полностью решили проблему нормальной эмуляции ретро-консоли на слабом телефоне. Нет необходимости оптимизации эмулятора, поскольку он все равно не сможет дать нормальный опыт игры на относительно слабом процессоре. Постоянно будет пропуск кадров, попытки детекта пустых циклов и артефакты эмуляции ради ускорения скорости работы. В аппаратном клоне все игры всегда работают в 50/60 FPS, без какого либо инпут-лага и без тормозящего звука. И всё это за каких-то дополнительных 5-10 рублей за каждый чип (не думаю что он стоит дороже учитывая отсутствие корпуса и цену консолей по типу Sup). Фактически, Kechaoda K110 — условный брат-близнец игровой консоли Sup!
❯ Обзор
Давайте же посмотрим, как телефон себя проявляет на практике. В целом, телефонная часть здесь стандартная, две симки, MicroSD, стандартная прошивка как почти во всех свежих кнопочных телефонах. Нет поддержки ни Java, ни MRP, а всё из-за лицензий и экономии на памяти, поэтому нет возможности поставить никакие сторонние приложения!
Однако как телефон, K110 меня разок выручил. Мало того что такси вызвал, так ещё и поиграть в дороге успел - максимальный кайф! Однако есть и минусы — например, нет возможности синхронизации контактов к компьютеров окромя VCF через Bluetooth, а память для контактов относительно мала, что не очень удобно.
На фотографиях можно было заметить огромную планку с 8-светодиодами. Здесь она выполняет роль фонарика... и очень яркого. Настолько, что я не стал светить в камеру смартфона пока снимал ролик, дабы не навредить зрителям с эпилепсией! В целом видно что китайцы стараются сделать звонилки не только дешевыми, но и практичными! Во время игры, телефонная часть не отключается: если поступает звонок, то телефон начинает ярко моргать светодиодами.
А ещё у этого телефона просто невероятно громкий динамик. Телефон в одиночку может выполнять функции колонки с FM-радио и восроизведением музыки с MicroSD, хотя качество конечно не идеальное. Но вполне достойное!
Ну и конечно-же пришло время поиграть в игры! В телефоне предустановлена многоигровка на 84 игр. Среди них есть платина NES - и Contra, и Super Mario Bros (причем и с хаками!), и TMNT, так что поиграть есть во что.
Все игры идут в железные 60 кадров в секунду и в них нет артефактов от эмуляции. Однако звук у процессоров VRTech не идеально повторяет оригиальный. В целом, вполне играбельно. Также минус в том, что в играх нельзя сохраняться от слова совсем, поскольку NES то аппаратный :)
Ниже видос с таймкодом из моего ролика об этом телефоне, для большей наглядности:
И ВК видео для тех, кому лень включать впн:
❯ Заключение
Вот такой интересный телефончик сделали китайские инженеры. Ведь это действительно гениально: зачем заморачиваться с оптимизацией эмулятора, фреймскипом, попытками эмулировать нормально звук, когда можно просто поставить чип за 5-10 рублей на плату и передавать ему управление, когда пользователь хочет поиграть игры...
Конечно такой подход не лишен минусов, однако я лично оценил предприимчивость инженеров этого безусловно интересного аппарата. Надеюсь и вам было интересно, жду ваше мнение в комментариях! Если вам интересна тематика ремонта, моддинга и программирования под гаджеты прошлых лет, подписывайтесь на мой Telegram-канал "Клуб фанатов балдежа", куда я выкладываю бэкстейджи, ссылки на новые статьи и видео и немножечко щитпоста.
Очень важно! Разыскиваются девайсы для будущих статей!
Друзья! Для подготовки статей с разработкой самопальных игрушек под необычные устройства, объявляется розыск телефонов и консолей! В 2000-х годах, китайцы часто делали дешевые телефоны с игровым уклоном — обычно у них было подобие геймпада (джойстика) или хотя бы две кнопки с верхней части устройства, выполняющие функцию A/B, а также предустановлены эмуляторы NES/Sega. Фишка в том, что на таких телефонах можно выполнять нативный код и портировать на них новые эмуляторы, чем я и хочу заняться и написать об этом подробную статью и записать видео! Если у вас есть телефон подобного формата и вы готовы его задонатить или продать, пожалуйста напишите мне в Telegram (@monobogdan) или в комментарии. Также интересуют смартфоны-консоли на Android (на рынке РФ точно была Func Much-01), там будет контент чуточку другого формата :)
Интересные штукенции? Обожаю в них ковыряться и писать для них софт.
А также я ищу старые (2010-2014) подделки на брендовые смартфоны Samsung, Apple и т. п. Они зачастую работают на весьма интересных чипсетах и поддаются хорошему моддингу, парочку статей уже вышло, но у меня ещё есть идеи по их моддингу! Также может у кого-то остались самые первые смартфоны Xiaomi (серии Mi), Meizu (ещё на Exynos) или телефоны Motorola на Linux (например, EM30, RAZR V8, ROKR Z6, ROKR E2, ROKR E5, ZINE ZN5 и т.п, о них я хотел бы подготовить специальную статью и видео т. к. на самом деле они работали на очень мощных для своих лет процессорах, поддавались серьезному моддингу и были способны запустить даже Quake!). Всем большое спасибо за донаты!
А ещё я держу все свои мобилы в одной корзине при себе (в смысле, все проекты у одного облачного провайдера) — Timeweb. Потому нагло рекомендую то, чем пользуюсь сам — вэлкам: