Около двух лет назад я купил на онлайн-барахолке занимательный телефон игровой направленности под именем 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. Потому нагло рекомендую то, чем пользуюсь сам — вэлкам: