Жизнь после отвала eMMC. Часть 3: оживляем уникальный QWERTY-смартфон и загружаем Android с MicroSD
Есть у меня страсть к коллекционированию и ремонту интересных смартфонов прошлых лет. Недавно подписчик подарил мне весьма диковинный и необычный гаджет 2011 года: бюджетный QWERTY-смартфон Samsung Galaxy Y Pro с чипсетом от Broadcom. Помимо самого факта того, что смартфон обладал QWERTY-клавиатурой, меня также заинтересовало его кровное братство с Raspberry Pi первого поколения. Но вот незадача, смартфон не включался и просто висел на логотипе. Если вам интересен необычный кейс "отвала" eMMC и переноса Android на MicroSD-флэшку - жду вас под катом!
❯ Теория
Проблема "отваливающейся" памяти преследует смартфоны и планшеты с начала 2010х-годов. После массового перехода с NAND-накопителей на eMMC, многие смартфоны начали страдать от того, что в один прекрасный день зависали и затем больше не включались... или же включались, но бесконечно висели на заставке. Обычный пользователь нёс смартфон в сервисный центр, более продвинутый шёл на профильные ресурсы и скачивал прошивку... чтобы с грустью обнаружить, что ничего не помогает и смартфон всё так же висит на логотипе.
Происходит это из-за того, что для загрузки системе необходим доступ как минимум к трём разделам: system для чтения, а также data и cache для чтения и записи. У eMMC и современной UFS-памяти есть свой собственный контроллер в чипе, который по своим собственным параметрам определяет S.M.A.R.T накопителя и, если по его мнению, флэшка уже близка к "кончине", просто переводит её в режим Read only, из-за чего данные пользователя остаются на месте, но смартфон уже больше никогда не загрузится без вмешательства специалиста.
В теории всё замечательно: данные на месте, в сервисе просто вычитают дамп старой флэшки, подберут такой же или совместимый по корпусу новый чип, а затем запишут на него дамп и восстановят все данные без потери. Но на практике бывают определенные казусы: например, у некоторых чипов Samsung 2012-2014 года был баг в прошивке, из-за чего они полностью умирали с потерей всех данных, после чего смартфон вообще не подавал никаких признаков жизни (примеры: Galaxy S4 Mini в 9008, S4 Zoom, Note N8000), иногда eMMC просто уходила в полный ReadOnly (HTC Desire SV и некоторые другие HTC'шки 2011-2012 годов), а иногда чип уходил в ReadOnly лишь частично - операции записи просто заканчивались неудачей (предположительно из-за того, что бэды ремаппить уже просто некуда) и смартфон даже мог загрузится... правда все приложения постоянно крашились, а настройки телефон не сохранял.
Примерно так вышло и в моём случае. В январе, подписчик Андрей предложил подарить мне весьма необычный смартфон - Samsung Galaxy Y Pro. Читатель попытался его перепрошить, однако смартфон всё так же продолжал висеть на заставке. Конечно я согласился, причём мне из принципа хотелось разобраться в платформе и при возможности перенести всю систему на MicroSD-флэшку.
❯ Переносим на MicroSD
После того как смартфон приехал ко мне, я убедился в том, что он действительно висит в бутлупе и никак не реагирует ни на сброс до заводских настроек через рекавери, ни на прошивку. Смартфон всё также продолжал висеть на бутанимации - а значит мы можем сделать вывод, что ядро Linux уже загрузилось и сам смартфон перешёл в последнюю фазу загрузки - запуск zygote и "отпочковывание" от него app_process.
Чтобы понять, что всё это значит - давайте вкратце рассмотрим процесс загрузки Android:
Старт BootROM, SPL и загрузчика: После включения смартфона или подключения ЗУ, контроллер питания даёт разрешение на запитывание всех модулей устройства. После этого, процессор начинает выполнять код загрузчика, однако поскольку ни NAND, ни eMMC не поддерживают XIP (eXecute In Place - возможность подключить флэшку прямо в шину процессора, на манер ROM в спектруме), первым делом процессор выполняет код из BootROM - небольшого, физически прожженного в небольшую ROM-память на заводе загрузчика, в задачи которого входит экстренный режим восстановления при окирпичивании устройства (MTK USB Port на MediaTek, 9008 на Qualcomm, FEL на AllWinner) и загрузка вторичного загрузчика из eMMC/NAND - SPL (на MediaTek называется Preloader). В его задачи входит инициализация ОЗУ и передача управления вторичному загрузчику - тот самый, который вы, возможно, захотите разблокировать и который загружает ядро Linux.
Но вот нюанс, на чипсетах Broadcom BootROM'а нет: там запуском ARM-ядер занимается GPU VideoCore, который по своей натуре - векторный DSP! Так что Y Pro интересен ещё и этой малозначимой, но забавной деталью :)Linux: Обычно ядро хранится не в сыром виде, а в специальном разделе boot/recovery и представляет из себя образ zImage + рамдиск. На этом рамдиске хранятся минимально-необходимые для старта устройства программы: init, busybox (не всегда) и... всё!
Формат таких образов условно стандартизирован и их можно разобрать и собрать с помощью специальных программ. Например, AndImgTool!init: Далее самая главная программа с PID 0 - init, запускает набор скриптов в корне рамдиска с расширением .rc. В скриптах содержатся обработчики событий (early-boot, boot, late-boot и т.п), а также список служб для запуска. В скриптах идёт монтирование разделов, запуск служб если это нужно, создание ссылок, загрузка динамических модулей и конфигурация драйверов/ядра, а также режима USB и adb. Помимо этого, init отвечает за properties - свойства в build.prop, а также default.prop, которые позволяют включить adb даже если устройство не загружается. Это нам позже пригодится.
app_process: После того, как раздел system примонтирован, RIL запущен и другие важные операции выполнены - rc-скрипт запускает наконец-то app_process с параметром zygote. Это самый важный процесс в Android, его краш ведет к "мягкой перезагрузке" - т.е появлению анимации загрузки и появлению рабочего стола. app_process - это как-бы Java-машина Dalvik (или ART в Android 5.1+), аналог java.exe, только размножается она методом почкования - с помощью системного вызова fork.
Ну и когда все службы работают - устройство показывает рабочий стол и вызывается событие ON_BOOT_COMPLETE.
Да, всё вот так просто. Итак, основываясь на сказанном выше, как мы можем перенести Android на MicroSD? Правильно, пропатчив скрипты загрузки так, чтобы они монтировали систему и раздел data с cache не с внутреннего накопителя, а с флэшки. Но для патча необходимо чтобы eMMC была хоть сколь-либо перезаписываема.
Сначала я попытался установить кастомную прошивку с помощью CWM (он здесь не перепрошивается навсегда, а запускается с помощью бага в update.zip) и заметил, что поведение смартфона поменялось: он просто висел на первичном логотипе и не загружал даже бутанимацию. А значит какие-то операции перезаписи завершились ошибкой и init либо не может примонтировать system, либо там у нас там творится бардак. Но что-то ведь всё таки перезаписалось, а после перепрошивки родной системы смартфон снова начинал показывать бутанимацию... значит, флэшка не полностью в readonly?
Я решил пропатчить boot.img, активировав в нём режим отладки через USB, дабы посмотреть что творится у нас в dmesg. Для этого я распаковал образ с помощью AndImgTool, открыл файл default.prop и заменил свойства ro.secure = 0, ro.debuggable = 1, а также persist.service.adb.enable = 1
Samsung в те годы ещё не блокировал загрузчики и прошить произвольный раздел можно было фирменным флэшером. Для этого необходимо было создать tar-архив, куда положить образ (например boot.img), выбрать его в программе и нажать "Start".
После прошивки, смартфон всё также висел на заставке... но определился в диспетчере устройств и команда adb devices показала, что смартфон подключен. Значит, раздел перезаписался и только часть eMMC ушла в readonly! Те разделы, которые никогда не перезаписываются (куда входит system, boot, recovery и SPL) - в норме?
Пишем dmesg и... видим как драйвер eMMC флудит в printk об ошибках перезаписи в раздел /data/. А ведь я говорил о том, что Android для загрузки этот раздел обязательно нужен!
Но что же за stl11, если в Linux принято называть eMMC-устройства mmcblk? Давайте посмотрим в init.rc:
Разделы используют какую-то самопальную файловую систему RFS (что-то проприетарное от Samsung), а также J4FS, вместо общепринятых YAFFS или EXT4. Давайте сделаем логический вывод: если раздел system и efs (с настройками модема) у нас в норме и никогда не перезаписывается, а после загрузки ядра, Android нужны для перезаписи data и cache... значит можно просто перенести эти разделы на MicroSD, а init.rc заставить монтировать разделы именно оттуда!
Для этого мы берём MicroSD-флэшку и с помощью fdisk бьём её на три раздела: один будет для /data/ (30% от ёмкости MicroSD - или хотя-бы 256Мб), второй для /cache/ около 64Мб и третий для обычных файлов. Затем форматируем первый и второй разделы в ext2 с помощью программы mke2fs, а третий - в обычный FAT32 (или тоже ext2, по желанию).
Далее прописываем новые точки монтирования в init.rc, собираем boot.img и прошиваем в смартфон:
И, спустя пару минут загрузки... нас встречает рабочий стол! Радости нет предела :) Но некоторые читатели могут усомнится в юзабельности всей этой затеи, ведь MicroSD как минимум в десять раз медленнее eMMC... Но всё ли так плохо? Давайте посмотрим на практике!
❯ Тестируем
Поскольку смартфон у нас с QWERTY-клавиатурой и горизонтальным дисплеем, здесь лаунчер подогнан под частичное управление с кнопок, при этом стоить иметь ввиду, что далеко не каждое приложение адаптировано для такого DPI. Тачскрин тоже есть, причём емкостной, что не может не радовать. Дисплей выполнен по технологии TN, разрешение - всего 240x320, что в целом совсем немного для смартфона, но вполне нормально для QWERTY-бюджетника тех лет.
Под капотом скрывается чипсет от Broadcom - BCM21553 с одним ядром ARM1136, работающем на частоте 832МГц. И да, это ARMv6 ядро, что значительно сужает круг поддерживаемых игр и приложений. Когда-то на 4pda даже был отдельный клуб владельцев смартфонов на этом чипсете, где люди жаловались на отсутствие поддержки ARMv7! Также в смартфоне установлено 384Мб DDR2 ОЗУ и 512Мб постоянной памяти.
В качестве GPU используется ядро собственной разработки Broadcom - VideoCore IV. И оно тоже было предметом критики на профильных форумах. Все дело в том, что как и у GPU от Samsung - FIMG, у VC IV были плохие драйвера для GLES - что было критично для игр тех лет. Поскольку большинство релизов оптимизировалось на Qualcomm Adreno и Mali, во многих играх на Y Pro были белые текстуры, или же графические артефакты.
Для сравнения: Raspberry Pi Model A и B - братья данного смартфона, которые в аппаратной части похожи почти во всем. Теперь мы с вами выяснили, что смартфон представляет определенный коллекционный интерес для любителей гаджетов на необычных процессорах!
Производительность смартфона после переноса части системы на MicroSD упала лишь немного. Девайс всё ещё продолжает относительно плавно работать, нет каких-то явно медленных подгрузок и тормозов. Многие приложения работают хорошо, однако лаги не исключены:
Но можно ли назвать смартфон бесполезным в наше время? Я думаю, что нет, определенный набор задач он все еще способен выполнять. Например, серфинг в сети - самый базовый просмотр страниц всё ещё можно осуществить с помощью Opera Mini 7, которая до сих пор продолжает работать спустя 10+ лет после релиза. Многие страницы отображаются некорректно, ни о каких сайтах с интерактивом и речи не идет... но почитать Википедию или Хабр всё равно можно!
При условии отключения проверки сертификатов (Защита -> "SSL (Принимать все)") и использования одноразовых паролей, можно использовать почтовый клиент. Работает шустро, однако пуши не поддерживает, поэтому сообщения будут проверяться с интервалом в ~5мин.
Также можно посидеть в мессенджерах. Я писал клиенты ВК и ТГ (работает через прокси) для смартфонов с Android 1.5+ и запускал их даже на первом серийном Android-смартфоне в мире и они здесь работают вполне неплохо. Об официальных клиентах и речи не идет - Android 2.3 слишком сильно устарел по мнению большинства разработчиков.
И конечно можно поиграть. Начиная от Java-игр, в которые играть вполне удобно благодаря наличию аппаратных кнопок, заканчивая эмуляторами консолей, которые в большинстве своём здесь летают и нативными играми. Таким образом, старенький смартфон превращается в миниатюрную портативную консоль. Единственный нюанс - VC IV совсем уж слабенький GPU, когда заходит вопрос запуска 3D-игр. Даже Raging Thunder 2 со своим замечательно оптимизированным рендером здесь иногда чуточку подтормаживает, при том что она же идеально работает на Adreno 200 (ATI Z430), Mali-300 и даже Vivante GC-600!
Пусть круг задач и не слишком широкий, но смартфон всё равно очень интересный и крутой :)
❯ Заключение
Вот такая статья о восстановлении необычного смартфона из 2011 года у нас с вами получилось. Надеюсь, вам было интересно и полученные знания вам пригодятся. Ну а если будут какие-то вопросы по поводу возможности переделки смартфона на загрузку с MicroSD - не стесняйтесь спрашивать в комментариях!
А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет - подписывайтесь на мой 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!). Всем большое спасибо за донаты!
Первая печать композитом
Доброго времени суток, мои 69 подписчиков и пикабушники, кто интересуется 3Д печатью.
Сегодня знаменательный для меня день, я впервые попробовал композит PA6-GF30, нейлон с содержанием стекловолокон.
Впервые воспользовался таймлапсом на Qidi.
Дал детали остыть в камере, которую, кстати, я утеплил, о чём писал в своём телеграм канале.
Камера остывала с 60⁰С до 30⁰С один час! У принтера, который в стоке махом остывал.
Это лучший наглядный пример моей доработки.
Далее промерил изделие на усадку:
А усадки и нет. Размеры 20 и 30 мм задавал при моделировании изделия.
Считаю, что первая печать композитом удалась! Филамент фирмы Nova с озона. Принтер Qidi Q1 Pro, Сопло 0.6 300⁰С, стол 110⁰С, пластина с текстолитовым покрытием. Материал абразивен, подавал его из сушилки без трубок, в них филамент пытался застрять.
P.S.: на Elegoo Neptune 4 Plus сделал новую систему подачи филамента, убрав этот держатель:
Напечатал такое:
В очередной раз выручили подшипники 608z с озона по 250 за десяток.
З.Ы.: В конце недели планирую опробовать печать РС, он же поликарбонат. Кому интересна тема, кто тоже начинает проходить этот путь с 3д печатью, да и более опытных, приглашаю в свой ТГ канал, где больше авторского контента на тему печати: https://t.me/letspr1nt
Как я купил ноутбук для дошколят на MIPS-процессоре и все заверте…
Осторожно: в статье я постарался подробно и простым языком написать об аппаратном моддинге и ковыряние в железе, хакинге 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:
getty -l /login.sh 115200 tty0
...
#!/bin/sh
clear
/bin/login
После этого у меня начал нормально работать терминал! Правда, без скроллинга... пока не знаю почему. Теперь, когда у нас есть рутовая консоль и полноценный busybox, можно немного поэкспериментировать!
❯ Портируем эмуляторы
Далее я решил попробовать портировать эмуляторы с родственной данному ноутбуку Dingoo A320. В родной системе почти никакие эмуляторы не работали даже после подкидывания всех необходимых библиотек (в том числе и uclibc с SDL), однако после chroot'а в систему от Dingoo A320 у меня запустились часть эмуляторов. Однако в этом ноутбуке используется оригинальный непропатченный кривой драйвер фреймбуфера, который постоянно сыпет ошибками и не умеет работать в виртуальном разрешении. Из-за этого, часть эмуляторов выглядело... примерно вот так:
А часть вот так:
И я понял что без патчей в исходном коде не обойтись. Для сборки программ под старые 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());
screen = SDL_CreateRGBSurface(0, 160, 144, 16, 0, 0, 0, 0);
И ожидаемо ничего не получил, никто растягивать картинку за меня не будет! Поэтому я сначала написал простейшую функцию скейлинга картинки на флоатах с заранее посчитанным шагом интерполяции, затем оптимизировал её до 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];
uint16_t* pixel = &srcSurface->pixels[(scale.y * srcSurface->w + scale.x)];
uint16_t* dstPixel = &dstSurface->pixels[(i * dstSurface->w + j)];
*dstPixel = *pixel;
}
}
}
Крайний вариант был самым быстрым, однако в нативном разрешении ноутбука я получил примерно 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 году. После сборки и копирования рутфс, необходимо было выполнить вторую стадию установки системы, а именно фактическую распаковку и установку пакетов:
Далее мне удалось подкинуть некоторые пакеты и даже попытаться запустить иксы (на 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!). Всем большое спасибо за донаты!
Самый первый Android-смартфон в мире: каким был HTC Dream? Пишем приложения для Android 1.0 в 2024
Друзья! А знаете ли вы, какой Android-смартфон был первым в мире и как он выглядел? А я теперь не просто знаю, но и могу физически пощупать настоящую легенду своих лет — HTC Dream, также известный как T-Mobile G1. Однако G1 был мне интересен не только как коллекционный девайс для гика, но и потенциально-диковинное устройство для разработки приложений: ведь в современном мире принято повышать минимальную версию Android для работы тех или иных программ, а я свои буду… понижать, чтобы они смогли заработать даже на самой первой версии Android! В сегодняшней статье мы с вами: посмотрим на Dream и постараемся понять, почему HTC выбрала именно Android, неудачно перепакуем аккумулятор, бэкпортируем мои клиенты ВК, YouTube и Telegram и посмотрим, правда ли старичок «бесполезен», как говорят в ретро-обзорах или что-то ещё да может! Интересно? Тогда добро пожаловать под кат!
❯ Введение
Как я уже говорил в вводной части статьи, HTC Dream стал первым массовым Android-смартфоном в мире. Конечно, до этого момента в Google были гораздо более ранние прототипы, которые использовались при разработке устройства и что интересно — они тоже были разработаны HTC. Однако тот прототип был совершенно не похож даже на G1: это был QWERTY-моноблок с дисплеем 320x240, где всё управление происходило кнопками, а в качестве основы устройства скорее всего был выбран HTC Cavalier:
И вот, 22 октября 2008 года в свет выходит HTC Dream у американского оператора T-Mobile, который гики сразу смели с виртуальных и физических магазинных полок. Стоит ли говорить о том, что смартфон имел огромный спрос не только на локальном рынке в США, но и за рубежом? Серым импортом даже в СНГ ввозилось довольно немало HTC Dream: правда сейчас их живых осталось не так уж и много :( Кстати, забавно но факт: первые серийные G1 не имели такой открытости и возможности модификации системы, которой гордятся владельцы Android-смартфонов в спорах с владельцами iPhone: даже adb был доступен только на специальной версии G1 — Android Dev Phone 1!
Но почему HTC выбрала именно Android? Чтобы ответить на этот вопрос, нужно вернуться в 2008 год, когда на рынке главенствовала Nokia со своим свежим флагманом 5800 XpressMusic. В те годы, выбор операционных систем для смартфонов был крайне невелик: по сути, производителям были доступны только две системы.
Первой была Windows Mobile, которая была хороша во всем: у неё была неплохая архитектура под капотом, настоящая многозадачность и работала она сносно даже на очень слабом железе. Но поскольку это Microsoft, куда же без косяков: система была нестабильной и могла повиснуть в самый неудачный момент (думаю, многие читатели помнят такие сокращения как ХР и ББ), её интерфейс не был анимированным (и не «модным») от слова совсем, а сама система была адаптирована лишь под стилус. Но тем не менее, мобильная винда продержалась на рынке смартфонов до 2010 года, как раз к моменту выхода Windows Phone 7… но это уже совсем другая история.
Второй системой была, конечно же, Symbian, которая на первый взгляд была хорошей: довольно удобный и привычный для многих интерфейс, очень хорошая оптимизация для слабых устройств и большая база самых разных приложений. Но её недостатки были гораздо более серьёзные, чем у мобильной винды: система лицензировалась не абы кому, а только участникам Symbian Foundation и её архитектура под капотом была просто отвратительной. Если кто-то из вас когда-то занимался разработкой нативных приложений под Symbian — вы наверняка вспомните эту боль.
И вот, в 2008 году на сцену выходит новичок на мобильном рынке — поисковой гигант Google со своей мобильной операционной системой Android, которая предлагала обширный функционал, нормальную среду для разработчиков и полноценный магазин приложений и делала это всё почти бесплатно: исходный код системы был опубликован под свободной лицензией и любой производитель мог использовать Android на своём устройстве полностью бесплатно, доплачивая лишь за необходимость установки Google-сервисов.
Учитывая, что внутренние прототипы Google разрабатывала тоже HTC, немудрено почему именно Тайваньская компания выпустила первый Android-смартфон в мире. Увидев успех HTC Dream, крупные гиганты также потянулись на рынок Android-смартфонов: Samsung представила I7500 Galaxy, давший старт одноименной линейке, Motorola представила CLIQ, а затем и легендарный Milestone, а LG — весьма интересную модель под названием GW620. Уже в 2009 году, HTC представила Magic, который Google раздавала на конференции Google I/O в Сан-Франциско всем участникам конференции и один из таких тоже оказался в моей коллекции!
Свой HTC Dream я получил совсем недавно из Китая. Я давно хотел обзавестись «дримкой» и недавно мне написал читатель Роман, предложив помощь в поиске интересующих меня девайсов на китайских аналогах авито. При этом Роман брал на себя все заморочки с организацией доставки из Китая в Москву, а из Москвы уже в мой город — Ейск, за что ему огромное спасибо. HTC Dream обошёлся мне в 2.200 рублей, а Moto Milestone — около 500 и оба устройства полностью рабочие!
Но перед тем как мы сможем перейти к фактическому обзору, нашу дримку нужно обслужить: у неё вспух аккумулятор, который уже никуда не годится, поэтому остаётся лишь его перепаковать. Перепаковка аккумулятора — это процесс замены литиевой банки на другую с сохранением оригинального контроллера и при возможности корпуса АКБ. И в моём случае произошёл определенный фейл…
❯ Перепаковываем аккумулятор
Сначала аккумулятор необходимо разобрать. Для многих этот процесс может показаться опасным, но я уверяю авс — если не тыкать в аккумулятор отвертками и не замыкать ничего в цепи BMS-контроллера и самого аккумулятора, всё будет нормально. В моём случае, разбирается он просто — отклеиваем бумажки, формирующие корпус и аккуратно вытаскиваем банку с контроллером из пластиковой основы.
Затем выпаиваем плату защиты, известную также как BMS (Battery Management System) и идём искать подходящую банку. Можно установить как Б/У с другого телефона, так и новую, подходящую по размерам. Новой банки таких габаритов у меня не было, поэтому я решил воткнуть туда от АКБ для телефона LG.
Но произошёл определенный нюанс: параллельно со статьей я готовил и видео, подробно снимая весь процесс перепаковки. В момент пайки отвлекся на видоискатель, перевернул бмску ввеврх-ногами и… переполюсовал аккум до входа в BMS. Результат: со смартфоном всё хорошо (на входе VBat в телефонах всегда стоит защита от переполюсовки и КЗ. Кроме того, КП способен выдержать до ~5.5В на VBat, но не более), а в контроллере BMS-дырка :(
Сначала я думал вырезать эту часть статьи, но потом решил, что авторы — тоже люди и у них тоже бывают определенные фейлы :) Но гештальт не закрыт и я обязательно выпущу ещё более подробный гайд о перепаковке аккумуляторов. В дримку можно установить BL-4C от Нокии, однако заряжаться он будет только до загрузки ядра, поэтому зарядки у нас по факту пока что нет. Ну ничего, думаю ещё найдется аккумулятор!
❯ Бэкпортируем приложения
Друзья! После статей и видео о разработке самопальных приложений, мне часто пишут в личку с вопросами можно ли портировать приложения современных сервисов на смартфоны прошлых лет. И здесь ответ неутешителен: нет, без исходного кода, в том числе и нативных зависимостей ничего портировтаь так просто не выйдет. Мои приложения изначально писались так, чтобы не зависеть вообще ни от чего кроме голого API Android (ни AppCompat, ни каких либо иных зависимостей) и при этом по возможности не используются даже фичи Android из 2.x. Именно поэтому мне свои приложения портировать гораздо проще.
Современная студия уже не умеет собирать приложения для 2.1 и ниже: примерно в 2.2 немного поменялся бинарный формат XML, из-за чего десериализатор в более старых версиях Android валится с ошибкой. Однако приложения, собранные в Android Studio образца 2017 прекрасно работают и на Motorola Milestone!
Поэтому всё, что нам остаётся — это лишь импортировать код приложений в более старую студию (в моём случае 2.3.2), поставить minSDK на 1 (Android 1.0) и собрать приложение… А ведь даже отладчик работает! Конечно есть определенные нюансы: например, в Android 1.0 нет атрибута onClick, дабы быстро повесить обработчик кнопки в Design-time и другие мелкие «приколы» той версии Android.
Приложения бэкпортированы, а значит можно попробовать, каков же экспиренс от использования первого Android-смартфона в 2024 году!
❯ Обзор
Конструктивно смартфон очень интересный. Несмотря на то, что корпус отюндь не выполнен из премиальных материалов, смартфон лежит в руке классно, но самое приятное ощущение — это открыть клавиатуру путём сдвига QWERTY-слайдера…
Механизм работает идеально даже спустя 16 лет после выхода устройства! Нижняя панель кнопок отличается наличием трекболла: специального колёсика, выполняющего роль DPad'а (стрелок). Трекболл долгое время был фишкой HTC, да и в целом действительно довольно удобным решением в определенных ситуациях, учитывая что первые ёмкостные тачскрины не были надёжными от слова совсем.
Изначально производительность смартфона меня не устроила и я решил скинуть его до заводских настроек. Но я не учёл один факт: в то время, Google почему-то пыталась косить под Apple и позволяла активировать смартфон только при наличии активного тарифного плана с пакетом интернета и симкой T-Mobile! Поэтому пришлось быстренько откатываться до прошивки RC29 (Android 1.0) и обходить активацию с помощью adb. Инженеры HTC оставили рутовую (!) консоль, которая работает из всей системы, когда мы просто пишем что-то на аппаратной клавиатуре! Попробуйте написать Enter -> reboot -> Enter на своей дримке!
После включения, нас сразу встречает оригинальный гугловский лаунчер, который может быть знаком читателям, которые пользовались первыми Android-смартфонами. Менюшка здесь открывается путём свайпа нижней шторки вверх… но поскольку в те годы, всё 2D в Android рисовалось софтварно, то плавность была далека от айфона. Но всё равно вполне шустренько.
Среди стандартных приложений был почти весь джентльменский набор: и полноценный браузер, и почтовый клиент, и удобный плеер. А недостающие приложения типа клиента твиттера или аськи допиливали сторонние разработчики, так что спустя годик-два после выхода, «дримкой» всё ещё вполне можно было пользоваться.
Начинаем с браузера. В качестве браузерного движка, Google решили выбрать в своё время WebKit, который исопльзовался в дроиде вплоть до 5.0, когда WebView и его фактическую реализацию разделили, попутно заменив WebKit на Chromium. Сейчас эта версия, увы, уже почти ничего не может: ни Хабр почитать, ни Пикабу… конечно сторонние клиенты могли бы решить эту проблему, но оба сайта не хотят предоставлять никакого публичного апи…
Браузер до 2.1 даже верхней шторки не имел и переходить по URL приходилось нажимая кнопку контекстного меню и только затем Go:
До сих пор на устройстве работает мой любимый клиент почты — тот, который встроенный. Если ставить галки «SSL If Required», что позволяет игнорировать ошибки SSL, то он работает замечательно. Клавиатура у Dream замечательно подходит для переписок — отдельный ряд с цифрами и общее расположение кнопок этому очень и очень способствуют!
Работают даже карты, позволяя сделать из смартфона с GPS в эдакий навигатор без навигации. Но карты работают очень шустро, даже поиск есть, а если вдруг Google Maps со временем отвалится, то я и вьювер OSM запилю :)
Давайте же перейдем нашим приложениям! Начинаем с моего клиента YouTube, который здесь работает, но из-за значительно более «белой» светлой темы в 1.x, надписи не видно от слова совсем.
Клиент ВК здесь работает без каких либо проблем, но на «не свежей» системе заметно подлагивает. В целом, производительность всё равно далека даже от iPhone 3G в те же годы:
А как насчёт Telegram? Смогу ли я написать пост в свой Telegram-канал с него, учитывая такую крутую и классную QWERTY-клавиатуру?
❯ Заключение
Вот такой материал про первый Android-смартфон в мире у нас получился. Как видим, не совсем уж он и бесполезен и при определенном желании всё ещё может послужить хорошую службу своему хозяину. Берегите свои дримки :)
Также у меня естьTelegram-канал, куда я выкладываю мысли касательно ремонта и программирования под гаджеты прошлых лет.
А когда у вас появился первый Android-смартфон? Пишите в комментариях!
Кстати, если у кого-то из читателей есть ненужные устройства (в том числе с косяками) или дешевые китайские подделки на айфоны/айпады/макбуки и другие брендовые девайсы будучи нерабочими, тормозящими, или окирпиченными и вам не хотелось бы выкидывать их на свалку, а наоборот, отдать их в хорошие руки и увидеть про них статью — пишите мне в Telegram или в комментах! Готов в том числе и купить их. Особенно ищу донора дисплея на китайскую реплику iPhone 11: мой ударник, контроллер дисплея калится и изображения нет :(
Длиннопост. Как вкатиться в Minecraft с модами обычному юзеру и не поседеть
■ Уже несколько лет занимаюсь моддингом в Minecraft и столкнулась с тем, что очень многие игроки не знают/заблуждаются даже о самых базовых вещах, которые таят в себе моды на Майнкрафт. Создание модов для меня одновременно и хобби и работа, но как бы то ни было я обожаю это дело и хочу помочь жителям Pikabu правильно раскрыть эту сторону данной прекрасной игры. Даже если вы никогда сами не играли в Minecraft или просто хотите поиграть со своим чадом, я постараюсь написать статью максимально понятно и подробно для всех. Поверьте, когда-нибудь эта игра дойдёт и до вас. Ибо она проникает на любой компьютер рано или поздно. Зря что ли это самая продаваемая игра в мире?
Майна продали в 3 раза больше, чем Тетриса, а ГТА отстаёт на 105 000 копий. Да, тут можно поспорить о том что у Майна все виды изданий объединены или что не все лицензии были честно купленными, но сегодня не об этом.
■ Введение.
■ Майнкрафта существует два:
Java Edition - пк-версия написанная на языке Java. Именно здесь сосредоточено самое большое количество возможностей и фанатского контента. Некоторые умельцы могут запустить это и на андроиде, но лично я не советую этого делать.
Bedrock Edition - официальный порт Майнкрафта на языке C++, созданный в первую очередь для консолей и телефонов (вы могли знать его как Pocket Edition), однако также доступный и для пк (Windows 10 Edition). Здесь присутствует официальный маркетплейс - донатный магазин для покупки дополнений, приключенческих карт, текстур и прочего (на java этого нет).
■ В посте речь будет идти не про Bedrock, не про Windows 10, не про Pocket Edition, а именно про Java Minecraft. Другие издания это другой мир с другими модами, написанными на другом языке программирования. Так что, надеюсь, уже на этом этапе отвечу на один из вопросов серии "Почему [название мода] не портирован на Bedrock?/А когда ждать [название мода] на Bedrock?". В 99.9% случаев ответ - "Никогда!". Если вы видите похожий мод с Java-версии на Bedrock Edition, это почти гарантированно сделал кто-то, укравший ассеты и не имеющий отношение к оригинальному моду и автору, но не будем об этом.
■ Что касается версии игры, то данная статья актуальна для всех версий. Не важно, играете вы на олдовом 1.7.10 или на новеньком 1.20.1, с вероятностью в 90% всё сказанное тут будет актуально всем. Лично я играю и работаю на 1.19.2+ Forge.
■ Для тех кто не понимает о каких версиях идёт речь: в Minecraft, в отличии от многих других игр, игрок может в любой момент играть на любой из версий игры и обновления обычно выходят раз в полгода. У данной системы довольно много плюсов:
Желающие играть на старых версиях не обязаны становиться пиратами;
Заброшенные авторами моды не умирают вместе с очередным патчем/чихом разработчика игры;
Это отличный способ окунуться в историю игры и посмотреть как она выглядела в разное время;
Игрок может в любом момент поменять версию игры и не привязан ни к чему. Даже его сохранения и миры не будут потеряны (в некоторых случаях их даже переносить можно безопасно между версиями). Разработчикам Minecraft безразлично на какой версии вы сидите. Главное что вы играете в их игру.
■ К слову, это одна из причин по которой вы не увидите Minecraft в Steam. Те кто активно играют в стиме, могут и своих пунктов добавить о плюсах возможности играть на разных версиях, ибо во всех играх стима (сегодня 2024 год, если вдруг вы из будущего/другой вселенной где это есть) нет никакого выбора версий и все обязаны играть только на последней. Можете накидать мне за шиворот опровержений, но в подавляющем большинстве случаев без танцев с файлами/интернетами фиг вы нормально поиграете на старых патчах.
■ Кто такие эти ваши моды для Minecraft?
■ На одном лишь Curseforge существует более 164 000 модификаций от их авторов с более чем 53 миллиардами скачиваний (на момент написания статьи). И это только один сайт, а ведь есть ещё Planet Minecraft с огромным числом ресурспаков и набирающий популярность Modrith c 30 тысячами модификаций (на котором, правда, в основном перезаливы того что есть на Curseforge). Ни у одной другой игры нет столько модов и скачиваний. Если не верите, можете перепроверить сами ;)
■ Я также ненадолго заскакивала в моддинг по таким играм как Dwarf Fortresst (Steam), Sims 4, Skyrim, Gothic, Oxygen not included, Going Medieval, Baldur Gate 3 и могу с уверенностью сказать что, помимо цифр, в Майнкрафте также одна из самых удобных инфраструктур для моддинга:
Централизованность. В последнее время этот плюс немного разваливается, т.к. какие-то гении решили, что "а давайте бахнем ещё десяток модлоадеров и рассосёмся по новым сайтам!". Честно желаю всем таким сайтам и модлоадерам сгинуть. Кто пытался самостоятельно собирать моды на Симс 4, поймёт какая это срака. Миллион личных сайтов, разные версии на разных сайтах и прочий кошмар. Я честно сдалась тогда и купила модпак за 100 рублей у какой-то девушки с Бусти. Надеюсь, Майнкрафт никогда до такого не дойдёт.
Удобные лаунчеры со ВСЕМИ модами. И не просто с пиратскими перезаливами, а с авторскими регулярными обновлениями, которые легко скачать и которые автоматически адаптируются пот ваши настройки.
Доступ к любым версиям. Об этом я уже выше писала, но уточню что моды тоже доступны на разных версиях игры и когда автор решает перейти на новую, старая версия не удаляется, а все желающие могут продолжить с ней играть без проблем.
Очень много гайдов. Тут даже дополнять нечего. Гайдов по моддингу на Майнкрафт ОЧЕНЬ много. В большинстве игр, что я перечислила иногда даже 1 гугл документ с примерами не найти.
Отдельный жанр видео. Глобальные обзоры модов, игры на конкретных сборках с известными именами, десятки челленджей с модами и каналы, которые посвящены чисто модам. В других играх тоже есть такие видео, но отдельные каналы им посвящают очень редко, а в Майнкрафте можно набрать сотни каналов, которые рассказывают только про моды на разных языках. К слову, передаю привет всем зрителям Nocube, он редактор этой статьи :)





Пруффы что я не балаболка и считать умею :) Модринт считала так: взяла количество страниц в каждой категории моддинга и умножила на 20 (количество модов на каждой странице). Да, не идеальная точность, но посчитайте лучше, если вам надо.
■ Как понять что есть что и с чем его едят? В комьюнити присутствует настоящий хаос в плане того, как и что называть, поэтому дабы в дальнейшем избежать путаницы, сразу обозначу что лично для меня означают те или иные термины. Осторожно, сейчас будет много букаф!
Ванилла (Vanilla) - весь функционал, контент и стиль, заложенный в чистом Майнкрафте. Ваниллой может считаться только оригинальная игра без изменений.
Ванильный стиль (Vanilla Style) - графический и функциональный стиль модификаций, который подразумевает подражание эстетике оригинального Minecraft. Порой эту фразу используют просто для похвалы ("Это выглядит очень ванильно!") или отображения своей позиции ("Моды не должны выделяться из стиля игры, быть ванильными", "Этот мод в ванильном стиле"). Из-за того что словосочетание "ванильный стиль" часто сокращают до слова "ванилла" в диалоге, в коммьюнити часто бывают споры насчёт этого. Понятие в целом очень расплывчатое и зависит от личных тараканов в голове.
Модификация (Modification) - абсолютно любой скачанный контент, предназначенный для расширения или изменения функций и контента игры. Чтобы считаться модификацией, контент должен быть именно установлен в игру извне. Всё созданное внутри игры без дополнительной установки не является модификацией.
Мод (Mod) - тип модификации, который для установки помещается в папку mods. Может быть клиентским или серверным. Клиентские моды работают только на стороне клиента (игрока) и не требуют добавления на сервер для работы. Для работы любого мода требуется загрузчик модов (в основном Forge или Fabric). В последнее время много разговоров про Neoforge как замену Forge для новейших версий выше 1.20 (там произошла какая-то великая драма).
API / Библиотека (API/Library) - категория модов, которые не добавляют контент в игру, но используются другими модами. Без этих библиотек некоторые моды не будут работать. О том что моду требуется что-то дополнительно устанавливать обычно указано на официальной странице мода. Если проигнорировать это, то вы попросту не сможете зайти в игру, но на загрузочном экране скорее всего будет указано, какому моду чего не хватает (актуально в основном для новых версий).
Аддон (Addon) - тип мода, который меняет контент другого мода или дополняет его. Не работает без основного мода. В Bedrock Edition имеет другое значение и является аналогом Мода. Не путайте!
Датапак (Datapack) - тип модификации, который для установки помещается в папку datapacks. Влияет на всё связанное с данными (data) - рецепты крафта, таблицы лута, теги, структуры, достижения, и так далее. Некоторые моды помещают в дату свои настройки. Работает только на стороне сервера. Т.е. игрок без модификаций может подключиться к такому серверу ничего не устанавливая, но его игра будет сильно отличаться от ванильной во всём, кроме графики (потому что графика это пункт ниже).
Пакет Ресурсов или Ресурспак (Resourcepack) - тип модификации, который для установки помещается в папку resourcepacks. Он может изменять текстуры, модели, анимации, языковые файлы, звуки и прочие вещи, которые отражаются на стороне клиента. Например, игрок может поставить себе ресурспак, который превращает все блоки в лица Стетхема, а названия предметов в его цитаты, но при подключении на сервер другие игроки этого не увидят, потому что у них нет этого ресурспака. Помимо этого существуют ресурспаки имитирующие функции некоторых модов, вроде читерского X-Ray.
Пакет Текстур или Текстурпак (Texturepack) - предок ресурспаков на старых версиях Майнкрафта, в которых можно было менять только текстуры. Но хоть с версии 1.6.1 ресурспаки и заменили собой текстурпаки, название до сих пор активно используется в комьюнити для обозначения ресурспаков меняющих только текстуры, в том числе и на новейших версиях игры.
Плагин (Plugin) - тип модификации в основном предназначенный для серверов, для установки помещается в папку plugins. Для работы требуется установка загрузчика плагинов (в основном Bukkit или Spigot). Все плагины работают по аналогии с датапаками (игрокам не нужно ничего устанавливать), но намного более продвинутые и требуют написания кода. Моды и плагины не совместимы друг с другом и все ядра, которые пытаются соединить их, чаще всего работают через Ж.
Карта / Мир (Map/Saves) - тип модификаций, которые для установки помещаются в папку saves. Чаще всего это миры созданные для выживания, паркура, решения головоломок, прохождения испытаний, или содержащие строения (дома, локации, города, рукотворный ландшафт и прочие постройки игроков).
Шейдер (Shader) - тип модификации, который для установки помещается в папку shaderpacks. Требует установки OptiFine, Oculus или Iris. Меняет рендер, делая игру более красивой с помощью освещения, физики, отражений и прочего. Работает на стороне клиента и зачастую имеет большой набор настроек графики, как в красивых и ресурсоёмких играх (цветокоррекция, яркость лучей, размытие, глубина резкости, насыщенность цветов и прочее).
Модпак (Global Modpack) - набор модификаций, объединённых общей темой с глубокой проработкой, откорректированным балансом контента и даже квестовыми линиями или полноценным фоновым сюжетом.
Подборка / Сборка модов (на английском тоже Modpack) - более любительская версия модпака без какой-либо общей задумки и проработки, проще говоря сборная солянка. В английском языке не имеет отдельного слова, и для отделения модпака от сборок чаще всего пишут приставку "global" в описании (глобальный модпак).
■ Где эти ваши модификации искать?
■ Вкратце: только на Curseforge, Modrith и Planet Minecraft. Кто владеет основами английского или умеет пользоваться встроенным в браузер переводчиком - welcome, остальным сочувствую.
■ Основной источник модов это Curseforge. Тут содержится 90% всех модификаций на Minecraft, которые потом растекаются по другим площадкам. Ещё 9% находятся в PlanetMinecraft (в основном ресурспаки и карты/сохранения) и Modrinth (в основном перезаливы с Curseforge, но некоторые авторы полностью перешли туда) или на личных сайтах авторов. Все остальные сайты в 99% случаев являются пиратскими и не платят никаких отчислений авторам, а также не получают их разрешение на распространение. Помню свой шок, когда уже спустя пару минут после публикации своего первого мода, он был перезалит с очень тупыми описаниями на сотни левых сайтов, а мне писали жалобы в духе "ваша х*ня, не работает". На некоторых особо ушлых сайтах даже сразу были вшиты вирусняки. Сказать что я была в **уе, это ничего не сказать.
■ Я и другие разработчики до сих пор считаем что Яндекс имеет какой-то корыстный интерес в том чтобы не показывать Curseforge, т.к. Гугл абсолютно всегда показывает оригинальный источник мода, а у Яндекса его не найти даже если специально написать "Название мода+Curseforge". Гораздо чаще вылезает пиратское зеркало сайта под названием Cursefire, чем сам Curseforge. А ещё чаще пиратские сайты. Какие конкретно называть не буду, вы их и без меня знаете.
■ Вопреки распространённому среди юзеров мнению, Curseforge не имеет никакого отношения к Forge. Они абсолютно никак не связаны. У них разные разработчики, разные владельцы, разный смысл. Первый это сайт-агрегатор/лаунчер, а второй это загрузчик модов (ModLoader) для работы самих модов. Этих модлоадеров в последнее время развелось великое множество.
■ Используйте оригинальные источники, если хотите получить качественный контент и поддержать разработчиков. Мы все очень стараемся для вас, чтобы сделать Minecraft ещё круче и поделиться своими увлечениями. Авторы на Curseforge и Modrith (а также на Nexus Mods и некоторых других) получают небольшие денежные отчисления за ваши скачивания, а вы получаете годный свежий контент без риска подхватить вирусы. И нет, я не советую Curseforge/Modrith потому что "хачу деняк". Во-первых, эти лаунчеры бесплатны (даже для пиратов), во-вторых, кто такие эти ваши деньги? Если вы заметили, я ваще нигде не упомянула какие моды разрабатываю (как минимум потому что вы точно не аудитория моих модов, без обид). Я советую эти сайты/лаунчеры потому что это удобно и безопасно. Но если вы считаете те 20$ в месяц, которые я получаю за скачивания моих модов (и которые даже не могу вывести без помощи иностранных друзей), поводом вам врать/преукрашивать - мне грустно за вас. Единственный реальный "минус", который есть у этих платформ, это английский язык. Других причин использовать ру-майны/инсайды лично я не вижу.
■ Вы меня заинтересовали и мне приглянулась пара модов! Что дальше?
■ Вкратце: купить Майкрафт (если нет), установить чистый Майнкрафт, установить лаунчер, найти моды, установить моды/модпаки, нажать "играть", войти в аккаунт Майнкрафта (один раз), молиться чтобы всё заработало.
■ Если проблему "где купить официальную игру" вы решили (не важно каким способом, даже б/у аккаунт за 200 рублей подойдёт), то перед вами будет стоять выбор между:
Самостоятельно извращаться с установкой модификаций, самому устанавливать Forge, искать правильные версии модов, устанавливать библиотеки этих модов и следить за обновлениями вручную.
Воспользоваться готовыми лаунчерами, которые максимально упростят вам жизнь.
■ Лично я категорически советую второй вариант и буду рассказывать именно о нём, т.к. тратить время на первый вариант это надо иметь дофига лишнего времени (хотя зато вы научитесь лучше понимать как это устроено, но оно вам надо?). Может быть, сделаю отдельный гайд как официально скачивать моды минуя установку лаунчера, но честно не вижу в этом ни единого профита для юзера, кроме самого факта что "меньше программ = лучше" (нет, лол).
■ Выбрав второй стул, встаёт другой выбор: какой лаунчер? Официальных лаунчеров не так много: Curseforge, GDLauncher, Modrith, MultiMC, Prism Launcher и несколько других. Что значит официальный? Это означает, что разработчик лаунчера уважает разработчиков Minecraft и не встраивает чужую игру в себя, добавляя туда пару десятков датамайнеров и рекламы донатных серверов. Официальные лаунчеры используют API оригинального лаунчера Minecraft и не нарушают их лицензионное соглашение (а также лицензионные соглашения модификаций). Будет смешно, если среди перечисленных мной лаунчеров будут те, которые под это описание не подходят. Сорри, если да.
■ Лично я использую уже много лет Curseforge и не жалуюсь, но уверена даже на Пикабу сейчас прибегут люди и скажут что я устаревшая бабка и надо использовать [вставьте один из десятков лаунчеров]. На здоровье пользуйтесь любыми удобными вам лаунчерами, всё равно большую часть модов ваши лаунчеры будут скачивать через API с Curseforge, а оставшиеся пару модов с Modrith :)
■ A, B, C, D, Т, Legacy и прочие любимые многими русскоязычными игроками лаунчеры с уже установленной копией игры являются ПИРАТСКИМИ. Уточняю ещё раз просто потому что не все игроки в принципе знают об этом и часто удивляются "а что минкруфт не бесплатная игра и её надо покупать??" Обязательно раза четыре в месяц сталкиваюсь с подобными сообщениями.
■ Рассмотрим ситуацию где вы уже установили игру, прислушались к моему совету и установили Curseforge лаунчер. Инструкцию по установке писать не буду, думаю, сами справитесь! Если вы уже устанавливали игру и пытались ставить моды, удалите всё и оставьте игру девственно чистой (в лаунчере есть Repair Installation). Если всё правильно вас встретит такая картина:
■ Для тех кому хочется "ванильную игру + пару модов" жмакайте на Create Custom Profile. Вам предложит выбрать версию Майнкрафта, Modloader и прочие мелочи. Если вы вообще не знаете что выбирать, сделайте как у меня на картинке: Название + 1.19.2 + Forge.
■ Подождав пару минут установки, вам будет доступно добавление модов в этот профиль (об этом дальше). В будущем вы можете создавать сколько угодно профилей с разными наборами модов. Мой Курсефордж в данный момент выглядит вообще вот так:
■ Но вернёмся к вашему пустому профилю. Откройте его и нажмите на вот эту непримечательную кнопку Add More Content.
■ Тут вам будут доступны только те моды, которые работают на настройках, указанных при создании профиля. Это первое удобство использования лаунчера - вам не нужно понимать какой мод работает с вашей версией, а какой нет.
■ Просто для теста добавила:
AppleSkin (для отображения показателей еды).
Farmer's Delight (мод на кулинарию и фермерство).
JEI (мод для отображения рецептов всех предметов, имхо, играть без этого мода в майн невозможно, не просто так это самый скачиваемый мод на игру).
Mouse Tweaks (удобство управления инвентарём).
Quark (тысяча мелочей, которых не хватает в оригинальной игре).
■ Внимательный пользователь мог заметить что у меня также появился AutoRegLib. Это второе удобство использования лаунчера: вам не требуется устанавливать библиотеки модов. Если разработчик не биба и указал библиотеку в разделе "зависимых модов", она сразу же установится автоматически. Например, очень многие моды требуют Geckolib, а AutoRegLib требуется для Quark.
■ Таким же способом вы можете устанавливать ресурспаки, шейдеры и миры, а можете просто нажать кнопку "играть", зайти на лицуху и начать играть! В принципе уже на этот моменте вы знаете всё необходимое чтобы поиграть, но если вы хотите большего, читайте дальше!
■ "Можно чтобы игра выглядела красиво? А то кубики эти..."
■ Кратко: ресурспаки устанавливаются также как моды (смотрите скриншот выше), шейдеры тоже можно скачать в лаунчере, но для них нужен Optifine (до 1.16.5 Forge), Iris (для Fabric) или Oculus (для 1.16.5+ Forge).
■ За красоту отвечают шейдеры и ресурспаки. В старых версиях у игроков есть только OptiFine, но начиная с версии 1.16.5 очень многие разработчики модов стали отказываться от поддержки этого мода. Причин тут много:
Разработчик OptiFine категорически против размещать свой мод на удобных площадках и требует скачивать только со своего сайта, а это означает что создатели легальных модпаков вынуждены просить игроков отдельно устанавливать этот мод.
Исходный код OptiFine закрыт, что не позволяет мододелам добавлять совместимость с этим модом. В данный момент это всем просто надоело и у некоторых модов вы можете увидеть плашку "НЕСОВМЕСТИМО С ОПТИФАЙН". Меня лично тоже в какой-то момент заколебало исправлять бесчисленные баги оптифайна и я отказалась от поддержки этого мода.
Излишняя перегруженность. OptiFine это не только шейдеры, но и огромное число других функций, которые вам вообще могут быть не нужны - оптимизация, переписывание кода оригинальной игры, изменение рендера под усложнённые ресурспаки, динамическое освещение, поддержка HD текстур и прочее.
■ "Но оптимизация это же хорошо!" - можете воскликнуть вы. Увы, но нет. Я придерживаюсь мнения что бездумно оптимизировать игру всем подряд не имеет смысла (особенно на новых версиях, за старые не ручаюсь). Вы только испортите свою игру или по незнанию установите какой-нибудь тролль-мод, который просто редактирует счётчик фпс ибо в комьюнити любят троллить моды на оптимизацию :)
■ Так что если вы играете на новых версиях, рекомендую лучше использовать Oculus для Forge или Iris для Fabric. А вот если вам нужны другие функции оптифайна, добро пожаловать в эту табличку: https://github.com/LambdAurora/optifine_alternatives. Заодно познакомитесь с интерфейсом гитхаба. Если вы будете серьёзно заниматься модами на Майкрафт, вам придётся видеть этот сайт каждый день на завтрак, обед и ужин. Здесь хранится код большинства модов, написаны вики, инструкции и содержится форма для отправки багрепортов. О них по хорошему вообще надо отдельную статью писать.
■ А что насчёт ресурспаков, то тут на вкус и цвет. Лично я не люблю когда абсолютно все текстуры в игре переделаны (особенно предметы) и вдвойне не люблю любые текстуры превышающие ванильные 16х16. Во-первых, это не красиво, во-вторых, все моды созданы с расчётом на игру с ванильными текстурами.
■ Чтобы добавить ресурспак, вам надо вернуться туда где вы добавляли моды и переключиться на Resource Packs.
■ Вот так это выглядит:
Очень похоже на поиск модов! Раздел с ресурспаками. Осторожно, помимо ресурспаков тут могут быть и датапаки, которые нужно устанавливать вручную (инструкция написана внутри каждого датапака).
■ "Но что если я не хочу этот установочный цирк с модами/ресурспаками/датапаками/оптимизацией и прочим? Есть готовые варианты где нажал кнопочку и всё готово???"
■ Кратко: Да, это называется Модпак. Не забудьте выделить оперативную память вручную.
■ Модпаки это вариант для самых ленивых и неопытных. Ну или тех, кто хочет попробовать что-то более серьёзное, чем ванильная игра с рандомным набором модов без настройки. Для их установки вернитесь к списку всех ваших профилей и нажмите сюда (Browse):
■ На выбор вам будет предоставлено бесчисленное множество всякого. На любую тему, на любой уровень сложности, на любой компьютер. Тут есть всё начиная от "идеально оптимизированных паков на картофельные компухтеры" до гигантов, которые переворачивают игру с ног на голову и превращают её из песочницы-выживания в другой жанр. Для олдов: на Curseforge вы можете найти модпаки от той самой команды FTB Team.
■ ОЧЕНЬ ВАЖНО: ЧИТАЙТЕ ОПИСАНИЕ МОДПАКА!!! Там может быть сказаны дополнительные пункты установки. Например, очень часто модпаки требуют выделить им больше оперативной памяти и делается это только вручную! Обычно просят 6-8 гигов, но некоторые могут запросить 16 гигов или попросить установить какой-то мод. НЕ используйте галочку Use System Memory Settings. Инструкция на картинке ниже:
Как выделить больше оперативной памяти в профиле Curseforge. Это действие нужно делать в КАЖДОМ профиле.
■ Если же вы хотите найти модпак, в котором есть какой-то конкретный мод, используйте сайт https://www.modpackindex.com. Частенько юзаю чтобы смотреть кто и куда добавлял мои моды :)
■ Мне не нравится X в моде Y. Это реально как-то поменять?
■ Кратко: Да, у многих модов есть конфиги, которые можно найти в папке config и serverconfig.
■ У меня уже лимит символов в Пикабу поджимает, так что сорян, тему не могу раскрыть подробнее. Рекомендую установить Notepad++ или использовать обычный блокнот для открытия этих файлов.





Карусель для поиска конфигов!
■ Какие моды устанавливать?
■ Кратко: Любые.
■ Серьёзно, вы можете ставить абсолютно любые моды какие пожелаете. Единственный совет. Нет. КАТЕГОРИЧЕСКУЮ РЕКОМЕНДАЦИЮ, которую я могу дать это установить Just Enough Items (JEI). Это САМЫЙ важный мод для игры, который позволяет "гуглить" рецепты не отвлекаясь на википедию. Существование этого мода одна из причин почему вы можете не увидеть рецепты в описании модов. Использование этого мода это что-то вроде обязательного условия в невидимом сертификате, который вы подписываете когда у вас хотя бы промелькнёт мысль поиграть с модами. Просто для понимания: у JEI 300 миллионов скачиваний. Это больше, чем у некоторых AAA игр.
■ На новых версиях стал набирать популярность REI (аналог JEI). У него есть больше функций, но и разобраться в нём сложнее. Лично я до сих пор больше предпочитаю JEI.
■ Список полезных для оптимизации модов и багфиксов игры есть тут: https://github.com/TheUsefulLists/UsefulMods. Но помните что я говорила про оптимизацию ранее - не лезьте сюда, если не чувствуете себя уверенным пользователем.
■ Если вы когда-либо слышали что-то плохое о модах, созданных на MCreator или имеете устаревшую неприязнь к ним, я вас удивлю: на Мкреаторе ОГРОМНОЕ количество офигенных модов. На старых версиях у этого инструмента действительно был крайне скверный функционал, который не имеет ничего общего с современными версиями программы.
■ Лично мои моды созданы ручным кодом только по той причине, что это очень глобальные и сложные моды, но для большинства писать подобный код не требуется. Мы с друзьями в какой-то момент скинулись деньгами и отправили разработчику Mcreator большой донат с благодарностями просто чтобы поддержать. Учитывая количество говна, которое на него льётся, я до сих пор удивлена что он не бросил этот проект и довёл его до такого высокого уровня. А если вы из гильдии "Я не видел ни одного хорошего мода на Mcreator" - Нео, проснись, Mcreator моды уже имеют гораздо больше скачиваний, чем многие ваши самописы и лагают меньше :)
■ А как же гордые пираты??? Вы нас не уважаете?!
■ Нет, мы вам сочувствуем. Вас, дорогие мои, ждут невероятные танцы с бубнами, т.к. для пиратов не создано никакой удобной инфраструктуры и вы прокляты страдать с самостоятельным переносом папок из лаунчера Curseforge в [вставьте название своего пиратского лаунчера] или использовать крайне ненадёжные источники модов, с которых, в лучшем случае, вы скачаете перезалитые устаревшие версии.
■ Но так уж и быть, в конце статьи для любителей есть кактусы будет отдельный пункт как адаптировать сказанное :
1.Установите загрузчик модов с официального сайта или из того же лаунчера, который вы используете. Forge, Fabric, Quit, Neoforge. Не важно какой. Обратите внимание на версию модлоадера, чтобы в Curseforge потом выбрать именно эту версию.
2. Сделайте всё как было сказано выше до пункта "нажать играть" (установите Curseforge, выберите модпак/сделайте свой и так далее).
3. Найдите локальные файлы своего пиратского Майнкрафта. Обычно это .minecraft и выглядит это как-то так (не обращайте внимания на лишний мусор в папке):
4. Откройте локальные файлы вашего модпака в Curseforge.
5. Скопируйте АБСОЛЮТНО ВСЁ из Curseforge в ваш .minecraft
!!!!Пират, помни, модпак это НЕ ТОЛЬКО папка mods!!!! Для всех кто скидывает только mods из крупных чужих модпаков в аду есть отдельный котёл!
6. Если вы не заруинили никакой из этапов, можете попробовать включать игру.
■ Что может пойти не так? Да абсолютно всё! Не установили фордж, пиратский лаунчер подсунул не ту версию игры/форджа или подсунул оптифайн (который не совместим с большинством модов), вы не установили java 17 Open JDK (для новых версий и некоторых модов), не обновили amd драйвера, не выделили оперативную память, не установили библиотеку рандомного мода, установили не ту версию библиотеки, не перенесли ВСЕ папки, не удалили предыдущий модпак и так далее. Причин может быть столько что хватит на отдельную статью такого же размера и нет не просите меня её написать.


