Начинаем неделю с нового экспоната в виртуальном музее советской бытовой техники. Экспонат снова прислан читателем, на что говорим спасибо. Это электросушилка ЭС-2.
Литой алюминиевый корпус огромной толщины. Будь отлит аккуратнее - вполне неплохой был бы дизайн.
На передней стороне было зеркало
Вид снизу:
Вид со стороны задней стенки
Автоматики нет, просто выключатель и указание - "Уходя выключайте". Клавиша от обычного настенного выключателя - изящное и живучее решение.
Внутри конструкция как у сушилки "донбасс".
К сожалению, шильдик выцвел, но на авито удалось найти более сохранный экземпляр. Логотип намекает, что изготавливались сушилки в какой-то колонии.
На барахолках нашлось фото паспорта с адресом предприятия:
В интернете нашлось предприятие, ликвидировано в 2008
Недавно я исследовал китайские онлайн-барахолки и наткнулся на лот с продажей абсолютно новых КПК Sharp Zaurus за 4.500 рублей. Будучи прожженным гиком и ярым фанатом всего, что хоть как-то похоже на ноутбук и работает на ARM-процессоре, я не смог устоять и решил приобрести его в свою коллекцию необычных Linux-гаджетов. А поскольку устройство абсолютно новое и опечатанное, я решил оформить распаковку и ретроспективу в виде ламповой статьи!
❯ Предыстория
В наше время нет никаких проблем купить себе интересный гиковский гаджет. То и дело небольшие компании по типу Planet Computers и Pine64 выпускают необычные устройства, по большей части предназначенные для доводки напильником и ковыряния ради самого процесса. Более того, в эпоху DIY, многие начинающие инженеры сами себе собирают гиковские штучки: я и сам являюсь одним из таких доморощенных маминых конструкторов.
Cosmo Communicator
Но в девяностых и нулевых всё было не так просто: Open Hardware-компьютеров вообще практически не существовало (кроме смартфона Neo Freerunner), а серийные Linux-устройства можно было пересчитать по пальцам. Но обширное коммьюнити не отчаивалось и пыталось портировать ядро на все гаджеты, где есть MMU и хоть какая-то документация на процессор. HP Jornada, Dingoo A320, HTC Magician, HTC Gene - на все эти устройства Linux был полноценно портирован исключительно силами коммьюнити!
RZX-50 использовал наработки сообщества по Dingoo A320.
Среди легендарных гиковских гаджетов, особенно выделяется серия портативных компьютеров Sharp Zaurus. Ещё в 2001 году, японская корпорация поверила в перспективы Linux и Qt и выпустила один из первых серийных КПК с «пингвином» на борту - SL-5000D. Модель отличалась полноценной QWERTY-клавиатурой, которая пряталась под выдвигающимся блоком системных клавиш, крупным цветным дисплеем с приличным разрешением 240x320, мощным процессором Intel StrongARM и наличием свободного SDK для разработки программ с использованием Qt.
Несмотря на высокую цену, устройство стало бестселлером среди гиков, которые старались выжать из устройства максимум. Кастомные прошивки, ядра с разгоном процессора, порты программ с ПК - всё это появилось задолго до Android-смартфонов! Попробуйте представить себе, насколько круто было запустить полноценный Wolfenstein3D в 2002 году на портативном гаджете...
Будучи коллекционером и одним из таких энтузиастов, мне тоже захотелось обзавестись легендарным японским КПК. Сначала я купил за копейки SL-5500D из утиля с эффектом, известным как «уксусный синдром» - когда из-за неправильного хранения поляризационная пленка дисплея начинает отслаиваться и из-за кристаллизации клея изображение начинает «плыть».
А затем мне попался лот с абсолютно новым SL-7500C для китайского рынка по весьма приятной цене в 4.500 рублей. Благодаря подписчику Роману и сервису YouCanBuy, я смог заказать гаджет и привезти в Россию, за что вам огромное спасибо!
❯ Распаковываем
Поскольку многие модели Zaurus продавались в основном на рынке Японии, в другие страны их нередко ввозили «серым» импортом. Китай, однако, был исключением - там ввозом устройств занималась корпорация CEC и буква 'C' в конце названия модели как раз говорит о том, что у нас версия для Китая. От японской она отличается упаковкой и языком прошивки.
Гаджет приехал ко мне в посылке, где находился фирменный пакет, коробка с аксессуарами и опломбированная отдельная коробка для самого гаджета. В коробке с аксессуарами лежат два огромных талмуда - один с инструкцией для устройства, а второй для внешнего CF-модема GC, который позволяет добавить устройству GPRS и даже возможность звонить! Самого модема в комплекте не было, зато был диск с софтом и драйверами, проприетарный дата-кабель, блок питания (5В с Barrel-jack, как на PSP и КПК HTC/HP), запасной стилус, аккумулятор и гарантийная информация. В общем, почти стандартный набор для тех лет.
А вот сам гаджет упакован особенно: отдельная коробочка с ленточной подпоркой, обшитая красной тканью, в которой гордо расположился SL-7500C. В подобных коробочках поставляются либо шедевры ювелирной работы... либо крутейшие гиковские гаджеты!
В качестве аккумулятора здесь используется литий-ионный элемент на 950мАч. Учитывая что АКБ хранится отдельно, мне было интересно остался ли в нём ещё хоть какой-то заряд спустя 21 год после выхода устройства. При первичном замере на клеммах было 0В (это на BMS, в самом аккумуляторе было ~2.6В), однако АКБ сразу же раскачался от лабораторного блока питания и подал признаки жизни.
На первый взгляд кажется, что литий-ионные АКБ не могут жить так долго, но при условии правильного хранения, аккумуляторы могут лежать и 10, и 15 лет, сохраняя заводской заряд. У меня лежат запечатанные аккумуляторы для сонериков и моторолл, которые всё ещё неплохо держат заряд и даже у SL-5500D, который я показывал чуточку выше, аккумулятор всё ещё жив спустя почти 25 лет!
Ну что-ж, пришло время подзарядить аккумулятор и впервые за 21 год включить нашего красавца...
❯ Знакомимся ближе
Даже спустя 22 года после релиза этот красавец включается и работает как ни в чем не бывало, причём родной аккумулятор всё ещё держит заряд минимум несколько часов. При включении нас встречает консоль Linux, затем логотип Qtopia и рабочий стол устройства, который представляет из себя вариацию на тему Windows. Изначально интерфейс у большинства «Завриков» на японском или китайском языке и возможности сменить язык на английский нет - нужно прошивать кастомную прошивку.
У Zaurus есть своя консоль восстановления, откуда можно прошить кастом, сделать бэкап и отформатировать пользовательский раздел. Вызывается она включением с зажатой кнопкой «ОК», далее можно выбрать метод обновления: с CF-карточки, SD или через USB. «Завры» очень прихотливы к SD-картам, даже обычные MMC он не видит и нормально работает только с CompactFlash!
Самой популярной кастомной прошивкой была CackoROM, предположительно от разработчиков из СНГ. В довесок к стандартной Qtopia, CackoROM добавлял менеджер пакетов, позволяя устанавливать новый софт, терминал, порты различных программ на Qt с KDE и кастомное ядро. Даже Midnight Commander портировали. Буквально LineageOS в мире Zaurus!
Прошиваемся
После прошивки, printk начинает выводить логи на экран, что прибавляло к крутости владельца 100 очков... А ведь раньше даже во времена Android убирали бутанимацию и делали вывод сообщений ядра!
SL-7500 - кровный брат-близнец модели C750, работающий на идентичном железе. Под капотом у них флагманское для своих лет железо:
Процессор - Intel XScale PXA255 на частоте 400МГц с одним ARMv5-совместимым ядром собственной разработки Intel. Процессор набирает почти в два раза больше очков MIPS, чем Pentium MMX и идёт на равных с Pentium II 300 - уже в 2003 году!
ОЗУ - 64Мб типа SDRAM. Классика для КПК тех лет, хотя в 2003 году ещё выходили модели и с 32Мб памяти.
Постоянная память - 64Мб типа NAND, производства Samsung. Для расширения памяти есть слот для SD, а также для карт CompatFlash.
Дисплей - TN-матрица разработки CG-Silicon с огромным по меркам тех лет разрешением - 640x480, диагональю в 3.7" и отличной цветопередачей с глубиной пикселя в 16-бит. У компактного КПК дисплей был не хуже, чем у некоторых актуальных для тех лет десктопов!
Коммуникации - USB, COM-порт, Wi-Fi и ИК-порт. CF также можно использовать для расширения функционала устройства с помощью дополнительных модулей.
После загрузки нас встречает рабочий стол Qtopia, разделенный на несколько вкладок: основные приложения, Java-приложения, настройки и проводник. Есть также фирменное меню пуск и панель задач - у «Заврика», как и у любого уважающего себя Linux-гаджета, есть многоконность!
Также здесь есть поддержка Java, но не J2ME как на телефонах, а Jeode с профилем, близким к CDC (J2SE ~1.1). По сути, это почти полноценная Java-машина с поддержкой awt - а значит на ней можно запустить различный ретро-софт. Из коробки здесь есть демо-апплеты, а также игра крестики-нолики, да и в целом поверх этой JVM можно реализовать MIDP 1.0 и запускать игры и программы для ретро-телефонов.
Zaurus отличался очень неплохими мультимедийными возможностями. Уже из коробки был предустановлен MP3-плеер, а также видеоплеер с поддержкой формата 3gp. Конечно едва ли в те годы можно было посмотреть на нём фильм, SD-карточки были ещё слишком малого объёма, но вот счастливые обладатели CF-карт на 256Мб уже могли попробовать посмотреть сильно пережатый фильмец!
Помимо этого, у Zaurus был полноценный веб-браузер NetFront 3.1 от компании Access. Это вам не урезанные WAP-сайты: миниатюрный гаджет мог просматривать настоящие WEB 2.0 страницы, а двумя движениями ноутбук превращался... в компактный планшет! В SL-7500C к сожалению нет ни WLAN, ни Bluetooth, поэтому подключить его к сети я не смог. Но уверяю у вас, OpenNet он бы точно открыл!
Поскольку Zaurus - это ещё и органайзер, в нём предустановлен различный офисный софт. Заметки, клиент E-Mail, календарь, записная книжка - всё это входит в стандартный набор программ. В целом, Zaurus можно считать прямым конкурентом тех же самых HP Jornada, LG Phenom и других WinCE-субноутбуков тех лет.
Ну и какой-же Linux-КПК обходится без возможности зайти в консоль под рутом и управлять системой как вздумается? На Zaurus легко можно было запускать консольный софт вообще без особых изменений, а также GUI-софт. Причём Qt был необязателен: многие эмуляторы рисуют сами себя либо сразу в фреймбуфер, либо используют библиотеку SDL. Возможности моддинга гаджета были неограниченными!
❯ Заключение
Вот такой необычный Linux-гаджет разработали в Японии в далёком 2003 году. На первый взгляд кажется что у него совсем нет применений в современном мире, однако на практике это вполне достойный портативный терминал, печатная машинка, игровая консоль и... телефон, если конечно у вас есть CF-радиомодуль. Подытоживая, можно сказать что Zaurus - один из самых ярких представителей ушедшей эпохи карманных портативных компьютеров.
А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статью) можно найти на моём YouTube канале.
Как вам Sharp Zaurus SL-7500C?
А что думаете о Zaurus в целом?
Очень важно! Разыскиваются девайсы для будущих статей!
Друзья! Для подготовки статей с разработкой самопальных игрушек под необычные устройства, объявляется розыск телефонов и консолей! В 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!) и устройства на Windows Mobile. Всем большое спасибо за донаты!
Отвлечёмся от грустных новостей и поговорим о мирном применении пороха. А применений таких, местами неявных, мне удалось отыскать на целый пост. Причём под порохом мы будем понимать все пиротехнические составы, которые горят сами, без подвода воздуха. (и исключим взрывчатки)
Концепция пороха как концентрата энергии
«Горит как порох» — говорят, когда что-то очень легко и интенсивно загорается. Порох содержит в себе как топливо, так и окислитель — источник кислорода. Поэтому ему для горения нужно только помочь искрой, а дальше процесс горения вовлекает весь объём пороха. Меняя размер и форму гранул пороха, можно делать процесс горения чуть быстрее или медленнее. Но итог один — порох сгорает и выделяет огромное количество газов и тепла. Эти газы и можно заставить выполнять полезную работу — толкать поршень механизма или разогревать что-то. Так как процесс происходит очень быстро, то получается огромная мощность такого источника.
Для наглядности количества энергии воспользуемся аналогией с распространёнными аккумуляторами 18650. Один элемент 18650 с ёмкостью 2 А*ч запасает электрическую энергию (3,7*2 *3600 = 26640 Дж). При этом масса такого аккумулятора 46 грамм, получаем плотность энергии примерно 0,5 кдж/г.
Один грамм бездымного пороха при сгорании выделяет примерно 3,4 кДж тепла. Так уж сложилось, что удобной формой хранения пороха является патрон. Это стаканчик из металла, в который засыпан порох, и в донце есть капсюль-воспламенитель, активируемый ударом бойка по нему. Если этот стаканчик из металла закупорен без пули, то такой патрон называют холостым. Форма патрона позволяет хранить порох в готовности к работе десятки лет. Монтажный патрон Д4 содержит 0,43г пороха и хранит 1174 Дж энергии. Выходит, энергетически один аккумулятор 18650 2000 мАч эквивалентен примерно 22 монтажным патронам Д4.
Но взятые из сомнительных источников данные усугубляются следующим:
Если мы заставим пороховые газы толкать поршень, чтобы превратить энергию сгорания в механическую работу, мы получим тепловую машину с КПД в лучшем случае 30%. Аккумулятор лишён этой проблемы, так как КПД электромоторов более 80%
Аккумулятор не способен отдать энергию быстро. Даже если взять качественный аккумулятор и разряжать его в жёстких режимах, то запасённую энергию он отдаст минуты за 4, при этом не всю, безбожно нагреваясь. А патрон спокойно отдаст энергию за 0,001 сек.
Таким образом я подвожу к мысли о том, что порох — весьма компактный и мощный источник энергии.
▍ Пороховой монтажный инструмент
Удар молотком по гвоздю — процесс весьма занятный. Мы сначала накапливаем энергию, взмахивая молотком, а затем за доли секунды наносим удар — передаём энергию гвоздю, который от такой радости заглубляется в материал. Даже взяв кувалду побольше и замахнувшись посильнее, мы вряд ли сможем создать удар мощнее 250 Дж. А уж поддерживать темп 5-10 ударов в минуту на протяжении часа — подавно. А что, если для удара использовать энергию пороха?
Пороховой монтажный инструмент использует энергию пороха для забивания крепежа в стены из бетона, кирпича. Именно для него предназначены монтажные патроны, что на фото с аккумулятором. При спуске боёк бьёт по капсулю патрона, порох воспламеняется, выделяющиеся газы раскрывают гильзу и устремляются в ствол, где толкают поршень, который забивает дюбель в стену.
На фото советский монтажный пистолет ПЦ-84.
Существуют автоматические модели инструмента, с патронами и крепежом на ленте. Монтажник с таким инструментом обладает огромной производительностью, только и успевает делать пыщ-пыщ-пыщ. Но, как и у любой медали, есть обратная сторона. Пороховые газы содержат частички сажи, поэтому пороховой инструмент нуждается в регулярной чистке. Да и стоимость одного «выстрела» получается довольно дорогой.
Также существуют пороховые устройства для оконцевания кабеля — монтажный патрон Д-4 своими газами приводит в действие мини-пресс, который формует и пробивает отверстие на конце алюминиевого кабеля.
▍ Пороховой демонтажный инструмент
Энергию пороховых газов можно применить для привода ножниц, и за доли секунды разрезать массивные металлические изделия. В своё время по интернету вирусились отечественные пиротехнические ножницы НП-4 от save-tool.
Позволяют чикать до 20 мм стальной прут хоть каждые 5 секунд. По сравнению с медленными гидравлическими ножницами — просто какая-то фантастика.
Военные тоже хотят работать быстро, поэтому у них есть пороховые рельсоломы и дыропробиватели.
Они, используя энергию холостого патрона, позволяют быстро торцевать рельс, и делать в нём отверстия. Это очень сильно ускоряет ремонтные работы.
▍ Пороховые двигатели
Если газы, создаваемые при горении пороха, отводить через сопло, создавая струю, то получится простой пороховой ракетный двигатель. Такие двигатели поднимают фейерверки в воздух.
Пороховые двигатели покрупнее помогают взлететь перегруженным самолётам, либо если для разбега очень мало места, например с палубы.
▍ Пороховой огнетушитель
Да, звучит как оксюморон, но существуют огнетушители с пороховым газогенератором. Порох (точнее подобранный под задачи пиротехнический состав) горит внутри устройства и создаёт большое количество газов. Эти газы своим давлением выдавливают огнетушащий состав из огнетушителя.
Решение позволяет не делать сосуд, который постоянно находится под давлением, что благоприятно влияет на стоимость и срок хранения. Но инженеров было не остановить, и советская промышленность родила малыша…
Огромная хлопушка, в которой вместо конфетти огнетушащий порошок. Испытавшие его часто говорят о синяке на ладони от отдачи. Похожая идея заложена в самосрабатывающие огнетушители — в них при превышении температуры пороховые газы разрывают корпус и разбрасывают огнетушащий порошок.
▍ Пороховое надувательство
Один литр бездымного пороха при горении выделяет порядка 1000 л газа. Причём давление, которое могут создать пороховые газы, весьма велико, порядка 300 МПа. Столь полезные характеристики пороха применяются в пороховых генераторах газа для вытеснения балласта на подводных лодках. Обычно для этого используется воздух высокого давления, который заранее закачивается в баллоны хранения компрессорами. Но при аварийной ситуации иметь возможность продуть балласт — просто вопрос жизни и смерти.
▍ Подушки безопасности
Почти в каждом современном автомобиле есть подушка безопасности. При ДТП она надувается пороховыми газами за доли секунды и предотвращает тяжёлые травмы головы от удара об руль. Правда срабатывает она громко и частенько повреждает слух, но лучше быть тугоухим, чем мёртвым.
В пару подушкам безопасности придумали пороховые преднатяжители ремня безопасности. Пороховые газы приводят в действие механизм, который натягивает ремень, убирая зазор от излишней длины ремня, которым пристёгнут пассажир. Так ремень начнёт удерживать тело сразу при ударе в ДТП.
▍ Взрывные заклёпки
Чтобы расклепать заклёпку, нужен доступ с двух сторон детали. Но бывает так, что возможен доступ только с одной стороны, а заклёпку поставить нужно. Сейчас такую потребность перекрывают вытяжные заклёпки. А на заре становления авиации эту проблему решали, создав взрывную заклёпку.
Это алюминиевая заклёпка, внутрь которой поместили немного пороха (как я и сказал в начале статьи, мы в порохи нагло запишем все пиротехнические составы). При нагреве заклёпки состав взрывается и деформирует заклёпку.
▍ Пироболты
В космической технике применяются крепёжные устройства, которые прочно, без люфта соединяют ступени ракет, но при подаче напряжения на запал срабатывает пороховой заряд и крепление рассоединяется. Благодаря им электроника может сбросить отработанную ступень ракеты в точно рассчитанный момент.
▍ Пороховое электричество
Пороховые газы весьма горячие, и их можно заставить двигаться с большой скоростью в магнитном поле. Если в рецептуру пороха добавить присадки для лучшей электропроводности газов, то получится прекрасное рабочее тело для магнитогидродинамических (МГД)-генераторов. Такие изготавливали в СССР для нужд эксперимента по определению электропроводности земли. Так МГД генератор «Сахалин» при массе всего 50 тонн кратковременно развивал электрическую мощность 500 МВт.
▍ Порох для дебета
Для нужд нефтяников разработаны разные пороховые заряды для увеличения дебита скважин, например, пороховые генераторы давления и пороховые акустические генераторы. Процесс называется «газодинамический разрыв пласта» — давлением пороховых газов в породе формируется сеть трещин, которая облегчает выход нефти.
▍ Фальшфейеры
Применяются как источник света при подаче сигналов бедствия. Благодаря добавкам солей металлов, пламя может быть ярко окрашено. В отличие от фонарика на батарейке, может лежать в готовности десяток лет. Да и мало какой фонарик даст яркость в 15000 кандел.
Надеюсь, я что-то пропустил, и узнаю ещё о применении пороха в ваших комментариях.
Начинаем рабочую неделю с нового экспоната в виртуальном музее советской бытовой техники. Сегодня снова порция самоделок. Начнем с такого мультиметра:
Делал мой дед. Изготовлен в корпусе электронного термометра (Ретропонедельник №34. Термометр ТПЭМ-1) Решение, для того времени неплохое - полноразмерный тестер (вроде Ц20) таскать с собой не хочется, он заметно крупнее. Да и точность часто не нужна, найти обрыв или наличие напряжения.
Внутри есть бумажка со схемой. Это хорошая практика, часто разбираешь свое изделие 10 летней давности и ничего не понимаешь.
Вот еще творение моего деда - он плел корзины. Помню, в лес ходили всегда с корзинами - они легкие, не преют и вместительные.
Про следующий предмет ничего не известно. По-видимому, это радиоприемник, о чем говорит магнитная антенна. Вероятно - с фиксированной настройкой. Крылатовка - это деревня в свердловской области, где была шахта.
Осторожно: в данной серии статей я рассказываю о реверс-инжиниринге и хакинге простых кнопочных звонилок. Цель простая: расширить скудный функционал телефонов ценой до 1 000 рублей и сделать их привлекательной моддинг-платформой для самых разных гиков. Если вы когда-нибудь слышали про эльфы и патчи, и вам интересно узнать, как происходит процесс взлома и изучения прошивок, а также написания новых программ для кнопочников — приглашаю вас под кат!
❯ Предыстория
Недавно я познакомился с Ilya_ZX, человеком-легендой в моддинг сцене телефонов из нулевых. Илья рассказал мне забавную историю: ещё будучи студентом, он увидел как одногруппник играет на своём LG G1800 в легендарную мобильную игру нулевых — «Змейку». Его тогдашний Siemens A60 не умел ничего кроме игрушки Stack Attack, даже Java-игры не поддерживались, а молодому парню очень хотелось сыграть в Змейку на скучных парах!
Казалось бы, на дворе 2005 год, можно просто пойти на рынок и купить уже изрядно подешевевшую Б/У 3310 и поиграть в «трушную» змейку именно там. Но Илья был не просто студентом технаря, он с юности интересовался программированием, реверс-инжинирингом и телефонами! И он решил поспорить с одногруппником — сможет ли он реализовать Змейку на своём A60? Всего за один месяц он умудрился исследовать прошивку телефона на диковинной процессорной архитектуре, найти необходимые функции для работы с дисплеем, вводом и окнами и написать ту самую змейку. Попробуйте теперь представить лицо его одногруппника, который проиграл спор молодому реверсеру :)
Сначала Илья написал игру на Паскале для самопального «симулятора» A60, а затем переписал её на ассемблере для C166s!
На момент написания статьи мне 23 года, я лишь чуточку старше тогдашнего Ильи. После рассказанной истории, я подумал «А чем я хуже?» и принялся реверсить прошивку бюджетного кнопочника 10-й давности - Explay B240. В прошлой статье, мы с вами проделали первые шаги по хакингу телефона: загрузка прошивки в IDA Pro и поиск системных функций, хакинг файлового менеджера для запуска программ с MicroSD-флэшки, разработка загрузчика исполняемых файлов и организация таблицы функций. В целом, это весьма неплохая поучительная статья для новичков в реверс-инжиниринге.
Однако итоговый результат в виде заливки экрана желтым цветом может показаться незначительным. Поэтому в сегодняшней статье мы с вами напишем первую действительно полезную программу!
❯ «Змейка»
Напомню, что загрузчик внешних программ работает по очень простому принципу: мы нашли в дизассемблере функцию обработки сообщений окна встроенной игры и хукнули её, дабы при открытии окна она загружала программу с MicroSD-флэшки в ОЗУ и передавала ей управление. При этом загрузчик сразу интегрирован в проводник: при запуске файла с расширением .app, патч кладет строку с абсолютным путем к нему в одну из «угнанных» глобальных переменных, открывает хукнутое окно игры, а далее бинлоадер транслирует все сообщения от ОС в загруженную программу.
Наглядная демонстрация работы
Таким образом, жизненный цикл приложений значительно упрощается по сравнению с "эльфами" на тех же Motorola и Siemens: по сути, нам остаётся лишь проинициализировать состояние программы в MSG_CREATE и освободить динамическую память в MSG_CLOSE. Читателям, которые хоть раз писали программы под Windows, такой подход может показаться очень знакомым!
Для реализации змейки, нам необходимо уметь обрабатывать кнопки и рисовать что-то на дисплей. С кнопками проблем никаких не возникает: система шлёт сообщения типа MSG_KEYDOWN_KEY и MSG_KEYUP_KEY на каждое событие с клавиатурой. А вот с графикой чуточку сложнее: поскольку встроенные в прошивку функции завязаны на работу с вшитыми ресурсами, мы напишем нужные функции сами.
UI-подсистема телефона реализована по принципу «грязных зон». Вместо перерисовки всего экрана, система хранит массив с координатами прямоугольников, где что-то изменилось с момента прошлой перерисовки: это позволяет сэкономить такты процессора на тяжелых операциях по типу альфа-блендинга.
Таким образом, сначала нам нужно получить указатель на буфер кадра, затем сделать весь экран «грязным» путем отрисовки полноэкранного прямоугольника и только потом поверх него рисовать графику нашей игры. На первый взгляд листинг ниже кажется дичью, но чуток отрефакторить — и выглядит как типичный код эмбедщика!
Далее я реализовал функцию для отрисовки текста на экране. Шрифты самые примитивные — 8x8, побитовые, примерно как в знакогенераторе оригинального IBM PC. Принцип отрисовки прост: каждый символ (глиф) хранится в виде 8 байт. В каждом байте один бит представляет из себя пиксель по координате Y, если он равен нулю — значит пиксель прозрачный, в обратном же случае он должен быть закрашен нужным цветом.
Алгоритм для отрисовки шрифтов выглядит так:
int LcdDrawChar(LoaderContext* context, uint16* frameBuffer, char chr, uint32 x, uint32 y, uint16 color) { if(x >= 0 && y >= 0 && x + FONT_WIDTH < LCD_WIDTH && y + FONT_HEIGHT < LCD_HEIGHT) { int i, j; unsignedchar* glyph = (unsignedchar*)(GLOBAL(context) + &embedded_font[chr * 8]);
for(i = 0; i < strlen(str); i++) { if(!LcdDrawChar(context, frameBuffer, str[i], x, y, color)) return; // Out of screen
x += FONT_WIDTH; } } }
Наверняка вы заметили страшный костыль в локальной переменной glyph с арифметикой над указателями. Дело в том, что на момент написания статьи, программа представляет из себя сырую склейку секций .text, .data, .bss и .rodata, поэтому на данный момент в ней нет релокаций, которые помогли бы сделать программу перемещаемой в памяти. В arm-none-eabi все вызовы функций без явного указателя — относительные, но при этом обращения к глобальным переменным и константам (например, строковым литералам) — абсолютные. Если попытаться напрямую использовать глобальную переменную по адресу 0x18 — программа будет пытаться читать или портить память в таблице векторов прерываний, что неизбежно приведет к HardFault. Поэтому для получения настоящего адреса переменной, к ней необходимо прибавить базовый адрес загрузки программы:
Этот костыль можно избежать, если в конец программы дописать сведения о релокациях, которые можно вытянуть путем парсинга промежуточного эльфа, а при особом желании — можно сделать так, что программа сама себя будет патчить «на лету»!
Для змейки, если она не ASCII, этого всё равно мало. Поэтому нам нужна функция для вывода картинок на дисплей. Написать загрузчик tga или bmp не составляет труда, но хотелось бы чтобы программа была самодостаточной и несла с собой все необходимые ресурсы. Поэтому для конвертации картинок я использую вот этот инструмент: выбираем файл, формат ставим в 16-бит 565 и преобразовываем в C-массив.
Процесс отрисовки изображения называется блиттингом, а его суть заключается в копировании пикселей с одной поверхности на другую. В нашем случае, исходная поверхность — само изображение, вторая — фреймбуфер. Также к пикселям могут применяться дополнительные операции: поворот и скейлинг (на фиксированные углы, либо же с аффинными преобразованиями), альфа-блендинг и колоркей.
Почему бы не спрятать дескриптор изображения в структуру?
Потому что в таком случае придется резолвить глобальный указатель два раза — первый раз на сам дескриптор, второй раз — на массив пикселей в дескрипторе, при всём этом необходимо необходимо будет разделить рантайм-изображения и ресурсы, что значительно переусложняет итоговую кодовую базу.
И вот наш результат. Не удивляйтесь тестовому изображению, просто я — прирожденный ТАЗовод!
Помощь
Переходим к геймплею. Сама по себе «Змейка» в реализации — простая игра, где каждый уровень представляет из себя примитивную сетку. Алгоритм работы заключается в том, что раз в n-миллисекунд вызывается один игровой тик, который двигает игрока в текущем выбранном направлении. Если в момент тика нажата одна из кнопок-стрелок — направление движения меняется — тут всё очевидно:
Сама змея представляет из себя массив сегментов, который хранит свою текущую позицию в сетке уровня:
Для продвижения змейки по направлению, необходимо в обратном порядке обойти массив сегментов, переставляя текущий крайний сегмент на позицию предыдущего сегмента и так до самой головы. Позиция головы будет инкрементироваться относительно выбранного направления:
Для того, чтобы проверить скушали ли мы яблочко — достаточно сравнить координаты головы и объекта. Если они идентичны, то прибавляем очко и переносим яблоко на другую позицию:
Для респавна яблочка можно использовать два подхода: параметрические таблицы с заранее прописанными координатами объекта (эдакая псевдослучайность) и обычный PRNG-генератор, который путем реверса можно найти в прошивке.
Благодаря дипсику удалось определить, что в прошивке используется LCG. Вообще, нейронки очень сильно помогают при реверсе и могут легко анализировать стандартные алгоритмы: я тестировал от простых по типу memcpy, до относительно сложных как например программное деление по модулю и программная растеризация треугольника по Scanline-алгоритму.
unsigned int rand() { int v0; // r3 int v1; // r4 int v2; // r1
Если же голова оказывается в одном из сегментов или же за полем — игра окончена. Полный вес собранного приложения - 5 килобайт 644 байта! А ниже - демонстрация его работы:
❯ Заключение
Вот такой интересный моддинг бюджетного кнопочника у нас с вами сегодня получился. От слов к делу мы с вами написали первые действительно рабочие программы, которые может быть и не самые полезные, но поверьте, для гика важен сам процесс и объём получаемого от этого эндорфина...
Это приносит невероятное моральное наслаждение
А что ещё нужно парню в 23 года? Правильно: чтобы мотор бодро тянул любимую десятку и чтобы реверсилось всё легко и понятно! Исходный код и все что необходимо для установки бинлоадера есть в на моем гите.
А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статью) можно найти на моём YouTube канале.
Важно: друзья! Я уверен, что статью будут читать выходцы с форумов моддеров и возможно даже ребята, связанные с прошивочными боксами. Если у вас есть исходный код или объектные файлы для телефонов Siemens (S-Gold или E-Gold — не имеет значения) и вы хотели бы помочь общему моддерскому делу — напишите пожалуйста мне в Telegram. Несмотря на то, что этот код уже давно никому не нужен и E-Gold/S-Gold уже более 15 лет снят с производства, гарантирую полную анонимность и крутой контент :)
Очень важно! Разыскиваются девайсы для будущих статей!
Друзья! Если вам понравилась сегодняшняя статья про разработку эльфов, то спешу объявить: для подготовки будущих материалов с разработкой самопальных игрушек под необычные устройства, объявляется розыск телефонов и консолей! В 2000-х годах, китайцы часто делали дешевые телефоны с игровым уклоном — обычно у них было подобие геймпада (джойстика) или хотя бы две кнопки с верхней части устройства, выполняющие функцию A/B, а также предустановлены эмуляторы NES/Sega. Фишка в том, что на таких телефонах можно выполнять нативный код и портировать на них новые эмуляторы, чем я сейчас занимаюсь, а затем написать об этом подробную статью и записать видео! Если у вас есть телефон подобного формата и вы готовы его задонатить или продать, пожалуйста напишите мне в Telegram (@monobogdan) или в комментарии. Также интересуют смартфоны-консоли на Android (на рынке РФ точно была Func Much-01), там будет контент чуточку другого формата :)
А также я ищу старые (2010-2014) подделки на брендовые смартфоны Samsung, Apple и т. п. Они зачастую работают на весьма интересных чипсетах и поддаются хорошему моддингу, парочку статей уже вышло, но у меня ещё есть идеи по их моддингу! Также может у кого-то остались самые первые смартфоны Xiaomi (серии Mi), Meizu (ещё на Exynos) или телефоны на Linux (например Motorola EM30, RAZR V8, ROKR Z6, ROKR E2, ROKR E6, ZINE ZN5 и т. п., о них я хотел бы подготовить специальную статью и видео т. к. на самом деле они работали на очень мощных для своих лет процессорах, поддавались серьезному моддингу и были способны запустить даже Quake!). Всем большое спасибо за донаты!
А ещё я держу все свои мобилы в одной корзине при себе (в смысле, все проекты у одного облачного провайдера) — Timeweb. Потому нагло рекомендую то, чем пользуюсь сам — вэлкам: