Свершилось то, чего ждали миллионы. Fortnite снова можно скачать в App Store. Спустя шесть лет ссылок, банов, судов и громких взаимных оскорблений Apple и Epic Games.
Игра доступна во всех регионах. Включая РФ. Без плясок с бубном и смены аккаунтов.
Видимо, деньги договорились с принципами. И те, кто в 2020 году громко объявлял «мы против монополии», тихо обнялись с корпорацией и занесли процент.
А нам — просто играть.
Подписывайтесь — тут все самое свежее. А если захотите сказать спасибо — кнопка «Поддержать» в профиле и в эмоциях всегда открыта.
Секретная конструкция устройства для общения двух человек без участия ТСПУ и товарища майора. Кроме того, по закону Яровой недоступна запись и хранение. Ведь даже если применять устройство там, где существует эхо, оно все равно больше чем пару секунд голос не "записывает". Тему можно развить и применить скрэмблинг - шифрование сигнала. Для этого нужно выпить некоторое количество спиртного и (или) перейти на малознакомый язык. Например индейцев Америки - навахо. По сути получается ЗАС аппаратура шифрования негарантированной стойкости типа Яхта Т-230 ценой в пол литра и пару коробков спичек.
Возможно это последнее изображение в сети. Дальше будет запрещено и изъято из доступа.
Всем привет! В марте месяце, как то было скучно прохладным вечером и я наткнулся на агрессивную рекламу данной игры. Всегда думал, что рекламировать прекрасный продукт, в таком количестве (реклама её везде:другие игры, запретограммы и тд), никто не будет, но увидев грабли , обязательно решил на них наступить, чтобы не со слов, а лично прочувствовать эту боль на собственной шкуре.
По игре - на любителя, мне просто лично стало скучно спустя примерно месяц и я решил не просто удалить её, а удалить аккаунт, благо эта функция в чате поддержки присутствует.
Составил заявку, заполнив все пункты и меня выкинуло в чат службы поддержки, где произошёл примерно следующий диалог:чтобы у Вас было понимание, ответ поддержки, поступал стабильно через сутки.
После того, как я понял, что мне начнут палки в колеса вставлять, выкатывая список чего нужно больше,чем когда я пытался получить налоговый вычет в первый раз, много лет назад(и то это было проще, не путать с нынешним временем, когда это доступно и удобно), я решил сразу предупредить лиц, что буду обращаться в Роскомнадзор, что собственно говоря и сделал, направив обращение на следующее утро. Дальше динамо продолжилось, решил написать в их группу ВК :https://vk.com/zroute Мой коммент набрал за 10 мин с десяток лайков и был благополучно удалён, я решил написать новый и сразу сделал скрин его, через пару минут также мой комментарий, был снесён.
Думаю, ладно, корона у меня не спадёт, скинул ещё раз всю информацию в службу поддержки, что они просят и чтобы кто думал? Опять что то им не то))
Итог: почему то скрины не отправляются, ответ поддержки был:логин, дата входа и большая часть информации совпадает, мало им транзакций и IP адрес мол не совпадает. Простым языком, мы тебе максимально усложним жизнь, чтобы ты не удалился. Зачем это , мне не понятно, от слова совсем. На сегодня, ситуация такова:24.04.2026, обращение в Роскомнадзор зарегистрировали, до 19.05.2026 будет дан ответ от ведомства, в нём мною была предоставлена вся необходимая информация:логин, транзакции, проще говоря, вся информация + ответы поддержки, на мои требования. Также попросил уточнить момент, их группа в ВК официально зарегистрирована в РКН(как сообщество, где более 10 тыс человек), или нет. Ну посмотрим, раз мне решили усложнить жизнь, попробую немного привести в чувства в ответ, да и в будущем, надеюсь помочь ребятам, кто бросит играть в неё, чтобы было проще это сделать.
Пишу исключительно свою субъективную оценку по данной игре, для того, чтобы у людей было понимание, стоит ли играть в неё или нет.
На Пикабу время от времени рассказывают о достижениях китайской промышленности и смышлености «подвальных» инженеров. То про компьютер Batong на базе NES, который в одном корпусе совмещал слот для кассет, флоппи-привод и разъём для картриджей, то про невиданные игровые консоли и фотоаппараты на базе RISC-V и MIPS-процессоров, то про экзотические телефоны, разработанные специально для азиатского рынка. Недавно в моей коллекции появился, пожалуй, самый крутой кнопочный телефон родом из 2008'ого года, о котором мне хотелось бы рассказать.
В одном корпусе скрывается вертикальный слайдер, горизонтальная раскладушка, QWERTY-клавиатура, два дисплея, телевизор, физический геймпад и весьма продвинутая ОС с возможностью запуска нативных программ. Интересно узнать больше об этом шедевре сумрачного гения и об аппаратной/программной платформе подобных устройств? Тогда добро пожаловать под кат!
❯ Предисловие
Когда я говорил про статьи об экзотических китайских устройствах, конечно в первую очередь я имел ввиду материалы за моим авторством. Вот уже 4 года я рассказываю о всякой разной диковинке, которую могу утащить с барахолок Китая: начиная от китайских MIPS-ноутбуков на процессорах собственной разработки, заканчивая редчайшими прототипами игровых смартфонов... ну или серийных телефонов сразу с двумя процессорами!
В этом красавце за 2.000 рублей скрывалось сразу два процессора: основной Baseband от Unisoc и клон NES на кристалле от компании VRT
В серфинге китайских барахолок интереснее всего то, что они не перестают удивлять. Снова и снова люди выкладывают мелкосерийные гаджеты с утиля с какими-то невероятно крутыми фишками: как, например, двухпроцессорный телефон с отдельным модулем камеры (да, инженеры реально засунули процессор и модуль от «мыльницы», при этом совместим его с обычным телефоном), или двойной кнопочный слайдер с закосом одновременно на Nokia 8800, E90 и N-Gage в одном корпусе, о котором мы с вами сегодня и поговорим.
Так уж получилось, что свой первый экземпляр я заказал из Китая под видом рабочего. Однако по приезду оказалось что у устройства разбито оба дисплея и я остался с носом, а меня просто кинули... Таковы реалии заказа из другой страны. Но год назад мне написал читатель с Хабра и предложил подарить точно такой-же аппарат, который он умудрился много лет назад купить в России... Да, путём серого импорта такие аппараты попадали иногда в СНГ и их можно было купить по весьма вкусным ценам. Например девайс на фото, с учетом всех фишек, вряд-ли стоил дороже 150$, что было несомненно дешевле, чем Sony Ericsson W200i или, например, Nokia 6600.
И когда я его получил, мои первые эмоции были... Блин, он реально такой крутой или мне только кажется? Как вообще до этого можно было додуматься, спроектировать и пустить в серию?!
❯ Осмотр
В первую очередь, девайс выделяется своим весом. В те годы, Nokia ввела тренд: если корпус выполнен из металла, значит это устройство премиального уровня, поэтому китайцы принялись копировать этот тренд даже в копеечные телефоны за 50$. Здесь же из металла выполнена часть переднего корпуса и немного заднего, что даёт общий вес в 350г. Нехило по меркам компактного телефона!
Помимо этого, в глаза бросается толщина устройства. Да, это очень «толстый» бутерброд, причём устройство даже толще чем Nokia E90. С торца мы видимо еще одну очень неприятную особенность: свой проприетарный разъём зарядки, частично совместимый с Samsung'овским. Зарядить телефон кабелем от SGH E250 может и выйдет, а вот подключить наушники или синхронизировать устройство с ПК может быть проблемой: в те годы, многие сами себе делали прошивочные кабели.
Поскольку это слайдер, переднюю часть корпуса можно смахнуть вверх, прямо как на 8800. И что самое интересное — по плавности и ходу работы, механизм 1 в 1 повторяет оригинальный Arte. Даже по развесовке плюс-минус идентично, хотя свои минусы в этом тоже есть: на слайдерной части идет отдельный шлейф, который конкретно на этом экземпляре износился, из-за чего один бит в шине к дисплею уже перебит, а изображение зеленит.
Но клонов 8800 в своё время в Китае было навалом. А вот клонов E90 — единицы, причем еще и таких необычных. При открытии «ноутбучной» части, мы видим не просто полноценную QWERTY-клавиатуру, но и небольшой геймпад в стиле PS1. Как это и положено у китайских мелкосерийных телефонов, на девайсе написано что он работает на Windows Mobile и у него есть телевизор. Про телевизор — правда, для него даже отдельная антенна есть, правда принимает он только аналоговое ТВ. А вот про WM - враньё, телефон работает на базе своей RTOS, возможно на базе фреймворка PlutoMMI:
Интересно и то, что оба дисплея в телефоне равнозначные, но имеют разную ориентацию. Инженеры не просто воткнули два дисплея и сделали переключение между ними с помощью датчика Холла, они буквально адаптировали прошивку так, чтобы она могла работать как портретном, так и ландшафтном режимах. Сами матрицы, по меркам тех лет, тоже отличного качества: 240x320, TFT-TN с хорошей видимостью и читаемостью. В те годы, такие дисплеи считались реально большими.
❯ Разбираем
По традиции блога, мы с вами разберем наше устройство, дабы узнать что же скрывается у него под капотом. И сразу скажу: это самая настоящая экзотика! Разбирается гаджет несложно: достаточно выкрутить 6 винтов по периметру корпуса и расщелкнуть клипсы. Проще пареной репы:
Наклейка говорит о том, что устройство 2008 года выепуска
Внутри мы сразу видим весьма диковинное инженерное решение: огромный акустический блок, состоящий из двух крупных динамиков. Да, это была отличительная черта многих китайских телефонов: чем громче динамик, тем устройство круче. Причем далеко не всегда эта громкость была «плоской»: иногда качество было вполне на уровне Motorola E398:
Под защитным экраном скрывается самая настоящая экзотика по меркам телефонов тех лет: микросхема SDRAM-памяти производства Hynix, объёмом в 32 мегабайта (весьма нехилый объём, в современных кнопочниках оперативной памяти всего 4-8МБ), микросхема NAND-флэш, производства всё той же Hynix и объёмом в ~128МБ и экзотический, редчайший процессор ANYKA AK322L. Обычно я расписываю все особенности используемых чипсетов, но в случае с Anyka этому мешает отсутствие даташитов и вообще какой либо документации на платформу. По обрывкам данных в сети, я могу предположить что:
За AP-часть отвечает ARM926EJ-S ядро, работающее на частоте до 192МГц. Это уровень OMAP'ов в коммуникаторах на Windows Mobile.
Девайс поддерживает NAND вместо типичной для тех лет NOR, поскольку Anyka занималась в те годы чипсетами для MP3-плееров и скорее всего, 322L — развитие чипсетов из плееров.
Судя по брифингу на сайте Anyka, чип не ограничивается одной собственной ОС (как чипсеты Unisoc/MediaTek), а имеет тонкую прослойку, позволяющую портировать туда чуть ли не S40.
Интересно, почему AK322L не стал популярным?
Чуть ниже расположился некий чип Intelligent TT6110. За что он отвечает я не знаю, но предположу что это контроллер питания или RF-фронтэнд. Впрочем, в плеерах тех лет зачастую отдельного КП не было и все необходимое было сразу в процессоре — так что для чипсета Anyka это неудивительно.
Такого уровня интеграции не было ни у Unisoc, ни у MediaTek, но тем не менее, Anyka всё равно осталась в тени этих двух гигантов... Интересно, почему?
❯ Включаем
После включения нас встречает небольшой ролик из Street Fighter. В целом, в этом телефоне вообще всё сделано в тематике «стритфайтера», включая пункты меню с изображением Кирю, обои и другие элементы интерфейса. Оболочка здесь кастомная, возможно на базе PlutoMMI, но это не точно. Весь UI и Look&Feel телефона заметно отличается от других китайских кнопочных телефонов.
Как вы уже могли понять, этот телефон, в первую очередь, был разработан как игровой, и он поддерживает аж 3 программные платформы: Java, NES и нативные приложения-эльфы. Да, вы не ослышались, то, ради чего телефоны Siemens и Motorola годами хакали и реверсили, было в некоторых китайских телефонах из коробки! Причем в отличии от Qualcomm BREW, здесь не было никаких проверок подписей и прочей дряни: пишешь приложение, собираешь и запускаешь на телефоне... Конечно если сначала найдешь проприетарное SDK:
Самое интересное здесь, конечно, это эмуляторы. И идут они... ну, так себе. В NES мы получаем около 20 FPS с некоторым инпут-лагом. Это играбельно, телефон из статьи не единственный игровой девайс с упором на эмуляторы, но всё равно требует сноровки. В конце-концов, некоторые читатели могут вспомнить эмулятор NES, написанный на Java — vNES!
А вот с SNES ситуация сложнее. Тут мы получаем около 15 FPS и вот это уже не особо играбельно. Но это можно простить телефону — SNES эмулировать довольно сложно.
В JBenchmark девайс набирает 1588 попугаев. Это примерно уровень SGH-D800 или Motorola E398. Не особо производительно, но в целом неплохо.
Также у телефона были очень продвинутые мультимедийные возможности. Помимо воспроизведения аудио и видео, модель поддерживала также аналоговое ТВ, о чём я уже чуть раньше упомянул, а также IPTV. И вот IPTV на 2G уже звучит как что-то очень диковинное и нереальное.
В целом, по меркам своих лет телефон получился очень крутым. По софту местами сыроват, но возможность запуска нативных приложений нивелирует эти недостатки на корню. Жаль он не был чуть более массовым...
❯ Заключение
Вот такой необычный телефон сделали китайские инженеры в далеком 2008 года. И необычно в нём всё: начиная от аппаратной платформы и конструктива, заканчивая ОС и направленностью на гейминг. Жаль таких аппаратов было слишком мало... Но теперь он будет в моей коллекции и я к нему буду относится со всей душой :)
Ну а я надеюсь, что вам было интересно. Подписывайтесь на блог, чтобы не пропускать новые статьи каждую неделю! А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.
У меня также есть Boosty, а если вы хотите что-нибудь подарить из железа и увидеть о них статью — пишите мне в Telegram. Интересны разные гаджеты: игровые консоли, смартфоны/телефоны, коммуникаторы/КПК, ретро ПК железо и всякое такое. Если девайс интересный, то я порой могу и недели потратить на восстановление его платы. Всем большое спасибо!
Современные гаджеты становятся компактнее, мощнее и универсальнее. Смарт-часы, беспроводная аудиотехника, зарядные станции высокой мощности, устройства для стриминга и умные решения для дома помогают выстроить удобную цифровую экосистему без лишних проводов и громоздкой техники. В этой подборке собраны устройства, которые подходят для работы, развлечений, ухода за собой и повседневных задач — дома, в дороге и на отдыхе.
1. Blackview W90 Pro умные часы для мужчин
Надёжные смарт-часы подходят для активного образа жизни и повседневного контроля показателей. Модель ориентирована на защищённый корпус, мониторинг активности и уведомления со смартфона.
Используются для спорта, работы и повседневных задач. Подходят для Android и iOS. Автономность зависит от включённых функций и яркости экрана.
Высокая мощность в компактном корпусе важна для современных ноутбуков. Адаптер ориентирован на стандарт PD3.1 и одновременную зарядку нескольких устройств.
Используется для MacBook, планшетов и смартфонов. Подходит для офиса и поездок. Распределение мощности зависит от подключённых гаджетов.
Для ЛЛ: Samsung накосячили, но в двух словах не описать. Вообще, я большой любитель экзотических гаджетов и разной диковинки. Порой я мониторю барахолки в поисках чего-то такого, что не продавалось в условной Евросети, а если гаджет попадается нерабочий — то стараюсь его восстановить. Особый кайф мне приносит ремонт материнских плат: объём дофамина от чувства того, что ты только что восстановил устройство, на котором поставили крест более 10 лет назад, просто невероятный!
Недавно мне в руки попал уникальный смартфон-игровая консоль JXD S5800, который при внешней целостности не подавал никаких признаков жизни. После краткой диагностики я сразу же определил виновника, и в рамках этой статьи расскажу вам не только о процессе ремонта уникального устройства и о том, причём здесь Samsung, но и в мельчайших подробностях расскажу об аппаратной платформе типичного смартфона тех лет! Если интересно — жду вас под катом.
❯ Предисловие
Вообще, это уже аж пятая статья про игровые гаджеты в моём блоге. Ранее мы с вами реставрировали плату N-Gage, который я купил из утиля за копейки, изучали аппаратную платформу уникального двухпроцессорного телефона, где уместился аппаратный клон NES и обычный кнопочный телефон, и даже попытались дать новую жизнь единичному прототипу игрового смартфона, которому не суждено было появится на свет...
Та самая N-Gage из утиля. Живёт и здравствует :)
Будучи увлеченным гиком и любителем поиграть, особое внимание я уделяю нерабочим гаджетам. Иногда я ради фана ремонтирую даже не-комплектные девайсы: например у меня нет ни одной собранной PSP 1000'ой серии, но ради интереса я всё равно изучаю плату, схемотехнику, смотрю как ведёт себя платформа в нештатных ситуациях и просто занимаюсь типичными техногиковскими делами. К слову, если вам интересно — я готов написать подробную статью с полным исследованием схемотехники оригинальной PSP, ну а если тема зайдет— то и материал с разработкой небольшой 3D-игры с нуля для неё!
Недавно я листал авито в поисках чего-нибудь интересного и наткнулся на настоящую жемчужину: игровой смартфон JXD S5800 по цене в 1.000 рублей, где продавец утверждал что отсутствует только аккумулятор...
Я сразу же заказал устройство и принялся ждать. Но по приезду меня ожидал очень неприятный сюрприз: после вскрытия устройства, я обнаружил сорванную пломбу, частично поврежденную антенну и залуженные контакты аккумулятора. Это значит что сюда уже явно когда-то подпаивали «чужой» АКБ (не забыв оплавить часть корпуса здоровенным жалом) и пытались влезть без опыта. ремонта таких устройств. Я написал продавцу и потребовал вернуть мне часть суммы вместо полного возврата, а сам принялся диагностировать гаджет!
❯ Диагностика
Далее начинается самое интересное. После подключения ЛБП, я обнаружил что смартфон не стартует и стабильно висит на потреблении около 20мА. Поскольку гаджет построен на чипсете от MediaTek, я решил подключить его к ПК и проверить стартует ли процессор — если да, то в диспетчере устройств мы обнаружим MediaTek USB VCOM, либо же MediaTek Preloader, а если нет (или повреждены дата-линии USB) — то смартфон никак не отреагирует и потребление останется на примерно том же уровне. Важно понимать что для старта MediaTek'овских и Qualcomm'овских чипсетов не нужна ни оперативная память, ни постоянная: если BootROM чипсета не может прочитать вторичный загрузчик из памяти или проинициализировать DRAM, то он просто падает в аварийный режим и всегда определяется компьютером как QHSUSB_BULK 9008 (это и есть так называемый EDL-режим, часто реализуется замыканием одной из сигнальных линий флэшки на массу), либо MediaTek USB COM Port. Обычно это признак того, что процессор точно живой.
Мне повезло: процессор не только был живой, но и успевал передать управление первичному загрузчику — так называемому Preloader'у, а это значит что ему удалось прочесть данные из флэшки в собственную SRAM. В чипсетах MediaTek загрузка делится на три основных этапа:
BootROM — самый первый загрузчик, физически прожжён в сам процессор с завода и содержит в себе минимальный USB-стек для загрузки DA в RAM, а также минимальную логику для работы с eMMC/UFS/NAND микросхемами памяти и передачи управления следующей стадии загрузки. На этом этапе процессор потребляет не более 50мА и если он висит в аварийном режиме — потребление остаётся константным и не пропадает при отпускании кнопки включения.
Preloader — тот самый вторичный загрузчик. В его задачи входит инициализация DRAM, контроллеров периферии в процессоре, контроллера питания (иногда) и передача управления третьей стадии загрузчика. В Preloader'е содержится таблица ассоциации CID с конфигурацией DDR-контроллера, поэтому при прошивке некорректного загрузчика можно получить тяжело-восстанавливаемый «кирпич».
LK — небольшое ядро, которое загружается до старта Linux. В его задачи входит инициализация дисплея, отображение первичного логотипа производителя (тот, что до анимации), определение причины включения (кнопка, зарядка), определение режима загрузки (обычная система, recovery или тестовый режим), а также реализация протокола fastboot и загрузка ядра системы. Если в процессоре не прожжен фьюз секьюрбута, то небольшим патчем lk можно разблокировать загрузчик (т.е сам lk) любого смартфона.
Из чего мы делаем вывод что аппаратная часть устройства скорее всего полностью живая и возможно дело в прошивке. Бывало у некоторых смартфонов Lenovo на MediaTek такое, что почему-то после 5-7 лет простоя сам по себе стирался загрузчик. Причём логика такого поведения совершенно не ясна — контроллер питания ведь не давал процессору разрешения на старт. Однако при попытке прошить образ на своё устройство, я получал ошибку 4008 S_FT_DOWNLOAD_FAIL — что обычно сигнализирует о проблемах с флэшкой. После попытки прямой записи дампа с помощью фирменной утилиты прошивки, я получил более конкретную ошибку — S_DA_SDMMC_WRITE_FAILED, что означало только одно: eMMC своё отжила.
Вообще, eMMC выходят из строя по разному. Некоторые просто падают в режим read-only, сохраняя данные, но при этом смартфон работает крайне нестабильно и ни с того ни с сего сыпет ошибками в приложениях, некоторые падают в read-only, умудряясь потерять большую часть данных (как в нашем случае), а некоторые продолжают работать до победного конца. Всё зависит от контроллера в самой флэшке, ведь по сути это просто чип NAND-памяти в паре с специальным MMC-контроллером, почти как в MicroSD. Поскольку NAND по своей натуре подвержена постоянной деградации, в её структуре предусмотрены так называемые spare-страницы, где контроллер хранит флаги коррекции ошибок (ECC), а также свою служебную информацию о бэдблоках и степени износа — wear level.
Раньше телефоны использовали NAND (а если отмотать до начала нулевых — NOR, а в 90-х даже EEPROM!) так называемого старого типа. У такой памяти тоже был контроллер, но представлял он из себя что-то типа дешифратора между блоками памяти и чипсетом устройства. За организацию spare-страниц, подсчет степени износа и хранение информации отвечал отдельный NAND-контроллер в чипсете смартфона, который сам по себе не «приговаривал» память, а вся ответственность на сохранении флэшки лежала на драйвере mtd-устройства в системе. И что самое крутое — с помощью специальных команд память можно «освежить»: к примеру в загрузчике u-boot есть команда nand scrub, которая позволяет очистить всю информацию о бэдблоках и коррекции ошибок, и попытаться вернуть чип памяти к жизни.
В eMMC же за этим контроля нет: как заложил производитель чипа памяти в прошивку контроллера - так и будет. И когда-то это сыграло злую шутку с чипами от Samsung...
❯ Ремонтируем
Далее я решил разобрать смартфон и заменить микросхему флэш-памяти. В процессе разборки выяснилось что смартфон не так уж и прост в плане конструктива и инженеры знатно постарались: основная плата предположительно является наследником от референсной платформы MediaTek, судя по нераспаянному 3.5мм джеку, а по бокам расположились платы с кнопками и стиками. Причём правая сторона почему-то подключена шлейфом к левой, и только затем к основной - такое нечасто встретишь в игровой консоли:
Далее я снял защитный экран и мне всё стало понятно: в JXD S5800 использовался печально известный чип памяти Samsung KMK7X000VM-B314. Дело в том, что eMMC производства Samsung с 2012 по 2015 год имела репутацию крайне ненадежной и «похоронила» ни одну тысячу по сути исправных смартфонов. В прошивке контроллера самого чипа памяти был баг с определением уровня износа: Samsung'овские eMMC поддерживали что-то то типа S.M.A.R.T, который умудрялся приговаривать живые и вполне рабочие флэшки задолго до их фактического выхода из строя. Причём делал он это максимально странно: иногда данные удавалось сохранить, а иногда он умудрялся потерять вообще всю информацию и отправить смартфон прямиком в сервисный центр. И этот баг не фиксили годами.
Из-за чипов серии K полегли такие легенды, как Galaxy S3, Galaxy S4, Galaxy S4 Mini, Galaxy S4 Zoom (причем почти все), Lenovo A328, а также бесчисленное количество других смартфонов и планшетов. Доходило до абсурда: Samsung часто используют в своих смартфонах противные виды компаунда и ставят память впритык к процессору, из-за чего феном их снимать рискованно. Поэтому многие мастера просто спиливали неисправную микросхему гравёром подчистую, чистили компаунд и ставили новый, полностью чистый чип памяти с пустой зоной RPMB. Ведь даже если снять живую микросхему с донорской платы, смартфон отказывался с ней работать из-за привязки памяти к процессору...
Видите «пыль» на процессоре? Это ошметки кристалла чипа памяти, каждый бит разлетался в прах...
Рассуждения о дефекте прошивки контроллера так и оставались бы теорией, если бы не ребята из команды Z3x. Они умудрились где-то достать документацию на сервисный режим прошивки контроллеров в eMMC через тест-поинты, сдампить (?) прошивки с рабочих флэшек и начать прошивать контроллеры неисправных чипов. И как бы это забавно не звучало, флэшки внезапно оживали, причём иногда вместе с очисткой RPMB-зоны, что позволяло использовать их для ремонта других смартфонов! Думаю происходило это как раз из-за эффекта схожего с командой «nand scrub» в классических NAND'ах — очищалась таблица бэдблоков, информация об износе, а также сама новая прошивка была более удачной и позволяла «побегать» такой микросхеме ещё несколько лет. И что самое грустное, Samsung не признавали проблемы, предпочитая молча исправить её в ~2015-2016 году...
Собственно, в случае с нашим смартфоном всё немного сложнее. У нас используется не просто eMMC, а eMCP — микросхема, объединяющая в одном корпусе как флэш, так и оперативную память. Дело в том, что смартфоны на чипах MediaTek используют CID флэшки для определения конфигурации DRAM-контроллера. Если CID установленной флэшки в Preloader'е нет, то смартфон просто откажется включаться и выдаст ошибку S_FT_ENABLE_DRAM_FAIL, поэтому нужно подобрать либо такую-же микросхему памяти, либо поддерживаемую хотя-бы одним из прелоадеров, доступных для данного чипсета. Тут то и кроется главная фишка: при желании смартфон можно даже проапгрейдить, просто установив микросхему с большим объёмом оперативной и постоянной памяти, если найти подходящий Preloader.
Микросхемы 2/16 в корпусе BGA163 я не нашёл, поэтому порылся в донорах и обнаружил битый и раздербаненный смартфон DEXP на таком же чипсете и с идентичной eMCP:
Далее я выпаял чип и снял с него остатки шаров с помощью оплётки для снятия припоя. В целом это необязательный шаг, старые шары можно снять и паяльником, но он снижает вероятность появления слишком больших шаров при перекатке.
После этого я взял JIG, установил туда чип и центрировал трафарет, а затем нанес ровным слоем паяльную пасту Mechanic:
Пришло время превратить пасту в шарики: я перекатывал шары на температуре 285 китайских попугаев при минимальном потоке воздуха на фене типа 858D. Имейте ввиду что эти микросхемы памяти относительно нежные и очень не любят перегревов, поэтому снятие, установка и перекатка должны быть относительно быстрыми и с соблюдением адекватного термопрофиля (сказал человек с 858В :)) ).
Какая красота... Просто обожаю смотреть на то, как паста превращается в шарики — это одно из чудес света по техногиковским меркам :)
Далее осматриваем шары на предмет соосности и идентичности высоты. Иногда, если паста нанесена не слишком аккуратно между пинами, один-два шарика могут получится больше или меньше других, что может помешать нормальной установке на плату. В таком случае можно снять неудачные шары и докатать их вручную:
Извините, у меня нет микроскопа, пользуюсь лупой (:
Затем снимаем старый чип памяти с платы. Я грел только сверху при температуре 310гр., при небольшом потоке воздуха, чип начал покачиваться спустя полторы минуты прогрева и снялся без проблем лезвием. После этого зачищаем пятаки от старых шаров с помощью паяльника и маленького кусочка оплетки и отмываем посадочную площадку от флюса:
Теперь наносим флюс с кончика пальца (я использую Amaoe), центрируем чип относительно шелкографии на плате и устанавливаем при температуре 310гр. С современными смартфонами такое скорее всего не прокатит: там без нижнего подогрева делать нечего, а UFS-память крайне нежна к перегреву.
После установки чипа мы прошиваем смартфон. Если Preloader прошился и процесс пошёл — значит чип встал нормально, оперативная память проинициализировалась, а eMMC пережила перекатку и установку на плату. Однако лучше где-нибудь иметь дамп NVRAM любого телефона на 6582, дабы сразу прописать Mac-адрес и IMEI, чтобы не потерять сеть.
И вот — момент истины! Зажимаем кнопку включения и... видим что гаджет включился и полностью работает! Дисплей, тачскрин, кнопки, стик — всё оказалось исправным. Осталось лишь собрать смартфон...
❯ Изучаем
Но я ж не просто так говорил о том, что инженеры постарались и здесь действительно есть на что посмотреть. Поэтому перед сборкой мы по традиции блога изучим аппаратную платформу устройства и начнём с сердца смартфона — чипсета MediaTek MT6582. По правде сказать, этот процессор — прямо таки настоящее инженерное чудо, размером чуть более 1 сантиметра. И внутри себя он скрывает:
Целых 4 основных ядра ARM Cortex-A7, работающие на частоте 1.3ГГц, с поддержкой набора инструкций ARMv7, а также SIMD — Neon.
Одно дополнительное ядро Cortex-R4, работающее на частоте 480МГц для обработки сети и задач Baseband'а, плюс дополнительный DSP сопроцессор на неизвестной архитектуре.. Вопреки распространенным заблуждениям, в большинстве MediaTek'овских чипсетов модем встроен в процессор.
Двухъядерный видеоускоритель Mali-400MP2, работающий на частоте 500МГц. Это довольно серьезный GPU по меркам тех лет и был способен потянуть GTA: San Andreas, или, например, Asphalt 8 с комфортным FPS при разрешении в 800x480.
Контроллеры USB, I2C, SPI, UART, I2S (для подключения внешних аудиокодеков), ШИМ, а также SD и SIM.
Поддержка MIPI DSI и DBI дисплеев с разрешением до WVGA или даже HD.
И всё это изготовлено по 28нм техпроцессу с общим размером корпуса в 10.16x10.16мм! А ведь это только корпус, сам кристалл ещё меньше...
Вне всяких сомнений, этот чипсет — шедевр технологической мысли, учитывая его размеры... Даже MT67xx уже были заметно больше по габаритам, несмотря на идентичные 4х-ядерные конфигурации.
Процессор меньше сим-лотка...
Чуть ниже скрывается чип eMCP от Samsung, о котором мы с вами уже поговорили. Левее обнаруживается контроллер питания MediaTek MT6323GA. В него входит:
Логика управления режимами питания, а также транзисторная защёлка, которая даёт разрешение на старт.
Watchdog для мониторинга полного зависания процессора и автоматической перезагрузки.
Целых 3 Buck DC-DC понижающих преобразователя для формирования основных шин питания. Первый занимается формированием питания процессора — т.е VCore (~0.8В), второй — формирует дополнительное питание усилителя - VPA, а третий формирует главную периферийную шину — VSYS (3.3В).
Аж 23 LDO для формирования второстепенных шин питания. Именно LDO формирует шины питания цифровой логики VIO (1.8В и 2.8В), питание камеры VCAM, контроллера дисплея VLCD, RF-фронтэнда, USB и других модулей.
Часы реального времени (RTC)
Контроллер зарядки Li-Ion аккумуляторов
Одноканальный моно-усилитель для разговорного динамика мощностью до 0.7Вт класса AB/D
Это просто невероятно крутой функционал для копеечного чипа. Круче только засунуть КП в процессор :)
Под дополнительным экраном скрывается RF-часть устройства. Она не менее интересна, поскольку всего в нескольких чипах скрывается довольно богатый функционал. Первым делом мы видим усилитель мощности VC7584-21, в задачи которого входит усиление 3G-части RF-тракта (верхний и средний диапазон частот). Рядом находится чип VC3318 — если я правильно понял, это усилитель 2G-части (а вернее нижнего диапазона частот — т.н LowBand).
Ещё немного правее скрывается чип MT6627N, который отвечает за Bluetooth, Wi-Fi, GPS и FM функционал смартфона. К слову у него тоже есть своя прошивка и технически это дополнительный процессор.
Чуть ниже скрывается микросхема MT6166V, которая выполняет роль RF-фронтэнда и по сути скрывает в себе всю магию превращения цифровых сигналов в аналоговые. Именно она преобразует аналоговый сигнал с антенны в цифровые данные, которые затем обрабатывает DSP модема, а также она превращает датаграммы в аналоговые пакеты, которые затем уходят в эфир.
Слева расположилась микросхема, которая формирует питание подсветки (определяется по характерной фидбек-обвязке для повышающего DC-DC преобразователя), а также микросхема-свич бендов (?) GPS-тракта (на основе схемы из другого смартфона на такой же платформе, о назначении только догадываюсь).
На дополнительной плате расположился микроконтроллер, который я уж точно не ожидал здесь увидеть — TI MSP430, который как раз и отвечает за опрос кнопок и стиков. Он подключен к процессору через шину I2C и с помощью специального драйвера в Linux выступает дополнительным устройством ввода.
И в целом эта вся аппаратная платформа устройства. Несмотря на отсутствие схемы именно на данный смартфон, опыт показывает что большинство устройств построены на +- схожей референсной аппаратной платформе от производителя чипсета и даже без родной схемы можно провести диагностику и ремонт совершенно неизвестного устройства. Так было во времена кнопочных Nokia, так происходит во времена современных смартфонов Samsung, так будет и в будущем, поэтому без системного подхода в этой сфере никуда :)
❯ Включаем
Ну, раз уж наш смартфон снова работает, то теперь мы можем протестировать его в играх на практике. После загрузке нас встречает кастомный лаунчер, специально оптимизированный под формат игрового смартфона, плюс небольшой набор программ. Среди них есть популярный в прошлом HappyChick (что-то типа RetroArch + репозиторий ромов), а также программа для маппинга аппаратных кнопок на тачскрин — для тех игр, где не поддерживается геймпад.
Моё внимание сразу же пало на очень неплохой IPS-дисплей с разрешением 960x540 — почти как Retina у iPhone 4. Да, сегодня оно кажется небольшим, однако какой-то особой зернистости и дискомфорта не ощущаешь. Матрица отличается не только отличной цветопередачей и большими углами обзора, но и большим запасом яркости подсветки.
В целом, смартфон работает шустро даже сейчас. По прямому назначению его можно использовать без каких либо проблем — он звонит, выходит в сеть (правда уже только 2G), с него можно найти в ВК через Kate Mobile, или использовать Telegram. Несмотря на Android 4.2, с устройством ещё долго можно будет ходить как со вторым или даже основным смартфоном. Но очевидно что главная фишка этого устройства как раз игровые возможности. И здесь с этим всё прекрасно. Например эмулятор NES идёт на полной скорости с адекватной поддержкой всех аппаратных кнопок и даже аналогового стика. Играть одно удовольствие.
Не менее хорошо идут и игры с PS1. Даже тяжелые игрушки по типу Quake II работают без особых проблем и на полной скорости. Изредка может быть небольшая рассинхронизация по звуку, но не более того.
Ну и куда же без нативных игр! S5800 тянет многие релизы своих лет без каких-то особых проблем. NFS MW2012, Asphalt 8, GTA: SA — эти игры идут может и не на максимальных настройках, но всё равно выглядят хорошо и идут с приемлемым фреймрейтом.
Несмотря на то, что на ранних партиях наблюдался баг с залипанием кнопок из-за матричного метода подключения (кто вообще так делает на игровых консолях?!), я считаю JXD S5800 одним из лучших игровых смартфонов из когда либо созданных. Судите сами: удобная эргономика, не самый плохой ход кнопок, наличие обоих триггеров и плавные, беспроблемные стики, тактильно схожие с PS Vita. Поверьте, ни один телескопический геймпад не сравнится с эргономикой монолитного устройства... Ну, разве что Motomod Gamepad :)
❯ Заключение
Вот такая статья у нас с вами получилась. Конечно я понимаю что мои знания в сфере ремонта телефонов очень малы, я плохо понимаю схемотехнику и мне никогда не сравнится с мастерами у которых по 10-15 лет опыта, а моя методика диагностики и подходы к ремонту могут показаться кому-то дилетантскими. Чего уж говорить, я пока даже расковырять и восстановить межслой не могу, ну или катнуть бутер на условном X3 Pro не угрев UFS. Но я всё равно стараюсь и получаю удовольствие от ремонта «для фана», я же всё таки техногик и любитель поиграть и иногда даже что-то написать для диковинных гаджетов :)
А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.
Если вам понравилась статья и вы хотите меня поддержать, у меня есть Boosty, а также виджет на Пикабу ниже. А ещё мне можноотправить какое-нибудь интересное железо: устройства на WinCE/WinMobile, китайские кнопочники, китайские подделки на iPhone/Samsung из начала 2010-х, игровые консоли, ретро-ПК железо - всё это я очень люблю и порой пытаюсь поднять даже нерабочие гаджеты :) Всем огромное спасибо!
Что думаете о JXD S5800?
Что думаете о статье? Хотели бы увидеть статью с подробным разбором схемотехники PSP?
Для ЛЛ: в двух словах не описать, длиннопост уж очень большой :)
Сегодня всё чаще можно услышать мысль о том, что раньше мобильные игры были лучше. В какой-то степени это правда: ранние Java-игры отличались отсутствием доната и сервисной модели монетизации, логической завершенностью большинства тайтлов, а также экспериментами с новыми жанрами. И всё это в рамках крайне ограниченных возможностей Java-телефонов. В этой статье я хотел бы рассказать о трудностях мобильной разработки образца 2005 года с конкретными примерами тех или иных решений, так что если вам интересно — добро пожаловать под кат!
Содержание:
Предисловие
Реалии разработки
Как игры работали «изнутри»?
Что стало с J2ME
Заключение
❯ Предисловие
Пожалуй, мобильный гейминг как класс зародился в самом начале двухтысячных годов. В какой-то момент, производители телефонов смекнули, что помимо задач обработки GSM-стека, у чипсета остаётся достаточно процессорного времени для обработки второстепенных задач, благодаря чему в телефонах начал появляться дополнительный функционал: к примеру — игры. И хотя первой мобильной игрой был клон Тетриса в Hagenuk MT-2000 1994 года выпуска, на практике игровые перспективы в телефонах увидели только в 2000 году, когда компания Sun выпустила спецификации стандартов CLDC 1.0 и MIDP 1.0.
Siemens SL45i — один из первых телефонов с поддержкой Java-приложений.
Дело в том, что в те годы телефоны работали на целом зоопарке самого разного железа и операционных систем. За год-два в телефонах одного производителя могло измениться всё: та же Motorola внезапно перешла с кастомной GSM-платформы на базе m68k в StarTAC'ах на стандартный TI HERCROM с ядром ARM7TDMI в телефонах линейки Talkabout, параллельно развивая свою собственную архитектуру M-Core в устройствах для CDMA-сетей. А Siemens, к примеру, использовали процессоры разработки Infineon под названием E-Gold, построенные на собственной архитектуре C166s, которые уже через несколько лет заменили на S-Gold'ы, построенные на ядре ARM926EJ-S. Для решения этой проблемы, компания Sun предложила миниатюрную Java-машину с набором стандартизированных API и свободным SDK, которые в теории позволяли легко разрабатывать программы, не зависящие от конкретного телефона. И имя этой машине — KVM (Key Virtual Machine), а мобильный профиль назвали J2ME (Java 2 MicroEdition).
Сердце Siemens M55 — тот самый процессор Infineon E-Gold
Набор API в первых телефонах с поддержкой Java был небогатым и состоял из CLDC — базовой инфраструктуры языка, и MIDP — набора классов для работы с «железом» устройства. Присутствовали пакеты для работы с дисплеем и создания простенького интерфейса (lcdui), примитивной работы с сетью (microedition.io), а также хранения данных (rms). При этом основная инфраструктура языка во многом была совместима с обычной Java версии 1.3 — то есть были классические потоки, коллекции (Vector, Stack, Hashtable — и это ещё не дженерики), генератор псевдослучайных чисел, исключения и даже минимальная рефлексия (Class.forName и Class.newInstance). Однако у CLDC 1.0 был один неприятный нюанс — он не поддерживал Float вообще ни в каком виде, из-за чего классы при компиляции проходили верификацию и дополнительную оптимизацию специальной утилитой — preverify.
Это весь java.util в CLDC 1.0. Сравните с современной реализацией этого пакета :)
И по правде сказать, этого набора API было слишком мало для разработки хоть сколь либо серьезных приложений и игр. Объём RMS был жёстко ограничен несколькими килобайтами, графическое API не умело рисовать кусочки изображения из атласов и использовать полупрозрачность, а о воспроизведении звука вообще можно было не мечтать. И это было справедливо для моделей 2001 года выпуска, но уже в 2002 начали появляться куда более продвинутые устройства с цветными дисплеями, полифонией и большим объёмом памяти. Каждый производитель начал реализовывать своё собственное API, из-за чего стали плодится отдельные версии приложений адаптированные для разных телефонов — Opera Mini S40 128x128, Gangstar SE 176x220, Prince Of Persia Mot 128x160...
Nokia 3300 2003 года выпуска. Один из первых телефонов с поддержкой Nokia API.
Но MIDP 1.0 был отнюдь не бесполезен как может показаться на первый взгляд. Именно под него разрабатывались первые версии Opera MIni, Jimm и самые первые Java-игры. Клон Pac-Man на SGH C100 как раз один из таких.
Однако уже в 2002 году появилась спецификация MIDP 2.0, которая привносила возможность воспроизведения звуков и музыки, проверки подписи приложений, а также продвинутое API для отрисовки графики и работы с расширениями. Несмотря на готовность спецификации, первые телефоны с поддержкой MIDP 2.0 появились только в 2003 году — это была Nokia 6600, а также Siemens S55/M55. И вот с Siemens'ами была небольшая загвоздка — их реализация MIDP 2.0 была обернута в отдельное Siemens API и не была на 100% совместима с Sun'овской, настоящая поддержка появилась лишь через год — в 2004 году. Остальные же производители продолжали использовать MIDP 1.0, включая Sony Ericsson (T610), Samsung (C100) и модели Nokia на платформе S40.
А уже в 2004 году, J2ME стала по настоящему популярной платформой. Появились сторонние лицензируемые реализации Java-машин и MIDP — Esmertec JBed и Aplix JBlend, на телефонах стала возможной отрисовка 3D-графики в реальном времени благодаря M3G и Mascot Capsule, а также начали появляться первые AA-игры от Gameloft — как, например, тот же самый Asphalt. Sun пошли ещё дальше и умудрились уговорить ARM на реализацию отдельного набора инструкций для ускорения JVM — Jazelle. Это, вероятно, первый и последний пример, когда JIT реализовывается не на уровне VM, а на уровне ISA процессора...
И на первый взгляд может показаться, что у Java банально не было конкурентов, однако это не так. Как раз таки конкурентов у J2ME было сразу три. Первый — это платформа Mophun, которая представляла из себя игровой движок с очень быстрым программным растеризатором 3D-графики и собственным C-подобным скриптовым языком. Заточен он был исключительно под игры и на нём вышло несколько очень крутых, на момент выхода, игр. Например, Lock'n'Load:
Mophun провалился как раз из-за ориентира только на игры. Насколько мне известно, API для других целей там просто не было. Второй платформой была ExEn от французской компании In-Fusio, которая также позволяла писать приложения на Java, но имела больший ориентир на игры. Однако её можно было найти только в французских (Alcatel One Touch, Sagem) и нескольких японских телефонах, а также у неё было жёсткое DRM, что помешало ей стать «народной». Чуть позже, In-Fusio начала предлагать ExEn как один из пакетов для «обычных» JVM, но платформа прекратила существование уже в середине 2000-х...
Alcatel One Touch 535 — один из немногих телефонов с поддержкой ExEn. Давно хочу себе подобный Alcatel поковырять, но почему-то не попадались ни разу.
А третьей платформой был BREW от компании Qualcomm. И по правде сказать, он был куда круче любой JVM — ведь предлагал писать полностью нативные программы на C, используя всю потенциальную мощность устройства. Но Qualcomm не был бы Qualcomm'ом, если бы не ограничил использование BREW только на телефонах с собственными чипсетами и RexOS, а также не отгородил всё отвратительным DRM. Впрочем, это тоже можно простить, ведь Qualcomm уже тогда был доминантном и двигателем прогресса телефонов, поскольку уже в 2004 году разработал и интегрировал собственный 3D-ускоритель. Но это уже совсем другая история...
Сейчас такая графика может показаться смешной, но в те годы видеоускоритель Defender3D творил чудеса. Игра с очень неплохой графикой и в 25-30 FPS на обычном кнопочном телефоне?! Невиданно!
Так что J2ME благодаря усилиям производителей телефонов и самой Sun стала по настоящему народной платформой. SDK был доступен абсолютно бесплатно и для всех, предлагалась отличная документация с множеством примеров программ, а приложения можно было ставить и отлаживать откуда угодно и как угодно, прямо как на Android. И это стало одной из проблем...
❯ Реалии разработки
Как и сейчас, в те годы мобильными играми в основном занимались небольшие команды. Условно был программист, который недавно постиг Java, перейдя на него с Delphi или C++, пару художников, которые рисовали всю графику в игре, а также отдельный звуковик, в задачи которого входило написание midi-музыки и иногда таких же midi-эффектов. Магазинов ассетов и соответственно ассет-флипа как класса ещё не существовало, поэтому всё в игре делали своими руками «как умели». Наверное одним из лучших примеров таких студий будет харьковская NetSoftware, известная своими играми серии «Бункер 3D»:
Что такое ассет-флип?
Сегодня у двух самых популярных движков — Unity и Unreal Engine, есть собственные магазины с ресурсами для игр. В них можно купить как обычные модели, текстуры и саундпаки, так и целые уровни вместе с шаблонами игр. Ассет-флипом называются те игры, которые либо построены на базе популярного шаблона игр (помним бесчисленные низкокачественные шутеры с всякими Ultimate FPS Controller или «симуляторы вождения» на базе Edy's Vehicle Phyiscs?) с минимальными геймплейными изменениями относительно шаблона, либо игры с собственной логикой и геймплеем, которые неизменно используют уже готовые уровни.
Свастику мы осуждаем, а вот авторов из NetSoftware хвалим за крутейший 2.5D-рейкастер, который шустро бегал даже на слабых телефонах и в отличии от оригинального Wolfenstein поддерживал стены под углом, а также объёмные «пропы».
И вот, ребята разработали игру и хотят заработать денюжку на её продаже. Тогда ещё возможности самиздата не было, а также не существовало монетизации за счёт рекламы и донатов (кроме немногочисленных MMORPG), поэтому игры продавались по цене примерно в 3-4$ напрямую, а покупка осуществлялась отправкой СМС на... да вообще любой номер! Магазинов было просто куча, ни о каком едином сторе (кроме Samsung Fun Club, портала Nokia и Sony Ericsson) и речи не было, а каталоги Java-игр можно было найти в женских журналах, в ТВ-рекламе и даже на сайтах ОпСоСов (Оператор Сотовой Связи)! После отправки СМС, пользователь получал ссылку на WAP-сайт, откуда он мог скачать jad-файл игры (дескриптор с описанием приложения), после чего телефон докачивал соответствующий jar. И всё это без скриншотов, без возможности возврата средств, ориентируясь исключительно на обложку игры и известное название...
Насколько мне известно, небольшие команды чаще всего шли к издателям по типу Qplaze, NetLizard (Украина) и Herocraft (Россия), которые и занимались налаживанием контактов с таким ворохом каналов распространения, а также реализацией биллинга с «антипиратской защитой». Дело в том, что помимо «слепой» покупки игры также были популярны Shareware-игры: играешь 90 секунд бесплатно, затем игра просит отправить СМС для получения кода активации и если пользователь соглашается — то получал полную версию игры. И вот тут то модель распространения давала сбой: Java ведь компилируется в байткод, и даже после обфускации его можно превратить в читаемый и относительно собираемый исходный код. Путём простого патчинга байткода биллинга (того самого окошка «оплатите игру") можно было "вылечить игру от жадности" и выложить куда-нибудь на seclub, sefan, spaces или tegos версию с "таблэткой":
А ведь были ещё и телефоны, которые jad-файл могли не только сразу установить, но и скачать в память телефона — причём вместе с jar. И вот тут активизировалось сарафанное радио: один купил игру, скинул другу (нередко за пирожок в столовой, кэшбек же), тот скинул своему другу, а он залил на wap-сайт... короче пиратство было настолько распространено, что я даже в теории не могу предположить сколько там упущенной прибыли :)
STALKER Mobile — одна из самых желанных 3D-игр на телефоны нулевых.
А ещё был хорошо налажен конвейер копирования успешных идей. Однако если сейчас в основном копируются свежие геймплейные идеи гиперказуальных игр, то тогда пытались один в один скопировать целые игровые вселенные. Вспомнить только Gameloft с её AAA-играми по мотивам GTA (Gangstar), Need for Speed (Asphalt) и даже Call of Duty (Modern Combat). В СНГ же такой фирмой была NetLizard, которая в основном делала упор на популярные игровые вселенные и постсоветский колорит (Ликвидатор ЧАЭС — её разработка). Кроме того, не было никаких особых ограничений на распространение эротических и даже порнографических игр — и они свободно распространялись даже в журналах (с особо сочными описаниями)!
На первый взгляд эти тайтлы могут показаться трешачком или славджанком, однако на практике это были вполне годные игры, пусть и с глупым, кликбейтным описанием.
❯ Как это работало?
Однако пожалуй самое интересно это то, как мобильные игры тех лет работали «под капотом». Ведь в отличии от современных устройств, на кнопочных телефонах нельзя было разгуляться с абстракциями, раскидываться аллокациями на куче, и даже использование floating-point арифметики было нежелательным. Более того, многие разработчики намеренно отказывались не только от любых абстракций, но и просто от концепции классов или стандартных паттернов организации сцены/состояний, предпочитая создавать God-объекты для целых игр. В одном классе мог быть код и обработки состояний (меню, игра), и загрузки уровней, и отрисовки, и обработки логики. Нередко отказывались даже от стандартных коллекций типа Vector и структур данных, предпочитая реализовывать статические пулы-массивы с данными для каждого игрового объекта. Как бы это забавно не звучало в контексте Java, но чаще всего использовали процедурный подход программирования:
Это главный класс игры «Ликвидатор ЧАЭС» весом в 56КБ, который сочетает в себе вообще всю логику игры. Как вам такое?
На первый взгляд может показаться, что программисты были просто неопытными и писали «как умели». Однако на практике это была одна из фундаментальных оптимизаций: во первых, статические пулы с примитивными типами данных избегали дорогого боксинга (управляемые контейнеры над примитивными типами. int - Integer, float - Float). Использование структур было не всегда оправданным из-за относительно высокой цены аллокации (а в J2ME они всегда на «куче», в отличии от .NET. Засовывать мелкие объекты в Eden-space те JVM ещё не умели) и примитивности GC. А во вторых, в некоторых JVM верификация почему-то выполнялась не при установке приложения, а при первой загрузке класса ClassLoader'ом. И процесс верификации мог заметно затормозить приложение, при этом съев ещё немного памяти для данных о загруженном классе.
Другое дело — классы из системных пакетов. Они всегда загружены и обычно являются тонкими прослойками к native-реализациям методов.
Ведь когда мы говорим о Java-телефонах, то чаще всего имеем ввиду не топовые Symbian-смартфоны у которых было 2МБ и более хипа, а о бюджетных кнопочных устройствах по типу Nokia 6060 или Samsung C3010, где хипа едва-ли был 1 мегабайт, а порой и вообще ~500КБ. И в это пространство нужно уместить всё: графику, уровни, звуки с музыкой и конечно код игры. Поэтому разработчики и шли на такие ухищрения. Кроме того, как раз тот самый верификатор был занозой в заднице любителям абстракций: даже если движок игры технически позволял использовать Nokia API на S40 телефонах, Sony Ericsson API на SE и обычный MIDP 2.0 на Samsung'ах, Java-машина при установке может просто прервать процесс сообщением «класс не найден»...
Чтобы примерно понимать с каким железом приходилось иметь дело программистам из нулевых, давайте рассмотрим спецификации бюджетного Samsung SGH-E250 образца 2006 года:
Процессор: NXP PNX5230 с одним ядром ARM946E-S, работающим на частоте до 130МГц. В 2007 году уже чаще встречалось более мощное ядро ARM926EJ-S, которое работало на частоте до 208МГц.
Память: 16МБ оперативной, из которых Java-приложениям было доступно около 1.5МБ, а также 32МБ постоянной. Для Jar-приложений было строгое ограничение — 250КБ.
Дисплей: 128x160 TFT-TN, 16-битный.
Поддерживаемые API: JSR75, JSR85, JSR120.
Не то чтобы железо было уж очень слабым, но не стоит забывать о том, что телефоны были многозадачными и под приложения отдавалось отнюдь не всё процессорное время, а итоговая производительность сильно зависела от порта Java-машины на конкретный телефон.
Nokia 6060 — типичный бюджетник, на который ориентировались при разработке игры.
Второй проблемой была графика и разные разрешения экрана. В качестве основного формата изображений, в J2ME был выбран png из-за простоты реализации загрузчика, высокой lossless-компрессии, а также свободности Zlib. Формат png в своей основе подразумевает 32х-битный формат цвета с 4-мя компонентами: R, G, B и A. A — это альфа-канал или степень прозрачности пикселя, и вот с ней у многих телефонов были проблемы. Дело в том что примерно до 2006 года, многие телефоны не умели альфа-блендинг (т.е полноценную полупрозрачность) вообще, из-за чего представляли прозрачность либо как 0 (пиксель прозрачный), либо как 1. Если в игре предполагались полупрозрачные поверхности (например стекла или параллакс-фоны), то для некоторых телефонов их приходилось заменять дизерингом или вообще делать упрощенную, менее красочную версию:
Вам кажется что куб полупрозрачный, однако на практике часть его фрагментов — полностью прозрачные, а часть — нет. Это частый стилистический прием, актуальный как в играх 90-х, так и сейчас.
Вы никогда не задумывались, почему современные 2D-игры не зависят от разрешения экрана и выглядят одинаково сочно как на 4K-дисплее, так и на 720P экране бюджетного смартфона? Секрет прост: современные игры используют в качестве системы координат не пиксели, как это делали многие старые релизы (не только Java, но и консольные/ПК), а метры (сантиметры, что угодно). С развитием мобильных GPU, 2D стало частным случаем 3D и теперь все двухмерные элементы — это просто плоские 3D-треугольники. А поскольку растеризатору совершенно не важно какой треугольник ему «скармливают» и при нанесении текстуры/спрайта он оперирует исключительно алгоритмами фильтрации (которые включают в себя масштабирование) — мы можем видеть идентичную картинку с идентичным уровнем масштабирования на любом устройстве:
Один из моих Just for fun-проектов — игра про оборону от зомби в стиле Crimsonland. Выглядит одинаково как на смартфонах с 720p дисплеями, так и 240p.
На ретро-телефонах всё было по другому. Чаще всего у устройств не было не то что FPU, даже аппаратного деления в процессоре зачастую не было. Поэтому любая floating-point арифметика эмулировалось программно, а умножение/деление были очень дорогими, из-за чего система координат в играх обычно была целочисленной, а результаты любых тригонометрических функций были посчитаны заранее для всех углов поворота объекта. Конечно никто не мешал реализовать масштабирование и поворот (т.е умножение на 2x2 матрицу) на fixed-point арифметике, но учитывая что процессор можно было положить на лопатки несколькими десятками небольших спрайтов, разработчики всегда использовали классический блиттинг — то есть прямое копирование изображений на экран без масштабирования, поворота, блендинга и других операций. Именно поэтому в таких играх чаще всего не было автоматического масштабирования, а каждая версия игры несла в себе свой пак ресурсов:
По возможности многие разработчики старались использовать API от производителей телефонов. Дело в том, что нативное API зачастую предоставляло возможность проигрывать куда более качественную MMF-музыку (Samsung), заметно быстрее отрисовывать 2D-графику (Nokia UI API) и получить доступ к фишкам по типу мультитача и даже звонкам! Например DirectGraphics в Nokia UI API поддерживал поворот на фиксированный угол и возможность «бесплатной» отрисовки изображения в нативном пиксель-формате (RGB565), благодаря чему Nokia UI реализовывали и другие производители — например Sony Ericsson:
Ну и конечно стоит упомянуть 3D на телефонах нулевых, благо там был целый зоопарк различных API. Пожалуй самым первым был легендарный Mascot Capsule, который использовался в телефонах Sony Ericsson и Motorola, и представлял из себя очень быстрый софтварный растеризатор, который позволял выдавать графику уровня PS1. Помимо растеризатора затененных и текстурированных треугольников, Mascot Capsule также предоставлял «собственный» формат текстур (bmp), моделей (mbac), и анимаций (mtrac), математическую библиотеку, а также поддерживал примитивный скиннинг. Однако главной особенностью было то, что в целях экономии памяти, Mascot Capsule не поддерживал Z-буфер и вручную сортировал треугольники по отдаленности к наблюдателю, из-за чего иногда можно было увидеть Z-fighting, характерный для игр с PS1:
V-Rally — одна из игр на движке Abyss Engine от Fishlabs. На нём же потом сделали Galaxy on Fire и Deep3D, и это один из немногих примеров использования абстракций в Java-играх.
Второе API появилось в 2004, называлось M3G (Mobile 3D Graphics) и использовалось практически везде... кроме телефонов Samsung до 2010 года. И вот здесь есть важный момент: во первых, M3G это спецификация и реализаций этого API было много. Референсная, насколько мне известно, была построена на базе OpenGL ES 1.1, в то время как большинство производителей использовали проприетарные реализации на базе кастомных софтрендеров. А во вторых — M3G это не просто растеризатор треугольников, а граф сцены с собственной древовидной структурой объектов. И разработчикам предлагалось строить логику как раз поверх этих самых Node'ов — что идёт вразрез с моими словами о максимальной примитивности и линейности логики игр тех лет. Поэтому большинство разработчиков использовали M3G, если говорить очень условно, как «Unity» тех лет — создавали уровни в 3d Max, загружали их в игру, создавали какие-то объекты и управляли их компонентами (трансформация, материал и т.п.) также, как в Unity:
По уровню графики, M3G позволял добиться довольно неплохих результатов. Ниже игра Rally 3D Nokia, которая по совместительству является Java-портом одноименной игры с Mophun:
Что-то так защемит в груди...
Третьим API был JSR239 — OpenGL ES, которому не суждено было стать популярным на Java-телефонах. Дело в том, что его поддерживали только телефоны Sony Ericsson и только после 2008 года, а также несколько устройств от BlackBerry. Несмотря на то что ES 1.1 Nokia реализовала в своих Symbian-смартфонах ещё в 2006 году (из-за появления устройств с 3D-ускорителями от PowerVR), этот стандарт никогда не был реализован в Java-машине... Зато он оказался реализован в самой первой версии Android, благодаря чему там до сих пор есть пакет javax.microedition.khronos.opengles!
А некоторые разработчики шли во все тяжкие и реализовывали программные 3D-растеризаторы прямо на Java, которые ещё и умудрялись очень шустро работать! Понятное дело что под капотом они были простыми и сильно упирались в филлрейт, однако популярная в своё время игра Left2Die как раз использовала свой собственный программный растеризатор, благодаря чему работала даже на телефонах Samsung:
❯ Судьба J2ME как платформы
До 2010 года, J2ME продолжала оставаться самой популярной программной платформой для телефонов. Её поддержку добавляли и в простые телефоны, и в смартфоны, а сама платформа продолжала обрастать функционалом и новыми пакетами. Sun (уже почти Oracle) вместе с производителями телефонов успела представить третью версию профиля MIDP в 2009 году, и выпустить новую версию SDK, но уже в 2010 году платформа начала стремительно сдавать позиции...
Одна из причин падения J2ME
И этой причиной был Android. Дело в том, что в своё время, ОС от Google умудрилась полностью перевернуть мир смартфонов, представив систему с довольно неплохим и логичным API, современным подходом к разработке приложений и открытостью к производителям смартфонов. И что самое интересное, весь юзерспейс Android'а был написан на Java, что сильно упростило переход уже существующих Java-разработчиков на смартфоны. Были разработаны библиотеки-слои совместимости с MIDP для упрощения портирования, были организованы конкурсы среди разработчиков приложений, а к 2010 году появились первые Android-смартфоны по цене менее 10.000 рублей (~300$), что заметно ударило по популярности обычных Feature-фонов и кнопочных смартфонов. J2ME прожила примерно до 2014 года, пока производители всё ещё предустанавливали её в теперь уже ставшие бюджетными кнопочные телефоны. Большинство разработчиков перешли к разработке для iOS и Android, и лишь Gameloft время от времени радовала нас новыми релизами, пока в 2014 платформа окончательно не умерла...
Затем на место Java-телефонов пришли устройства с KaiOS, которые тоже успели кануть в бытие, а теперь, как бы это забавно не звучало, продвинутые кнопочные телефоны работают на Android. И что самое забавное — в свежих LTE-кнопочниках на чипсетах Unisoc просто нереально крутые ТТХ по сравнению с той же Nokia N73: 64 мегабайта DDR2-оперативной памяти, гигагерцовый ARM-процессор на ядре Cortex-A7, поддержка инструкций NEON... Но никакой возможности запуска сторонних приложений. Это очень грустно.
❯ Заключение
Вот такой была разработка мобильных игр в далёких нулевых годах... От многообразия аппаратных платформ, форм-факторов и операционных систем мы пришли к доминированию iPhone и Android, а от полной открытости к пользователю — к закручиванию гаек «открытой мобильной операционной системы» её же разработчиком. Но факт остаётся фактом — разработка в те годы была куда более ламповой, душевной и, что интересно, предлагала куда больше игр с уникальным геймплеем...
А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.
Если вам понравилась статья и вы хотите меня поддержать, у меня есть Boosty, а также виджет на Пикабу ниже. А ещё мне можноотправить какое-нибудь интересное железо: устройства на WinCE/WinMobile, китайские кнопочники, китайские подделки на iPhone/Samsung из начала 2010-х, игровые консоли, ретро-ПК железо - всё это я очень люблю и порой пытаюсь поднять даже нерабочие гаджеты :) Всем огромное спасибо!