Ожидание/реальность
■ А чего такая статья маленькая? Тема не раскрыта!
■ У меня уже ушёл целый день на написание этой горы текста, так что на добавку у меня сил уже не будет. Пока писала в голове появилось ещё несколько интересных тем для дальнейшего раскрытия, но это уже совсем другая история. Может вы вообще хуями меня обложите и я спешно ретируюсь на свой гитхаб и буду писать там. А то прерывать месячное обсуждение разводов/измен с проблемами в школе и жопа-сиськами каким-то там Майнкрафтом это чревато.
■ Оставлю себе на заметку пару идей:
- Как делать хорошие официальные модпаки.
- Что такое оптимизация здорового человека.
- Как сделать выделенный сервер без мам, пап, LAN и хостинга.
- Настройка любых модов для самых умных.
- Как писать багрепорты, чтобы разработчик пожал вам руку, а не послал за крашлогом.




Плюс в карму тому, кто узнал из какой игры эти зверюги.
■ Если ждёте от меня телеграмм канал то хрен вам с маслом! Ненавижу этот мессенджер и сижу только в кошерном дискорде. Но я вам его не тоже дам! Лучше java программиста мне найдите с которым я смогу крутой новый мод про грифонов сделать! :з Уверена на миллион процентов, что это будет потрясающий шедевр.
P.s. Да, всё что есть на этом видео сделано мной.
Написано: Black Aures (это я)
Отредактировано/дополнено: Nocube
Redesigned 3.0(Silent Storm Sentinels) или блог разработки, часть 4
Доброго утречка, пикабушники! Ну, что, заждались? Сегодня у нас на повестке дня кое что из восстановленного, а на сладкое покажем новую систему! Так что наберитесь терпения, не пролистывайте просто так, отдайте должное проделанной работе и спешите под кат!
Начнем с того, что Silent Storm Sentinels делался NIval'ом в огромной спешке, а у разработчиков были вполне себе грандиозные задумки. Тут и там торчат нити в спешке отпоротых механик, от некоторых же(вроде как огня на подавление) остались одни лишь упоминания и потому восстановлению не подлежат.
Вырезались из игры и некоторые анимации, которые в полной мере вернутся в игру. Да что я вам рассказываю? Вон, все на роликах внизу очевидно!
Начнем с того, что в игру была возвращена оригинальная анимация для пистолетов. Причин тому несколько, одна из которых будет указана ниже.
Итак, все анимации стрейфа (сохранение взгляда при перемещении) для ПП, винтовок и пистолетов заменены на аналогичные типа "спецназ", которые просто лежали в ресурсах игры без дела. Из-за недоработок в системе игры они практически никогда не воспроизводились, и то их чаще всего можно было встретить в S2, в Часовых гораздо реже, и это при том, что активировались они лишь при определенных условиях.
Теперь же достаточно просто включить "стрейф" (нажав кнопку рядом с "Маскировкой"), и персонаж начнет перемещаться не только осторожно, но и эффектно.
Пара примеров:
Также следует добавить, что анимации ножа (стоя) заменены на анимации разведчика Оси для всех классов. Они просто лучше.
Ну и наконец перейдем к самым многочисленным правкам/добавлениям анимации.
Подавляющая часть анимаций бездействия (когда персонаж стоит или сидит с оружием в руках, а затем куда-нибудь посмотрит или поправит одежду и т.д.) не проигрывалась в игре вообще, при этом часть других срабатывала не так, как было задумано.
Всего отключенных анимаций в игре оказалось... около 100 штук. И теперь они включены и прекрасно работают, внося разнообразие в боевую обстановку и заметно оживляя картинку.
Также добавлены те анимации, которые использовались только в катсценах, но по смыслу подходят и тогда, когда персонаж просто бездействует.
Всего изменения и добавления коснулись 110 таких анимаций. Да, пришлось заниматься этим практически вручную, но, пожалуй, результат того стоит.
Вот лишь некоторые из них.
Бездействие без оружия:
Бездействие с ножом лежа (женская)
Бездействие с пистолетом (женская)
Бездействие с гранатометом или лучевой установкой (разные)
Бездействие с пистолетом-пулеметом (женская)
Загружать их все смысла не видим, но общий принцип понятен. Отныне наши бойцы - не безликие стоячие болванчики, а показывают признаки жизни.
P.S.: Также, для статистики, выкладываю список добавленных анимаций, отсортированных по их типам.
Мужские:
Голые руки (5 стоя, 2 сидя, 3 лежа)
ПП (2 стоя, 2 сидя, 2 лежа)
Винтовка (1 стоя, 1 сидя)
Пулемет (3 стоя, 2 сидя, 1 лежа)
Пистолет (2 стоя, 1 сидя, 2 лежа)
Гранатомет (2 стоя, 2 сидя, 2 лежа)
Крупное оружие ближнего боя (1 стоя, 3 сидя, 3 лежа)
Нож (3 стоя, 3 сидя, 1 лежа)
Предмет/граната (2 стоя, 2 сидя, 2 лежа)
Женские:
Голые руки (5 стоя, 2 сидя, 2 лежа)
ПП (3 стоя, 3 сидя, 3 лежа)
Винтовка (2 стоя, 3 сидя)
Пулемет (4 стоя, 2 сидя, 3 лежа)
Пистолет (1 стоя, 1 сидя, 2 лежа)
Гранатомет (3 стоя, 2 лежа)
Крупное оружие ближнего боя (2 стоя, 2 сидя, 1 лежа)
Нож (2 стоя, 3 сидя, 3 лежа)
Предмет/граната (2 стоя, 1 сидя, 1 лежа)
Но это все мелочи: в конце концов, вернувшиеся анимации, конечно, хорошо, но ведь не ради же них делается модификация, правильно?
Кто сказал, быстро рассказывай про обещанную механику? Погодите, она на Новый го... то есть на сладкое.
А пока поговорим о...
Инженерное оборудование
Жизнь инженеров (и других классов тоже) заметно улучшится.
Во-первых, инструменты для ремонта оружия стали несколько доступнее и эффективнее, причем в описании появилась ранее скрытая информация.
Был добавлен специальный комплект, позволяющий повысить качество ремонта в разы. В руках опытного инженера он позволит ремонтировать оружие почти на "магазинном" уровне.
Во-вторых, в игре стало возможным проводить взрывные работы. Возможность станет доступна в заранее "подготовленных" для этого местах и позволит получать доступ к заблокированным участкам на карте.
В игру введены детонирующие шнуры, которые будут нужны для такой процедуры. Они лежали в ресурсах без дела еще со времен S2, но теперь у них появилась вполне определенная роль в игре.
Также в описании взрывчатки появится информация о силе взрыва (для подрывных работ) и пробивной силе (меняется динамически в зависимости от навыка инженерии)
Персонажи их внешний вид
Медленно но верно продвигается работа по улучшению внешнего вида персонажей. Большое внимание уделяется внешности главного героя (или героини), и на многих скриншотах в этой записи можно увидеть предварительный (а где-то даже финальный) результат.
Вот, например, некоторые из новых лиц главного героя.
А вот так теперь выглядит Тень. Она носит форму куноити, выполненную в цветах "Молота Тора". Кроме того, о прошлом Тени станет известно чуть больше.
А вы только взгляните, как похорошели наши девчонки!
Предметы и их применение
В игре теперь можно будет найти вот такие кожаные сумки. Их содержимое может быть разным: от важного документа до пары гранат. Впрочем, только этим дело не ограничится.
В игре уже были драгоценности, но теперь их станет несколько больше. Например, количество колец с драгоценными камнями увеличилось значительно.
Данное нововведение требовалось для расширения предметов, идущих на продажу. Как мы уже говорили ранее - размер предметов для инвентаря пересмотрен - но дабы не ломать экономическую составляющую, будут введено больше мелких ценных предметов на продажу.
Как известно, в S2 иногда встречались ключи, которыми можно было открывать некоторые двери. Например, в последней миссии самой первой игры, чтобы предотвратить запуск ракеты, приходилось использовать спецключ. Теперь же ключей станет больше, и они могут быть использованы для отпирания дверей, запертых ящиков и не только. Вот лишь некоторые из них.
Небоевых предметов станет больше, но этим дело не ограничится. Могут встретиться даже вещицы, пригодные и в бою, и вне боя.
Это, что ли, и есть те самые используемые предметы, о которых столько разговоров?
Нет. Теперь переходим к одной из главных новинок мода, а именно...
ИСПОЛЬЗУЕМЫЕ ПРЕДМЕТЫ
Много слов было сказано(во время разработки мода) на тему "Почему в Часовых нельзя создать используемые предметы как в СиМ", и все же раскладные стационарные пулеметы теперь есть в игре – Виккерс и ДШК. Они были ранее упомянуты в блоге.
Да, действительно, создать предметы как в СиМ, чтобы их можно было бы использовать "со всеми удобствами", нельзя. Но обходные пути всё-таки нашлись.
Во-первых, теперь комплекты стационарного оружия стали удобнее в использовании, ведь сменился их механизм активации. В теории были возможные случаи ложного срабатывания, это могло изредка портить общее впечатление от этого нововведения, но теперь их число практически сведено к нулю.
Чтобы активировать такой комплект, достаточно просто взять комплект в руки, а затем открыть и закрыть окно инвентаря. Это можно сделать двойным нажатием быстрой клавиши.
Во-вторых, теперь появилась возможность добавлять и другие используемые предметы, несмотря на наличие серьезных технических ограничений.
В игру добавлены новые интересные предметы и возможности, которые могут помочь игроку или иным образом повлиять на игровой процесс.
Вот лишь некоторые примеры.
Встречаться они будут не слишком часто, но каждая такая находка, пожалуй, многим придется по душе.
Да, их можно будет использовать.
Например, сигареты заблокируют 1 паническую атаку в бою: вместо того, чтобы впасть в панику, персонаж продолжить действовать как ни в чем не бывало.
С другой стороны, определенная польза компенсируется тем, что у игрока заметно падает максимум VP, причем эффект накапливается. Да и покурить можно будет только в режиме реального времени, что обычно получается сделать в новой версии лишь перед боем.
Но в игре не как в жизни, поэтому вредный эффект курения несложно "вылечить". Достаточно лишь посетить базу, где за символическую сумму можно восстановить утраченные VP, например, в режиме тренировки (игра даже делает в этом случае огромную скидку.)
Выпивка может лечить небольшие критикалы, придать бодрость, в том числе повысив AP, но это чревато опьянением и приобретением алкоголизма. Боец будет чаще мазать, так как снизится точность, и тут на помощь придет лишь дипломированный врач. Благо такой есть на нашей базе.
Правда, не все бойцы такие хрупкие. Есть вояки с огромным опытом в этом деле.
Такие предметы уже внедряются в игру, и их можно найти как при исследовании карты, так и при осмотре содержимого карманов врагов.
Выше уже показывались сумки, а вот и видео их работы подоспело.
Такие можно найти на некоторых картах, и в них всегда лежит что-нибудь интересное.
В отличие от предметов выше, их не нужно брать в руки. Они откроются автоматически, и их содержимое будет добавлено в ваш рюкзак.
Ну вот на этом сегодняшний блог и закончим, учитывая что лимит медиа исчерпан. Всем спасибо за внимание :) Встретимся в следующую пятницу - пришло время рассказать немного о новом и старом оружии - тут есть что показать!
Альтернативное Apple'водство: как и зачем я променял оригинальный айфон на китайскую нерабочую подделку за 1000 рублей?
Осторожно: в статье аппаратная диагностика и ремонт, реверс-инжиниринг и патчинг загрузчика, а также программный моддинг noname-устройства, для которого нет вообще никакой информации. В материале куча познавательного контента, даже если вы не фанат такого своеобразного класса устройств, как подделки на брендовые девайсы.
Пожалуй, споры о том, какая мобильная платформа лучше не утихнут никогда. Люди из года в год спорят, какая же мобильная платформа круче: iOS или Android, и какие только аргументы не выдвигают в сторону оппонента. Но что делать, когда хочется усидеть сразу на двух стульях и иметь смартфон в корпусе iPhone, но при этом с привычным Android на борту? Когда душа моддера и любителя красноглазия просто требует чего-то необычного!? Правильно, обратиться к китайским «подвалам» и взять себе дешевую реплику на андроиде! А в моём случае — ещё и Б/У утопленную подделку 14 Pro Max чуть больше, чем за «тыщу» рублей, так ещё и проапгрейдить её! Сегодня будет познавательный и интересный материал, в котором мы с вами: узнаем как диагностировать некоторые аппаратные проблемы с помощью минимального и дешевого оборудования, оживим наше «яблочко» после попадания влаги, «отреверсим» и пропатчим в IDA Pro загрузчик, дабы разрешить загрузку unsigned-ядер, портируем кастомное рекавери и накатим рут, а также узнаем что из себя представляет такой «айфон» в повседневной жизни и как мне вообще взбрело в голову купить китайскую подделку яблочной техники! Материал диковинный, но обещаю — будет интересно! Жду вас под катом :)
❯ Содержание
Ещё каких-то 10-12 лет назад люди собирались в комментариях под различными постами и жарко спорили о том, чья платформа более продвинутая. Чаще всего темой спорой была iPhone vs Android, реже — iPhone vs Windows Phone, а иногда и Android vs Symbian! Но годы идут, на рынке осталось только два крупных игрока, а споры всё не утихают. Стоит только зайти на профильный сайт, зайти в любой пост с новостями и насладится всеми прелестями споров «A vs B». Кто-то поддерживает экосистему Apple, кто-то Android в чистом виде, а кто-то микс фишек Apple в Android окружении от Xiaomi. Некоторые люди даже поддерживают, казалось бы, «неактуальные» платформы как Symbian/WP и среди них есть мои читатели (я и сам очень люблю их и запилил клиенты ВК и YouTube на них, о чём рассказываю в отдельной статье) :)
Но как мои давние читатели наверняка знают, я лично всегда придерживался позиции, что и iOS, и Android, и Symbian, и WP — замечательные системы, которые так или иначе нашли своего пользователя. У меня сейчас есть довольно много смартфонов прошлого десятилетия: полтора года назад я взял себе Galaxy S4 Mini в качестве основного девайса, год назад ходил уже с обычным Galaxy S4, а чуть больше полугода назад читатели подарили мне оригинальные iPhone, от 2G до 5s! И лично я очень люблю iPhone за отличный дизайн, за шуструю iOS, за достойную поддержку старых девайсов, но в тоже время… я ведь и сам вырос на 4pda, пользуясь ультрабюджетными «декспами», «зте» и «флаями»! И тяга к аппаратному и программному моддингу, а также написанию хоумбрю-приложений и прочим фишкам действительно открытых платформ отнюдь не угасла, скорее только наоборот!
Поэтому от нового девайса, с которым я хотел бы походить как с основным, я требовал лишь три вещи:
Дизайн одной из последних моделей iPhone. Пожалуй, кто-то из читателей сочтет это за «тупой понт», но это не совсем так, яблочные дизайны действительно неплохо продуманы и их приятно держать в руках. Важно понимать, что выпуская подделки, заводы откровенно экономят на железе, но при этом стараются достаточно качественно скопировать корпус, используя в конструкции и алюминий, и каленое стекло, а также установить относительно неплохую IPS-матрицу, пусть и низкого разрешения.
Поддержка LTE. Вы удивитесь, но да, всё ещё выходят реплики iPhone, Samsung, да даже Poco и Realme, которые построены на базе чипсета 2015 года — речь, конечно же, о MT6580. И к сожалению, радиотракт этого чипсета не умеет работать с LTE, да и у платформы очень серьезные ограничения на объём ОЗУ (не более 2Гб) и разрешение дисплея (не выше HD) :(
Android на борту. Ну, по этому пункту я всё рассказал выше. При этом для меня не имеет значение версия системы, я не гонюсь за самыми новыми фишками: китайцы уже не ставят Android ниже 6-7 версии (впрочем, это спорно, предположительно ещё попадаются девайсы с 5.1 на борту среди самого дешевого сегмента), а «шестерки» мне вполне достаточно для всех моих применений, в том числе и YouTube с ВКшечкой. Чего там говорить, если мне чего-то действительно не хватает и у меня есть настроение — я сам себе запилю приложение :)
Касательно статуса загрузчика я не волнуюсь: в «подвальных» девайсах практически никогда не бывает секьюрбута и нет никакой необходимости патчить загрузчик, что открывает широкие возможности к его моддингу. Эх, вот бы еще исходники ядер выкладывали — но это уже мечты :)
И под эти требования вполне попадают «новодельные» реплики последних моделей iPhone в среднем ценовом сегменте (от 10 000 рублей). Казалось бы, кто-то из читателей спросит: «автор, ты дурак за фуллпрайс брать такой девайс?». И нет, не дурак, поскольку смартфон я купил за 1 500 рублей (и это ещё дорого за его состояние, после покупки мне попался похожий девайс, но уже рабочий, с коробкой и всего за 500 рублей). Девайс продавал человек из СЦ, с которым мы состоим в одной беседе посвященной ретро-телефонам. Смартфон был заявлен как «невключайка» без признаков жизни, в непонятном состоянии, с битой задней крышкой и даже без базовой информации, такой, как о потреблении девайса на зарядки и при зажатой кнопке включения. Ну, как вы и сами понимаете, это настоящее комбо: не подающий признаков жизни китайский смартфон без какой-либо сервисной документации и схемы, который уже побывал в СЦ (потенциально в качестве донора) и наверняка разбирался, да ещё и, как потом оказалось, утопленный в воде… Это же только интереснее! Конечно берем!
Когда девайс приехал ко мне, то ещё до прихода домой я решил оценить его тактильные качества. Конечно, задняя крышка, увы, была подбита, но в целом мне всё равно девайс очень понравился. Как я уже сказал, рама смартфона выполнена из алюминия (за исключением толкателей кнопок), а задняя крышка из стекла с приятной на ощупь текстурой и, конечно же, выгравированным яблочком! Пока дисплей выключен, даже рамки дисплея едва ли дают себя выдать: по сути, определить реплику сможет только человек, который в теме яблочек и сможет опознать фейковые линзы с обратной стороны смартфона. Остальным можно наплести про «китайский дисплей» и т. п. :)
Придя домой, я понял — приключения только начинаются. Отклеив заднюю крышку с помощью фена, выяснилось, что девайс вскрывался: пару винтов потеряли, да и заводскую пломбу содрали.
Замеряем напряжение на АКБ и понимаем, что она села ниже 3.4В (3.5В — это уже 0%) и контроллер питания должен начать зарядку в режиме Precharge (режим «расталкивания» аккумулятора низким током). В режиме Precharge смартфон не показывает никакой индикации зарядки, поэтому остаётся лишь смотреть на потребление девайса и терпеливо ждать включения! Я ещё немного помог устройству раскачать АКБ с помощью внешнего 5В источника и вот, потребление поползло выше 0.2А — а девайс показал яблочко и индикацию зарядки. Неужели он рабочий?
На фото выше не видно, однако смартфон был залит водой и на дисплее появились большие разводы. И попадание воды не прошло просто так: он просто перезагружался на «яблочке», как и настоящий айфон… Вы, читатели, можете пока предположить, что же с девайсом было не так, а я включаю логическое мышление и перехожу к диагностике.
Друзья! Если вам не особо интересны технические детали аппаратного ремонта, или наоборот программного и вы хотели увидеть только обзор на устройство — можете прыгнуть сразу к обзору смартфона. Однако в технической части тоже много всего интересного!
❯ Диагностируем и ремонтируем
Итак, давайте сделаем выводы, которые мы можем понять из существующих симптомов:
Девайс заряжается и у него есть потребление, пусть оно и кажется заниженным, а значит модуль чарджера в контроллере питания, скорее всего, исправен.
Девайс включается и есть изображение яблочка, а значит, есть связь с eMMC и контроллер DDR инициализируется успешно, девайс проходит цепочку загрузки Preloader -> LK и возможно ядро, а также КП нормально реагирует на кнопку включения и включает необходимые выходы LDO для питания всех основных модулей смартфона (процессор и его периферия, чип памяти eMCP, драйвер bias-напряжений дисплея и т. п.). Скорее всего (но это не 100% гарантия), от воды не пострадали ни процессор, ни флэш-память.
Девайс уходит в перезагрузку: здесь причин может быть масса, например, данные на eMMC были повреждены в процессе залития и требуется прошивка, или всё же процессор или его обвязка оказались частично повреждены и при обращении к одному из встроенных периферийных модулей основное вычислительное ядро виснет и встроенный в КП WatchDog при отсутствии сигналов «сердцебиения» считает смартфон зависшим и отправляет его в намеренный ребут, из-за чего мы получаем циклическую перезагрузку. Не исключён вариант, что одна из внешних шин данных оказалась посаженной на массу в следствии КЗ одного из чипов на плате (или их обвязки), из-за чего драйвер, например, вываливает систему в Kernel panic и WatchDog также отправляет систему в ребут…
Наш девайс отказывался зайти в рекавери, что даёт нам понять, что до init дело скорее всего не доходит и девайс стопорится либо на LK (который и показывает анимацию зарядки и первое лого), либо на загрузке ядра.
Казалось бы, столько причин, а метод лечения у многих ребят один: сейчас будем делать диагностический прогрев, а потом снимать все чипы и катать их, и если не поможет — глянем обвязку и межслойные обрывы :) Но не стоит так торопиться, ведь в некоторых случаях для диагностики аппаратных проблем можно использовать программные инструменты!
Дело вот в чём: многие китайские производители, особенно это касается ультрадешёвых смартфонов и планшетов, специально оставляют диагностические пятачки, которые дублируют контакты АКБ, если вы случайно сорвали пятачки при пайке аккума, USB, если вы не смогли найти китайский Lightning под замену, а также пятаки UART, иногда даже на несколько каналов, которые позволяют читать логи — диагностическую информацию, которую девайс выводит при загрузке и работе устройства! И порой, подписанные пятачки с включенным дебагом на UART'е полезнее даже полной схемы устройства с бордвью!
Ой-ой, а ведь присмотревшись к плате, мы увидим, что кто-то снимал защитный экран и пытался прогревать BT/Wi-Fi/FM комбочип, а также то, что вся плата в подтеках флюса! Да ещё и всю обвязку кто-то посдувал фиг пойми куда, да так, что часть обвязки лежала прямо на пинах комбочипа, а у нас ведь даже схемы нет! Не беда — эти смартфоны построены на базе референсной платы MediaTek и с большой вероятностью, обвязка будет расположена идентично с другими смартфонами на базе этих чипсетов. Но в моем случае, я просто поставил SMD-компоненты туда, где они, очевидно, стояли: резисторы к резисторам, конденсаторы к конденсаторам, а иных элементов у меня пока-что не было. Дабы комбочип точно не вмешался в работу устройства, я временно его сдул с платы:
Я сразу же снял дамп своего устройства и нашел по платформе прелоадера и названию сборки оригинальную прошивку (линк в описании, решил оставить оригинальную ссылку, поскольку автор нормальный и не просит писать ему в мессенджеры за паролем для архива), дабы исключить вероятность косяка со стороны eMMC.
Обратите внимание — я сначала сделал дамп, дабы в случае неподходящей прошивки, прошить свою или собрать из двух прошивок одну! Поскольку мой китайский псевдолайтнинг уже был слегка подуставший (хотя 14 Pro Max ещё относительно свежий девайс) и сигнальные линии D+ D- были просажены, а девайс не определялся ПК, я отключил нижнюю плату АКБ и подпаялся напрямую к дублирующим пятачкам USB: после этого, девайс определился в системе как MTK Preloader, что дало мне возможность прошить официальную прошивку, но ожидаемо, эффекта это не принесло — смартфон всё так же перезагружался на яблочке :(
Затем я решил подпаяться к UART'у и всё же почитать логи подробнее: для этого, нам пригодится UART-преобразователь. Также, в качестве UART-преобразователя подойдет и ESP32, который частенько можно найти в местных радиомагазинах за копейки. Сигнал EN необходимо кинуть на 3.3В - это погрузит МК в RESET и не даст ему влиять на шину!
Подпаиваемся так, как я отметил на фото ниже, не забывая подключить общую массу. Для чтения UART'а я использую putty.exe: выбираем наш COM-порт, ставим бодрейт 921600 и запитываем девайс: теперь у нас побежали логи…
С левой стороны каждой строки лога написано время с момента старта ядра — т. н. «аптайм». На него тоже важно обращать внимание, поскольку он помогает приблизительно понять, на каком визуальном (т. е. то, что мы видим на дисплее) этапе стопорится загрузка. Мой девайс падал в Kernel panic и уходил в перезагрузку на 30 секунде работы… казалось бы, что можно понять из этих логов и как определить неисправность? Вот тут мы фокусируем наше внимание на двух строках:
Первая — это то, что у нас пытается проинициализироваться драйвер stk301x — датчика освещенности и приближения к уху, а вторая, где написано таймаут — означает об ошибке передачи данных на шине I2C к устройству по адресу 47. И чтобы понять суть ошибки, нам нужно иметь базовое понимание о принципах работы самых часто применяемых аппаратных протоколах для общения с другими чипами: SPI, I2C и 8080. В протоколе I2C, у каждого устройства есть собственный адрес, выраженный в 7-битном формате (до 127 адресов на одной шине), в случае stk301x — это 47. Что делает драйвер: он посылает датчику набор команд для инициализации или получения данных, при этом на хост-устройстве (т. е. процессор в нашем случае), сначала формируется состояние СТАРТ и посылает всем устройствам на шине адрес нужного устройства. Затем, нужный чип должен «подхватить» свой адрес и на все байты передаваемых данных формировать статус ПОЛУЧЕНО (ACK). Если статус ACK не получен аппаратным I2C-контроллером процессора телефона за определенное время (допустим, 1 секунда), то он формирует прерывание (или просто изменяет статусный регистр), который обрабатывает драйвер контроллера I2C, который затем и выдает драйверу датчика статус таймаут, а тот в свою очередь выводит ошибку в логи!
Всё равно ничего не понятно? И снова мы с вами включаем смекалку. Если устройство жалуется на отсутствие состояния ACK, значит, возможны две причины поломки: обрыв линии SDA/SCL до устройства, либо то, что в следствии попадания воды, одно из периферийных устройств «сгорело» и садит всю шину I2C на массу, из-за чего, например, драйвер другого устройства на шине I2C крашится, а поскольку это драйвер работающий в пространстве ядра — он тащит за собой все! Может быть и такой вариант, что драйвер КП не может посылать сигналы Heartbeat из-за просаженной шины и КП отправляет устройство в ребут.
Сдуваем наш датчик освещенности, включаем девайс и он вроде даже не выключился спустя 30 секунд… проходит пару минут и…
Решил вставить оригинальное фото первого включения, как раз сделанное «по быстрому» и в порыве радости :)
Он включился и работает! Он выжил, хотя разводы воды заметно сказались на состоянии его дисплея! Но поскольку комбочип пока что выпаян, у нас не будет ни Wi-Fi, ни BT, ни GPS, ни радио. Поэтому отключаем девайс и припаиваем обратно комбочип, не забыв восстановить всю обвязку. В финале мы отмываем плату от подтеков флюса (не весь флюс мне удалось нормально вымыть, потому что старый прикипел).
После установки комбочипа и остатков обвязки (а может, это и вся обвязка что была с завода, китайцы ведь часто экономят и на этом — ставят необходимый минимум), я проверил и Wi-Fi, и BT — теперь девайс звонит и без проблем выходит в интернет!
На этом аппаратный ремонт закончен.
Поскольку девайс теперь работает, можно приступать к его программному моддингу! Но сначала, нужно отключить проверку подписи образа ядра.
❯ Патчим загрузчик
Как я уже говорил выше, в подобных репликах и просто дешевых noname-девайсах фактически отключен полноценный секьюрбут. Однако конкретно в этой реплике, при сборки прошивки, производитель включил в lk (загрузчик второго уровня) принудительную проверку подписи у образов ядра boot.img и recovery.img, предварительно включив возможность его отключения (т. е. разблокировки загрузчика) в режиме fastboot. На многих девайсах достаточно лишь перезагрузить устройство в режим fastboot и выполнить специальную oem-команду:
adb reboot bootloader
fastboot oem unlock
Которая вызовет соответствующий диалог. Но вот незадача: девайс не реагирует на кнопку вверх, из-за чего загрузчик разблокировать не получается. Намеренная подлянка от производителя? Скорее недосмотр при проектировании платы, благо исходный код вторичного загрузчика LK, который и реализовывает режим fastboot сливали в сеть. Давайте изучим его подробнее!
Итак, что мы здесь видим? При запросе разлочки устройства, девайс падает в бесконечный цикл, в котором проверяет и реагирует на одну из соответствующих клавиш — громкость вверх, или кнопка «ОК», которая считается кнопкой вниз. Почему же девайс не определяет кнопку вверх?
В чипсете есть отдельный периферийный модуль, который отвечает за обработку Keypad-кнопок клавиатуры. Он же позволяет реализовать полноценную QWERTY-клавиатуру без внешних контроллеров, если того захочет производитель. Однако он оперирует не конкретными логическими уровнями на GPIO (иначе потребовалось бы слишком много пинов и, скорее всего, сильно увеличивать размер чипа), а специальным АЦП (аналогово-цифровой преобразователь) с низким разрешением, который вычисляет, какая кнопка нажата относительно определенного сопротивления. Следовательно, если производитель каким-то образом накосячил при разводке платы и резистором иного номинала «присвоил» громкости вверх другой аппаратный KeyCode-клавиши, функция mtk_detect_key банально не «увидит» нажатие нужной нам кнопки, которая захардкожена как 0x0.
Но почему тогда в Android, кнопка громкости вверх работает нормально?
У Android есть отдельный механизм для маппинга кнопок, называемый keylayout'ами. В текстовом файле хранятся ассоциации числовых KeyCode'ов с константными обозначениями, такими как VOLUME_UP и VOLUME_DOWN например. Поэтому вы без проблем можете поменять их значение местами, или, например, если у вас сломалась кнопка включения, переназначить её на громкость вверх без необходимости кидать перемычку!
Подробнее о подсистеме ввода в Android я рассказывал в другой своей статье.
Как же это поправить? Не собирать же нам lk самим, да и будет ли пропатченный загрузчик работать? И да, будет! Как я уже сказал, в девайсе не включен полноценный секьюрбут с верификацией того, что вы прошиваете через FlashTool в внутреннюю память устройства. Preloader (первичный загрузчик после BootROM) не проверяет ни целостность lk, ни хэш-суммы, просто читает его в 0x0 и передает ему управление…
А что это значит? Что мы можем просто пропатчить условие, отвечающее за «громкость вверх», дабы lk считал, что мы все таки нажали эту кнопку! Открываем дизассемблер IDA Pro и наш lk.bin в нём, как обычный binary-файл со смещением 0x0 и ищем те строки, которые встречаются ближе всего к нужному нам условию. В нашем случае, это Start unlock flow.
Как видите, IDA Pro, как самый крутой дизассемблер по моему мнению, уже построил xref'ы (все ссылки на бинарные данные из инструкций) и сразу показывает нам куда обращается тот или иной код. Опана! А вот мы и нашли код функции, которая отвечает за старт анлока загрузчика и проверяет нажатые кнопки. Что же нам с этим делать? Правильно, переключится в режим графа и анализировать код подробнее. Я не так силен в ARM-ассемблере, как x86, но всё же не без помощи ISA-мануала от ARM понял значение всех мнемоник.
Обратите внимание на инструкцию BL — она вызывает подфункцию и сохраняет адрес PC + длина инструкции в стек, дабы продолжить выполнение после возврата из неё. Это и есть вызов нашей функции mtk_detect_key. Оптимизатор сократил код так, что сразу после возврата из функции, её возвращаемое значение оказывается в регистре R4, который программа переносит в регистр R0, а затем сравнивает R0 с нулем. Если R0 оказывается ноль (инструкция BEQ, branch if equal to zero, т. е. кнопка не нажата), программа прыгает к проверке кнопки «вниз», а если нет — то продолжает выполнение кода, который стартует разблокировку загрузчика. Уже смекнули, о чем я? Нам достаточно лишь пропатчить CMP R0, #0, дабы заставить программу считать, будто кнопку мы все таки нажали и перейти к процессу разблокировки!
Обратите внимание, что в #0 (т. е. с решеткой) — это Immediate-значение, которое уже является операндом инструкции, а не загружается, например из регистра, а значит мы можем просто найти это значение в HEX-редакторе и пропатчить его на 1, либо просто NOP'нуть всю инструкцию. Адрес операнда инструкции — 0x1FB0C, поэтому сразу переходим к нему в hex редакторе и просто меняем 0 на 1 и сохраняем:
Прошиваем новый lk.bin с помощью SP Flash Tool, перезагружаемся в fastboot, пишем fastboot oem unlock и… сработало! Смотрим статус разлочки с помощью fastboot oem device-info (unlocked и secure) и видим что девайс действительно разлочен! Теперь смартфон каждое включение будет напоминать нам о том, что мы разлочили загрузчик. Ну разлочили и разлочили, зато теперь у нас полная свобода действий :)
Переходим к ответственному действияю — портированию рекавери и накатыванию рута! Но здесь всё уже гораздо проще.
❯ Портируем рекавери и накатываем рут
Поскольку мы с вами уже разблокировали загрузчик, то и без проблем можем грузить что захотим: и LineageOS, и MIUI — всё что уже портировано для этого чипсета на этой версии ядра. Правда не забывайте, что чипсет 64х-битный, множество прошивок — тоже, а китайцы почему-то собрали 32х-битную прошивку — это стоит иметь ввиду при портировании.
Если честно, изначально я хотел включить часть с портированием прошивки в основную статью, но опросив читателей понял, что вам не особо комфортно читать статьи 20+ минут длиной, поэтому если вам интересен подробный материал о портировании прошивки без пересборки ядра на нонейм устройствах — проголосуйте в опросе ниже (или маякните в комментариях)!
Начинаем с накатывания «кухни». Я пользуюсь MTK Img Tools, весьма удобный софт. Для его использования, нужно вручную создать папки Pack/Image и Unpack/Image.
Закидываем в папку Unpack/Image родной recovery.img, и тот, который будем портировать — назовем его recoverytwrp.img. Распаковываем их в менюшке Unpack image -> Boot.
После распаковки, у нас появятся папки recovery и recoverytwrp в папке Unpack, где мы и будем вести нашу работу. В целом, на MT6753 в нашем случае достаточно лишь перенести родное ядро в тот рекавери, который мы портируем. fstab же трогать не нужно. Делается это легко: просто копируем recovery/kernel/kernel в recoverytwrp/kernel/kernel с заменой и пересобираем образ командой Pack image -> Boot обратно. Собранный образ мы найдем в папке Pack/Image, его можно либо прошить в флэштуле взамен стандартного, либо загрузить прям из фастбута без необходимости прошивать память устройства (это, кстати, ещё один отличный способ грузить Android с MicroSD если флэшка «закончилась»).
fastboot boot recovery.img
Кастомный рекавери загрузился без проблем — а это значит, что нам открыты большие возможности по кастомизации нашего девайса! Берем SuperSU с официального сайта, прошиваем SuperSU.zip с помощью adb sideload и балдеем, теперь с полноценным рут-доступом к устройству и без необходимости патчить Magisk'ом или распаковывать раздел system!
Теперь можно вычистить весь мусор из предустановленных приложений благодаря спец. софту для менеджмента приложений на смартфоне.
❯ Можно ли пользоваться девайсом?
Давайте посмотрим! Девайс из коробки похож на iOS 16, при этом, поскольку такие «айфоны» работают на общей аппаратной платформе, теоретически есть возможность поставить на 12 Pro Max прошивку от, например, 15 Pro Max (с некоторыми изменениями) :)
Функционал системы скопирован достаточно точно. На некоторых репликах особо не заморачиваются и просто чуть изменяют значки на айфоновские, не убирая даже нижнюю панель кнопок. Здесь же все скопировано с настоящей iOS: свайп снизу вверх сворачивает приложение, свайп до центра экрана открывает меню многозадачности, свайп шторки с левой стороны открывает панель нотификаций, а справа — панель управления. И ведь это не просто чужие готовые лаунчеры из условного Play Market, компания-производитель либо аутсорсит копирование некоторых фишек разработчикам на стороне, либо держит свой собственный штат программеров, который, в том числе, занимается сборкой прошивок и портами с рефборды!
В настройках, система гордо называет себя iOS, а модель смартфона — iPhone 14 Pro Max! Но что на практике? CPU-Z говорит о следующих характеристиках:
Более половины характеристик — брехня. Настоящие спецификации девайса следующие:
Процессор: MediaTek MT6753. 8 ядер Cortex-A53, 4 из которых работают на частоте 1.5ГГц, а оставшиеся — на частоте 1.3ГГц. Чипсет выпущен в 2015 году и выполнен по техпроцессу 28Нм, поддерживает до 3Гб ОЗУ.
GPU: Mali T720, преемник легендарного Mali 400. Уже немолодой, но всё ещё кое-что, да может. Vulkan не умеет.
ОЗУ: 3Гб DDR3. Не так много, но в целом пока ещё относительно адекватно.
Флэш-память: хотели 512Гб? Получите 32Гб, а недостаток можно нарастить MicroSD-флэшкой, слот под которую производитель заботливо предусмотрел под крышкой устройства. Это частая практика для китайских айфонов.
Дисплей: с диагональю не наврали, честные 6.7". А вот с разрешением, конечно-же, приукрасили: здесь стоит HD+ IPS матрица с разрешением 720x1540. Не особо высокое разрешение для такой диагонали дисплея, но в остальном дисплей показывает себя адекватно: яркость приемлемая, цвета хорошие, матрица отзывчивая.
В целом, характеристики ближе к ультрабюджетным моделям Realme и Poco. Нельзя сказать, что всё прям очень плохо, но ожидать что он будет работать на уровне флагманов, конечно же, не стоит. Но как оно на практике?
Начинаем с мессенджеров: ВКшечка и Telegram. В качестве клиента ВК, я юзаю исключительно Kate Mobile, который шустро работает даже на 10-летних китайцах на MT6572. Официальный клиент давно не признаю, всё таки при grishka он был лучше :)
Последний официальный клиент телеги работает шустро. Чипсет, конечно, печка ещё та, но посидеть в чатиках, посмотреть видосы и всякое такое можно без каких либо проблем. Главное чтобы память резко не закончилась. WhatsApp здесь тоже работает нормально.
Переходим к видосам. Ни официальный клиент, ни ревансед последних версий нормально здесь работать не будет — официальные клиенты требуют Android 8+. Но разве ж это проблема для нас, когда есть SkyTube? :) Работает шустренько, девайс без проблем держит 720p видосы, а больше и смысла нет.
Как насчет навигации? Google-карты работают адекватно. Всё весьма шустренько, хотя порой просадки FPS всё же бывают. Но я лично предпочитаю выкидывать гаппсы из своих смартфонов и накатывать навигацию по OSM. Что забавно — в девайсе есть собственный клон AppStore'а! И если рескины Google Play в стиле яблочного магазина для меня не удивление, то наличие полноценного бренда CH с эдаким фидбеком у смартфона меня весьма удивило. Я всё ещё помню GooPhone'ы, которые когда-то предоставляли хороший клиентский сервис покупателям своих реплик айфонов, но не думал что эта практика даже сейчас актуальна. Вполне возможно, что CH — это и относительно крупный завод-производитель со своим R&D отделом, поскольку маркировка есть и на межплатном шлейфе, и на АКБ. Эта компания также производит реплики Galaxy S и Note серии, на базе той-же аппаратной платформы.
И переходим, конечно-же, к камере! Самое приложение скопировано 1 в 1 с оригинала, даже есть какие-то панорамные режимы и фишки с цифровым зумом и подобием изменения FOV. Но понятное дело, тест не может быть объективным на 100%: девайс после воды, топился в районе камеры и на фото явно видны засветы. Есть вероятность, что оптика всё же оказалась немного повреждена :(
"Фотосет" из двух наиболее удачных фотографий есть на imgur. Увы, на Пикабу очень большие ограничения на число картинок в одном посте!
Но на скринах всё красиво, а как на деле? Смотрим:
❯ Заключение
В целом, девайс весьма хорош для моих повседневных задач. Работает шустренько, выглядит как айфон как с внешней точки зрения, так и с точки зрения системы, дисплей весьма неплох по качеству, смартфон отлично поддаётся моддингу. Собственно, а почему-бы и нет?
Цель материала была рассказать вам не только о том, на что подобные реплики способны «из коробки», но и об их возможностях моддинга и кастомизации с подробной практической частью, а не на уровне «пойдите туда и сделайте это»!
Но учтите, я не рекомендую покупать реплики айфонов, если вы ожидаете от них хорошей работы из коробки и у вас нет желания в них ковыряться. Зато мне очень понравилось с ним возиться и я надеюсь, по итогу было интересно и вам! Пишите своё мнение в комментариях, будет интересно почитать! Также у меня есть канал в телеге, где я публикую бэкстейджи статей, различные посты по тематике аппаратного и программного моддинга, программирования, а также разработки собственного DIY-железа!
Кстати, если у кого-то из читателей есть похожие подделки будучи нерабочими, тормозящими, или окирпиченными и вам не хотелось бы выкидывать их на свалку, а наоборот, отдать их в хорошие руки и увидеть про них статью — пишите мне в Telegram или в комментах! Готов в том числе и купить их. Особенно ищу донора дисплея на китайскую реплику iPhone 11 Pro Max: мой ударник, контроллер дисплея калится и изображения нет :(




































































































































