Оффтоп - у меня навязчивая идея сделать гонки, где можно было бы проехать на машинах из одной старой игры трассу из другой старой игры :) Уже поковырялся в NFS1-NFS5, Carmageddon1-2, и вот, дойдя до TDR2000 решил, что пора как-то уже делиться с людьми своими наработками :)
Итак, заходим в папку игры, что мы имеем? папку Assets и папку Saves. Очевидно, данные в первой :)
А там уже есть и папка Tracks (локации) и папка Cars (тачки)!
Ну, ввиду того, что цель стоит в том, чтобы разобраться как всё устроено - начнём с Cars, там обычно меньше данных :))
Ткнём, ну, в electric_blue
файл *.h - это описание каких то нод, пока запомним про его наличие :)
*descriptor.txt - а вот это, похоже, важный файл, есть упоминания файлов, входящих в описание модели. Думаю, обязательно к нему вернёмся :)
*texturedescriptor.txt - наверняка описание использования текстур. к нему если и вернёмся, то на стадии текстурирования модели :)
Вот что и правда интересно, и не поддается анализу через супер-утилиту Блокнот (ахахах) - так это файл dir и файл pak.
Логично предположить (исходя из размера и названия) - dir это индекс, pak - это сами упакованные данные.
Вообще обычно в старых играх индекс и сами данные лежат в одном файле. А тут - отдельно. Ну, мне же проще. Открываем DIR в Hex-редакторе...
ан нет, не проще :))
Глаз цепляется за то, что каждый нечётный байт как будто бы содержит контент, а чётный - видимо какие то флаги.
Вообще, при расшифровке таких архивов важно получить следующие данные:
- Название файла - Смещение начала даннах - Размер данных
Вернёмся же к индексу.
В чётных байтах как будто записаны названия файлов.
Но названия (String) должны либо иметь длину в начале, либо заканчиваться нулём.
Здесь ни то ни то, но в байте флагов в конце строчки - всегда 08h!
Запомним-с. а лучше - запишем-с
А что идёт после названия? наверняка нужные нам указатели смещения и размера.
C9 7F 16 00 - хм. какое то большое значение для смещения первого элемента.
B6 02 00 00 - а вот это для размера норм. Но, как бы там ни было, смещение укладывается в размер файла PAK (1474505 внутри файла 1 475 199 байт) - и даже тот факт, что так близко к верхней границе, говорит о том, что мы близко к истине :) просто первый элемент в индексе не является первым в самом архиве.
Пора писать скрипт чтения архива!
Вот здесь я реально немного задолбался писать свои копания в архиве, скажу кратко - в DIR файле не просто индекс, он еще и "заархивирован" так, чтобы повторяющиеся части путей не писать повторно. В итоге файл делится на блоки - ноды.
вся суть в байте флагов (про который я говорил ранее)
исследование привело к следующим выводам:
- 08h - завершение строки. после него сразу идут смещение и размер данных в файле PAK
- 40h - у текущего символа есть "вложения" - нужно дальше искать ноды и присобачить текущий преффикс к ним перед тем, как возвращать имя этих записей
- 80h - ничего не делаем, просто читаем дальше имя записи.
Итак, вот у нас есть список имён файлов, их смещения и размеры внутри PAK.
Пробуем читать.
На первый взгляд всё ок - смещения, а так же смещения+размер - все укладываются в размер файла PAK.
Но, что то не так.
Файлы, которые называются .txt ведут на данные, которые не очень то похожи на текстовые.
Запакованы?
В те времена часто использовался zlib для упаковки, который можно проверить по наличию байтов компрессии (с просторов интернета):
78 01 - No Compression/low 78 5E - Fast Compression 78 9C - Default Compression 78 DA - Best Compression
И да, 78 DA частенькой находится в файле PAK
Единственное, что смущает - он не в начале данных конкретной записи файла идёт... значит, пишем алгоритм, который пропускает всё, что идёт до этих данных. А остальное скармливаем ZLib'у (использую Ionic.zlib). Как результат - теперь получаем пачку файлов с данными машины. А вот об этом уже дальше, если вдруг это и правда интересно :)
На CSV не смотрите, это следующий шаг анализа dcol-файлов :)
Если есть желающие тоже в этом покопаться - черканите, оформлю в реп то, что уже накодил.
И, если есть ссылки на уже готовые решения - тоже пишите, мало ли, я провафлил этот момент и изобретаю велосипед :)
После статьи мне написали несколько инженеров из Тэлмы и Ронды - компаний, которые аутсорсили разработку софта для телефонов Motorola из нулевых. Теперь доподлинно известно, что в РФ разработали немалую часть прошивки Motorola E398:
Пилили софт для LG:
Добавляли в Android поддержку CDMA помимо GSM (комdпания Teleca):
Помогали пилить Maemo и Meego (которая теперь стала Sailfish и в последствии Авророй):
И по заявлению комментатора с Хабра даже Nokia X (тот самый Android-смартфон) помогали доделать :)
В общем вижу что тема с Moto E398 вам зашла :) А значит я анонсирую новый проект: Motorola E398 Pro Max! В общем если вы читали статью, то помните, что аппаратную платформу телефона я рассказывал на примере устройства, которое мне досталось из утиля после другого ремонтника. Здесь всё было залито флюсом, угрето, а телефон при подключении ЛБП начинал потреблять аж 250мА...
Как же ему плохо и больно. Колодку SIM - украли, MicroSD - отломали, всё угрели и упаяли и даже местами маску соскоблили...
Но вы ж не думаете, что в моём блоге, где я стараюсь реставрировать любые ретро-штучки и привести их в рабочий вид, этот телефон пойдет на распай или ещё того хуже - в металлолом?! Оказалось что у меня есть подписчик, сервисник, у которого есть некоторое количество новых контроллеров питания для E398. Он пообещал подогнать мне пару штучек, дабы я отремонтировал родную плату этого прекрасного гаджета и восстановил телефон ровно в таком виде, в каком он вышел с конвейера 22 года назад - с родным корпусом и IMEI'ем :)
Но я так подумал... а может сделать E398 Pro Max? Ну, я ведь упомянул, что сюда подходит дисплей от L7, который был в разы качественнее оригинального... да и стандартный разъём не особо удобен, можно и Type-C поставить. А может и джек тогда на 3.5мм переделать? В общем, модерская душа требует аппаратных зрелищ :)
Осторожно: данная статья - одна из моих лучших работ, посвященных истории моддинга мобильных телефонов. Если вам интересно узнать о том, как команда студентов хакала загрузчик E398, как инженеры Motorola разработали настоящее чудо и каким образом команда хакеров превращала простую "звонилку" в смартфон - приглашаю вас к прочтению!
Многие ли из вас помнят о легендарном музыкальном телефоне из далёкого 2004 года - Motorola E398? На момент выхода, модель буквально не имела аналогов на рынке и за относительно скромную цену в 150$ предлагала два огромных динамика, слот для MicroSD-карты, возможность проигрывания MP3-треков и даже неплохую поддержку 3D Java-игр. Однако Moto E398 гораздо интереснее, чем кажется на первый взгляд...
❯ Предисловие
Пожалуй давно у нас не было статей в рубрике «устройства, которые мы потеряли». В прошлом году, мы успели с вами посмотреть на самые разные гаджеты: Nokia 6600, Siemens C65, HTC Wallaby и этот список далеко не конечный. Мы узнали с вами о том, на каких аппаратных и программных платформах были построены эти устройства, на что они были способны на практике и даже хакнули один из телефонов, научив его запускать нативные программы с MicroSD-флэшки:
HTC Wallaby
Однако изучая моддинг-сцену телефонов нулевых, мы незаслуженно с вами забывали о телефонах Motorola. И зря: «моторолки» были одними из самых интересных устройств с точки зрения кастомизации, а коммьюнити моддеров существует до сих пор, спустя более чем 20 лет после выхода самых популярных телефонов компании. MotoFan всё ещё жив, в нём каждый пень пишут более 500 сообщений и общается около 30 постоянных участников, а из недавних значительных достижений — порт Doom и эмулятора NES...
Но конечно такие возможности моддинга стали доступны отнюдь не сразу. Это результат тысяч часов реверс-инжиниринга и хакинга прошивок, сборки общей базы данных и паттернов по аппаратной и программной платформе телефонов Motorola, а также сотни замыканий тест-поинтов и уходов телефона в ресет из-за испорченной памяти... Но начнём, пожалуй, с предыстории.
Коллекция EXL
❯ Появление платформы P2k
Практически всю свою долгую историю телефоны Motorola строились на базе чипсетов собственной разработки. В моделях 90-х годов использовались самые разные аппаратные и программные платформы, и уже тогда предпринимались первые попытки моддинга. Конечно сам моддинг был утилитарный и в основном заключался в удалении симлока, русификации, изменения графики — но факт остаётся фактом.
Развитию моддинга способствовало использование знакомой процессорной архитектуры m68k, которую разработала также Motorola. В те годы, процессоры этого семейства были очень популярными и использовались не только в телефонах, но и в КПК Palm, компьютерах Amiga и даже в Mac'ах. Конечно ARM уже существовал в те годы, и легендарное ядро ARM7TDMI-S понемногу лицензировалось чипмейкерами, но превосходство на рынке портативных гаджетов всё ещё оставалось за m68k и Hitachi SuperH.
В 1999 году, Motorola представила новую линейку CDMA-телефонов построенных на процессорах с новой архитектурой M-Core (в какой-то степени наследник m68k, разработанный для переносимых устройств). Архитектура отличалась от m68k тем, что была RISC (что кратно снижало комплексность декодера инструкций) и имела фиксированный размер инструкции — 2 байта, что позволяло заметно экономить флэш-память. Но самое интересное было то, что для этих телефонов Motorola разработала новую программную платформу, имя которой было P2k (Platform 2000)!
В 2001 году, Motorola продолжает выпускать телефоны с m68k и M-Core «под капотом», однако к ним добавляются модели Timeport, которые использовали чипсеты разработки Texas Instruments под названием Whitecap и построенные на совершенно другой оболочке — EMMI/Legacy. По сути, это был предшественник мегапопулярного TI Calypso, который использовался с 2003 по, как минимум, 2010 год! В свою очередь, платформа P2k всё так же продолжала развиваться и использоваться в новых моделях, а к CDMA-устройствам также добавилась первая GSM-модель под названием V60.
И вот, в 2002 году, Motorola наконец-то представляет новую платформу — Neptune LCA (Low Cost Advance), построенную на базе ARM ядра. Первым телефоном с этим чипсетом стал бюджетный Motorola C330, который получил умеренный успех, но настоящим бестселлером стала последующая модель, которая получила имя C350! Телефон был невероятным прорывом для 2003 года в сегменте ультрабюджетных устройств: за 60$ (или 4.444 рубля), C350 предлагал цветной дисплей с 12-битным цветом (как у Symbian смартфонов тех лет!), поддержку GPRS с WAP-браузером, некоторый объём встроенной памяти для хранения анимации, картинок и полифонии, и даже 2.5D игру MotoGP. Такие крутые программные фичи появились благодаря новой версии MMI, которая всё также берёт корни от той самой P2k из 1999 года...
Что такое MMI?
MMI в кнопочных телефонах — это оболочка, которую видит пользователь, или если говорить простыми словами — «операционная система». В основе MMI лежит фреймворк для построения пользовательского интерфейса и разработки приложений, менеджер окон, рендерер шрифтов и изображений, декодеры аудио/видео, иногда аудио-микшер и абстракция над API конкретной операционной системы. У Motorola такая абстракция называлась suapi.
Сам MMI разрабатывается отдельно от телефона и отлаживается в специальном симуляторе на ПК. Например для Symbian — это вариация ядра EKA под Windows (не смейтесь, так и было!), для Siemens — билд оболочки под Windows (её также распространяли в SDK для J2ME), а для Motorola — полный эмулятор Neptune LTE, включая ARM-процессор. Такие вот инженеры Motorola молодцы :)
Из серьёзных конкурентов у C350 был разве что Samsung C100, но даже он стоил значительно дороже. Однако время шло, и уже в конце 2003 года, Motorola продолжила развитие ARM-платформы Neptune, представив следующее поколение — Neptune LTE (Low Tier EDGE), которое отличалось поддержкой стандарта связи EDGE. Первым устройством на LTE стала раскладушка V600 — продолжение той самой V60, в которую инженеры Motorola установили аж 5 мегабайт встроенной памяти и, только вдумайтесь, добавили поддержку воспроизведения MP3 с битрейтом в 320кбит/с!
Однако у V600 не было слота под SD-карту, так что наличие поддержки MP3 было не особо оправданно. Но уже в 2004 году, Motorola представляет телефон, который просто перевернул мобильный рынок в бюджетном сегменте. И как вы уже поняли, речь идёт о E398! Устройство, построенное на чипсете Neptune LTE, позиционировалось как специально предназначенное для прослушивания музыки и просмотра роликов. Помимо слота под MicroSD-карты и поддержки MP3, Motorola оснастила E398 двумя огромными стереодинамиками, поддержкой воспроизведения 3GP и MP4-роликов, а также довольно шустрой Java-машиной JBlend с поддержкой MIDP 2.0. Интересно было и то, что E398 стал одним из пионеров трёхмерной графики на кнопочных телефонах благодаря поддержке программного растеризатора Mascot Capsule v2 (да, как у Sony Ericsson, но чуть постарше)...
❯ Первые шаги
Немудрено что у такой недорогой и при этом нафаршированной с точки зрения функционала модели появились свои фанаты, и как в случае с телефонами Siemens, среди них были молодые студенты-гики, которые постигали искусство реверс-инжиниринга и моддинга... Но вот незадача: в отличии от тех же самых Samsung и LG, у Motorola с Siemens загрузчики были заблокированы с завода. У Siemens'ов задача разблокировки решалась генерацией специального ключа BootKEY на основе двух других значений, уникальных для каждого процессора Infineon S-Gold: ESN и Hash:
Вам знаком интерфейс этой программы? :)
У «моторов» же вообще была неприступная стена без возможности пользовательской разблокировки, и BootROM с вторичным загрузчиком имели сразу несколько степеней защиты с проверкой RSA-подписи выполняемого кода. Но был очень важный нюанс: загрузчик нельзя было разблокировать никаким способом, а инженерность (и возможность запуска неподписанного кода) каждого процессора определялась всего лишь одним фьюзом, который прожигался на заводе при производстве чипа!
Тот самый фьюз.
И вот всего один бит, один прожженный фьюз отделял целое коммьюнити от возможности модифицировать свои телефоны... Но затем один 24х-летний парень под никнеймом @Vilko с другими ребятами умудрился отреверсить загрузчик и обнаружить, что он:
Не проверял подпись, если прошивка зеркалировалась выше первых 16МБ Flash-памяти (работало только на моделях с 16МБ — как, например, C350). Можно было пропатчить заголовки в CG1 и просто указать базовый адрес XIP контроллера + 0xFFFFFF.
Не проверялся порядок проверки подписи. Там был сложный и замороченный механизм верификации загрузки, поэтому хак с подменой порядка верификации загрузчика позволял обойти проверку подписи модифицированной прошивки и запускать произвольный код.
В вспомогательном RAM-загрузчике, который загружается через USB, была уязвимость переполнения стека, благодаря которой можно было изменить адрес возврата и заставить загрузчик прыгнуть на произвольный код. С помощью этой уязвимости можно было понизить версию загрузчика на более старую, которая обходится одним из методов выше.
И уже в 2004 году, Vilko с командой Motofan успешно хакнули загрузчики первых версий на E398. А что началось после этого... сложно описать в рамках одной статьи! Патчили конфигурацию усиления динамиков (делая их ещё громче!), драйвер камеры, меняли графику и даже писали патчи, которые так или иначе изменяли поведение телефона. Прошивку активно реверсили в IDA Pro, изучали её архитектуру, находили сигнатуры функций и по паттернам выискивали их в других телефонах на той же платформе...
В 2005 году, как бы это не звучало парадоксально, Motorola выпустила первый «Apple-телефон» — ROKR E1. По сути, это был тот-же самый E398, однако в него добавили дополнительную кнопку для запуска проигрывателя, модную белую тему и плеер iTunes, знакомый нам по продукции Apple. При этом сам iTunes был реализован в виде Java-приложения — corelet'а и тем самым привлек внимание владельцев обычных E398'ых. Гений в лице @Vilko в одиночку умудрился пропатчить прошивку от E1 и запустить её на E398...
ROKR E1
Но всё равно сообществу Motofan было мало существующего функционала и они начали думать: как бы превратить E398 в полноценный смартфон и добавить возможность запуска нативных программ, написанных на C? Поскольку функции UI-фреймворка P2k ещё были недостаточно изучены, подступиться решили к Java-машине: примерно в 2005-2006 году, предположительно с R&D подразделения Motorola в России, утекли Elf-бинарники прошивки со всей информацией о символах: имена и адреса функций, глобальных переменных, информация о секциях прошивки и другие полезные данные. Там же были найдены реализации абстракции над графической подсистемой в JBlend (Aplix JBlend использовалась во многих мобильных телефонах нулевых и отличалась относительной простотой портирования благодаря абстрагированию вообще всего что можно), а также нативные реализации методов из CLDC и MIDP.
Стоп... R&D Motorola в России?
Да! Когда-то части прошивки P2k разрабатывались в офисах в Санкт Петербурге и Владивостоке. В Питере команда занималась портированием JBlend для P2k, дабы в C380 и E398 появилась поддержка Java-приложений, а вот чем занимался офис в Владивостоке мне неизвестно. Так что первая тайна E398 заключается в том, что к её созданию приложили руки в России :)
В российских R&D явно работали ребята, которые поддерживали не только бизнес-процессы транснациональной корпорации, но и идеи сплоченного коммьюнити моддеров, так что через некоторое время после закрытия отделов, в сети оказались те самые сливы Elf'ов прошивки, а чуть позже — исходный код порта JBlend для P2k. Спасибо вам ребята, которые решили поделится этим добром, именно благодаря вам спустя 22 года моддинг-сцена Motorola продолжает развиваться на полную катушку!
К слову, разработку прошивки в РФ аутсорсила не только Motorola. У нас точно был R&D-центр LG: ко мне в комментарии пару лет назад приходил инженер-хабровчанин, который рассказывал о том, как они писали программную реализацию OpenGL ES 1.0 для телефонов на чипсетах Qualcomm для западного рынка. Есть также догадки о том, что какую-то часть разработки могла аутсорсить Nokia (или её подрядчик), но железных доказательств у меня нет :(
Некий моддер из Польши под ником elektro255 додумался, что можно пропатчить одну из функций JVM так, чтобы она при вызове с определенными аргументами загружала нативную программу по заранее определенному адресу и передавала ей управление. Это был первый простейший бинлоадер, который позволял писать несложные программы по типу игр и разных демок — но это был большой задел на будущее...
В 2007 году, в моддинг-сцене Motorola случается огромный прорыв: появляется самый первый эльфлоадер, библиотека функций и EP1 (ElfPack 1). Благодаря сливу дебаг-информации, моддеры разобрались в сложной оконной системе UIS (UI-фреймворк P2k, сложность заключается в огромном количестве стейт-машин) и научились писать полноценные программы, которые работали как нативные приложения, собранные вместе с прошивкой! Помимо этого, были найдены функции для управления потоками и щедуллером RTOS, благодаря чему появилась возможность реализовать полноценную многозадачность. Теперь эльфы могли делать полезную работу в фоне: например обновлять почту, сообщения в аське (почти пуши!) или заставить по рабочему столу бегать овечку :)
Ну а дальше процесс моддинга пошёл семимильными шагами: эльфпаки были портированы на Razr V3, V360 и другие популярные модели, а затем раскопали и модели на базе процессоров M-Core. Дело в том, что в Россию попадали исключительно «бюджетные» по видению Motorola модели на платформе Neptune LTE/LCA, в то время как на западном рынке использовались флагманские M-Core'ы. Энтузиасты получили в свои руки несколько таких телефонов, умудрились точно также их отреверсить, портировать ElfPack1 и получить почти идентичный функционал на куда более мощных телефонах с процессорами, построенных на проприетарной и почти неизвестной архитектуре... Вот это я называю высшим пилотажем!
Ну что-ж, вот такая длинная предыстория моддинга телефонов Motorola у нас с вами получилась. Но вы же не думаете, что у E398 больше не осталось тайн?!
Разбираем
Следующим делом мы разберем с вами E398 и узнаем что у него находится «под капотом». Для разборки я решил взять донорский телефон, который ко мне когда-то попал из утиля, а он в свою очередь туда попал после неудачной попытки ремонта.
Разбирается телефон очень легко: достаточно лишь открутить несколько винтов по периметру корпуса и расщелкнуть клипсы, после чего устройство разделяется на две половинки. В целом, ремонтопригодность E398 была на очень достойном уровне: заменить дисплей, динамики или клавиатуру можно было без особых навыков буквально за 5-10 минут работы. Единственное исключение — джойстик, но он на этой модели никогда не был проблемным. Также радует частичная унификация запчастей: например в E398 свободно устанавливался дисплей от E1 и L7.
Почти все чипы на плате были залиты флюсом. Кто-то пытался починить устройство прогревом всего подряд :)
Первым делом в глаза бросается блок из двух огромных динамиков. Они большие даже по нынешним меркам, а уж сам факт наличия стереозвука в внешних динамиках в 2004 году был нонсенсом даже для флагманов, не говоря уже о среднебюджетной модели. К сожалению, мне нечем замерить их уровень dB, но с патчами E398 был способен заменить среднестатистическую колонку или даже бумбокс, и при всём этом звучал качественно!
Чуть ниже, под защитным экраном скрывается сердце устройства — тот самый процессор Motorola Neptune LTE под маркировкой SC29332VG. И как бы это парадоксально не звучало для телефона с поддержкой MP3, по своим инженерным решениям он был ну очень своеобразным. Состоял он из:
Основного вычислительного ядра ARM7TDMI-S, работающего на частоте 52МГц с возможностью разгона до ~64. Для 2003 года, сам факт использования ARM7TDMI родом из 1994'го в не самом бюджетном телефоне уже был некой диковинкой: более свежее ядро ARM9T с 1999 года активно вводилось в эксплуатацию и было производительнее в 2-2.5 раза с возможностью работы на частоте до ~416МГц. Однако за сам факт использования столь старого ядра Motorola корить не стоит: те же самые бюджетные чипсеты Sysol (Samsung), Analog (LG, Hyundai) использовали аналогичное ядро, просто телефоны на их базе метили в не столь функциональный сегмент.
Вспомогательного DSP-ядра S-ONYXU 56600 собственной разработки Motorola, работающего на частоте 130МГц. В его задачи входит низкоуровневая работа с GSM-стеком, декодирование и кодирование голоса, а также декодирование MP3! При этом DSP способен легко обрабатывать треки с частотой дискретизации до 320кб/с. Именно поэтому на всех телефонах с процессорами Neptune LTE была поддержка MP3, в отличии от тех же самых Siemens'ов, где несмотря на мощный DSP, поддержку воспроизведения музыки реализовывали костылями (то через сторонний декодер, то программно, даже несмотря на заявленную поддержку MP3 в DSP S-Gold и даже E-Gold).
256 килобайт встроенной RAM и аж 1.79МБ ROM! Такой большой размер BootROM'а здесь неспроста: по заявлению @EXL, в нём хранится не только загрузчик, но и своя небольшая прошивка с самостоятельным GSM-стеком. Когда-то ходили слухи о закладках со стороны Motorola, но на практике скорее всего просто хотели выпускать ультрабюджетные телефоны вообще без флэш-памяти. У DSP есть своя дополнительная память — 381КБ ROM и 191КБ ОЗУ.
Встроенный RF-фронтэнд как для RX, так и TX-части. В его задачи входит вся «магия» по превращению цифровых GSM-пакетов из DSP в аналоговый сигнал, который затем отправляется на усилитель (PA) и далее уходит в эфир. Однако в E398 всё равно используется внешний фронтэнд, разработанный самой Motorola
Контроллеры SPI, 8080, а также USB. Из-за аппаратной поддержки USB, Neptune LTE буквально был одним из самых продвинутых мобильных чипсетов тех лет и Motorola активно продвигала использование обычного USB без UART-преобразователей. Интересно то, что контроллер RAM не поддерживал динамическую оперативную память вообще. То есть по сути, контроллера памяти и не было: из процессора напрямую выходила классическая 16-битная 8080-шина с парой чипселектов исключительно на статическую память без рефреша. Тут можно провести прямую параллель с FSMC в STM32.
Встроенный референсный кварцевый резонатор, формирующий клок для набора из двух PLL (Phase Locked Loop), которые используются для тактирования и управления частотой работы различных подсистем чипсета. Например разгон мобильных процессоров — это чаще всего перезапись регистра управления PLL (если необходимо переключить на другой источник, зависит от процессора), настройка делителей, а также напряжения VCO. Вообще, мне всегда было интересно как чисто теоретически возможно встроить полноценный кварцевый резонатор прямо в кристалл, если у кого-то есть такая информация, прошу поделится в комментариях!
Такой высокий уровень интеграции для 2003 года был очень крутым. Единственное слабое место чипсета — понемногу устаревающее на момент релиза ядро ARM7TDMI, а учитывая комплексный UI-фреймворк и сложную модульную архитектуру системы в целом, 52-х мегагерцовый процессор буквально не справлялся с таким тяжелым интерфейсом, из-за чего телефоны заметно подтормаживали и плохо показывали себя в Java-играх. Это вторая тайна E398 :)
Чуть ниже процессора расположилась микросхема комбо-памяти производства Intel под маркировкой L18SCSP. На одной подложке скрывается 32МБ NOR-памяти StrataFlash и 8МБ PSRAM. NOR-память можно было напрямую подключить в адресную шину процессора и использовать XIP (eXecute In Place) для выполнения кода напрямую с чипа памяти без сложных кэшей и необходимости предварительной загрузки в RAM. PSRAM же внутри представляла из себя обычную DRAM, плюс Refresh-контроллер с обычной 8080-шиной наружу. Именно поэтому, такая память называется псевдостатической. К слову, такие чипы памяти прекрасно поддаётся апгрейду и расширению: можно просто поставить чип большего объёма и обращаться к новым верхним адресам (если линии под них, конечно, разведены).
Правее процессора расположился Bluetooth-модуль 95L14CN. Он в свою очередь требует отдельный 26МГц кварцевый резонатор для работы и несколько конденсаторов с резисторами, а к процессору он подключен по шине UART. Именно поэтому скорость работы была не слишком высокой (сейчас BT-модули чаще подключают через SDIO или USB). Правее расположился чип LP3933, который отвечает за Fun-lights (светодиоды, подмигивающие в ритм музыки) и подсветку дисплея. Так что если у вашего «мотора» не работает подсветка — смотрите в сторону этого драйвера... или переделывайте подсветку на LM-ку с Samsung C100 :)
С верхней части платы скрывается усилитель сигнала Skyworks SKY77501-14. Есть один важный момент: обычно усилители всегда подключаются напрямую к VBAT (питанию аккумулятора) без каких либо внешних DC-DC преобразователей и ключей, и иногда они могут выходить из строя, даже если телефон выключен. Так что если ваш «мотор» ни с того ни с сего перестал включаться — проверьте PA на нагрев и если нужно — замените. Чуть левее усилителя расположился RF-фронтэнд MC13777P в паре с ещё неким модулем, который в схеме помечен как фронтэнд. К сожалению о деталях реализации RF-части ничего подробнее рассказать не смогу :)
С обратной стороны платы нас поджидает ещё одна, уже третья тайна Motorola E398... и это — чип ATi Imageon 2250. Да, в телефоне за 6 тысяч рублей был установлен полноценный GPU. Однако несмотря на то, что в 2003 году, 3D-графика в телефонах и КПК только зарождалась, именно этот Imageon является 2D-ускорителем. В его задачи входит быстрая аппаратная отрисовка изображений (блиттинг), спрайтов, линий, прямоугольников и всё это с аппаратным альфа-блендингом и поддержкой различных растровых операций (умножение, суммирование, прозрачность через колоркей). Помимо этого, чип поддерживает работу с камерой, декодирование MJPEG и содержит в себе встроенную память для фреймбуфера. Дело в том, что чипсет Neptune LTE со своим ARM7TDMI ядром не был способен на быструю отрисовку графики исключительно силами процессора на телефонах с разрешением дисплея выше 128x128, поэтому инженерам пришлось прибегнуть к использованию стороннего GPU.
Этот крошечный GPU был функциональнее почти любой настольной 2D-видеокарты из 90-х
Чуть ниже ATi расположился контроллер питания, который также разработан Motorola. По плате видно что его грели в первую очередь — это часто делали некоторые олдовые ремонтники в нулевых годах (да и сейчас делают). На него даташита я не нашел, однако судя по схеме он отвечает за зарядку литиевых аккумуляторов, транзисторную защелку разрешения подачи питания, содержит в себе несколько LDO для формирования шин питания различных подсистем телефона, АЦП для микрофона, а также усилитель для динамика. И вот тут есть интересное инженерное решение: дело в том, что усилитель в КП только один и предназначен он для одного внешнего динамика. А поскольку в E398 их два, для второго используется дополнительный усилитель LM4879IBLX.
В качестве дисплея используется TFT-TN матрица неизвестного производителя (скорее всего Sharp) с разрешением 176x220, которая подключается к GPU с помощью параллельной 16-битной RGB-шины (GPU устанавливает пиксель, дергает CLK, когда одна строка изображения подготовлена — дергает HSYNC, затем когда кадр подготовлен — дергает VSYNC).
Вот такой был конструктив у Motorola E398! Причем эта же платформа использовалась без изменений и в других легендарных телефонах компании: например Razr V3 и V3i, V360, KRZR K1, SLVR L3, SLVR L6, SLVR L7...
❯ Прошиваем...
По правде сказать, я практически не встречал E398'ые без какого-либо моддинга. Может быть не у всех были монстрпаки (кастомные прошивки) с EP, но во многих были установлены различные твики и самый главный — усиление громкости динамика.
Перед прошивкой «мотора» необходимо сначала забэкапить раздел PDS (калибровки радиотракта) с помощью программы Flash & Backup, проверить версию загрузчика ( @EXL в комментариях напишет их отличия) и выбрать монстрпак на выбор. @EXL рекомендует прошивку DAR-Test как самую нафаршированную и собранную частично из хаков и частично из слитого исходного кода P2k. По сравнению с оригинальной прошивкой, кастом в себя включает:
Поддержка 2ГБ MicroSD вместо стандартного ограничения в 1ГБ
Поддержка Bluetooth в Java-приложениях
Хак плеера для включения поддержки 320кбит/с в MP3-треках.
ElfLoader с диспетчером задач и возможностью загрузки эльфов первой и второй версии. Именно этот патч превращает E398'ой в смартфон!
Три альтернативных музыкальных плеера. Почему бы и нет? :)
Возможность разгона процессора до 65МГц.
Далее необходимо прошить специальный файл — Flex. По сути, это файловая система с пользовательскими данными. Прошивка Mini Flex форматирует телефон до заводских настроек, дабы точно ничего не мешало прошить монстрпак. Теперь можно установить и саму прошивку. Скачать DAR можно с всё ещё живого мотофана по прямой ссылке. Файл с расширением fsw открываем в Flash & Backup, переводим телефон в бутлоадер, зажав * и # при включении и если у вас версия загрузчика — 07.D0, то можно спокойно прошивать телефон. Если отличается — напишите @EXL и не шейте вслепую, иначе возможно придется замыкать тест-поинт!
Если после прошивки телефон включается без проблем — поздравляю, вы только что превратили свой E398'ой почти в полноценный смартфон!
❯ Включаем...
После включения нас встречает такая ламповая, но по мнению некоторых «васянская» тема в стиле Windows 7. В те годы темы в стиле десктопных операционных систем были очень популярны: почти под каждую платформу обязательно были темы в стиле XP, Vista и 7'ки, а также Ubuntu и Debian :)
Motorola Luna Royale?
Как я уже говорил ранее, у телефонов Motorola была сложная UI-подсистема, которая называлась Synergy. Она практически вся построена на стейтмашинах и абстракциях, из-за чего слабенькому ARM7TDMI порой тяжело справляться с обработкой и отрисовкой интерфейса. Однако мощность Synergy позволяла реализовывать довольно сложные и комплексные интерфейсы, и главное меню — один из примеров. Его можно было кастомизировать до неузнаваемости: добавить эльфы, патчи, ярлыки к различным приложениям и многое другое.
Примерно в 2005-2006, к UIS прикрутили поддержку векторных сглаженных ttf-шрифтов. Это фича сонериков, нокий и моторов, другие телефоны чаще всего продолжи использовать битмаповые шрифты.
Несмотря на довольно мощный родной плеер в E398, энтузиасты взяли и написали ещё несколько дополнительных. В прошивке DAR присутствует три кастомных плеера на любой вкус: с темами, специальными опциями и другими полезностями. Кроме того, благодаря патчу появлялась возможность воспроизведения MP3-треков с битрейтом аж в 320кбит/с. А уж как играл E398 с патчами... да, пожалуй до такого качества отнюдь не каждый современный смартфон дотягивает. Из тех, что были реально в разы лучше могу вспомнить только ZTE Axon 7:
Также теперь в E398 появился полноценный файловый менеджер с доступом ко всем «дискам» телефона. Через него мы можем не только на лету редактировать коэффициент усиления динамиков и делать всяческие твики, но и запускать те самые эльфы...
Какие возможности давали эльфы? Да практически любые! Сетевые сервисы, клиенты мессенеджеров и почты, игры и даже банальные утилиты — всё это писалось абсолютно бесплатно энтузиастами, которые хотели чуточку расширить функционал своего телефона. Один из эльфов, к примеру, позволял зажать обе софт-клавиши и озвучить время голосом!
Один из самых полезных эльфов позволяет разогнать или наоборот затормозить ядро ARM7TDMI. Конечно с частотами лучше не баловаться, иначе есть риск зависания, однако любые Neptune LTE спокойно гонятся на 12МГц, то есть потенциальный прирост производительности может составлять около 23%. И он действительно чувствуется!
А сейчас телефоны Motorola становятся ещё и объектом интереса среди демосценеров. Например EXL сюда портировал эмулятор Денди, Дум и 3D-движок с GBA, а также ковыряет перспективы использования GPU Imageon. И пусть далеко не все оценили пост с его стараниями по портированию разных демок на E398, мы то знаем что он делает крутые и интересные вещи. Настоящий балдежник!
❯ Заключение
Вот так и получилось, что целых 22 года назад, компания Motorola выпустила пожалуй одну из лучших своих моделей телефонов. И несмотря на все косяки и недостатки, E398 стал действительно народным аппаратом. Настолько народным, что нашлись энтузиасты, которые отреверсили прошивку и хакнули телефон настолько, чтобы превратить его почти в полноценный смартфон...
А что вы думаете о E398? Пишите своё мнение в комментариях!
А если вам интересна тематика ремонта, моддинга и программирования для гаджетов прошлых лет — подписывайтесь на мой Telegram-канал «Клуб фанатов балдежа», куда я выкладываю бэкстейджи статей, ссылки на новые статьи и видео, а также иногда выкладываю полезные посты и щитпостю. А ролики (не всегда дублирующие статьи) можно найти на моём YouTube канале.
Если вам понравилась статья и вы хотите меня поддержать, у меня есть Boosty, а также виджет на Пикабу ниже. А ещё мне можноотправить какое-нибудь интересное железо: устройства на WinCE/WinMobile, китайские кнопочники, китайские подделки на iPhone/Samsung из начала 2010-х, ретро-ПК железо - всё это я очень люблю :) Всем огромное спасибо!
Что думаете о Moto E398?
Какой был лучший телефон из нулевых?
Что думаете о статьях в таком формате?
Статья подготовлена при материальной и корректорской поддержке @Timeweb.Cloud. У TimeWeb Cloud есть блог компании на Пикабу, поэтому реклама совершенно легальная :)
И тут, уважаемый автор, OpenAI не облажались))) Я бы сказал, облажались вы — потому что у вас нет $20, чтобы платить за технологии. Вторая «лажа» в том, что мы живём в обществе, которое эти технологии не способно создавать, а способно только находить изъяны и кричать об этом.
(ссылка на гитхаб и на готовый продукт - в конце статьи.) OpenAI добавляет водяной знак на все видео из Sora. Типа защита. Только вот оригиналы без водяных знаков лежат на тех же серверах — и забрать их может любой авторизованный пользователь. Я написал расширение, которое это делает в один клик. Рассказываю, как нашёл и почему это вообще работает.
С чего все началось:
Я не такой частый юзер Sora, но когда увидел, что люди ПРОДАЮТ доступ к видео без водяных знаков — сначала подумал, что они сделали машинное обучение и фотошопом каждый кадр обрабатывают. Но когда я попробовал - результат был готов за 1 секунду. В тот момент я осознал: ЗНАЧИТ ВИДЕО ЛЕЖАТ НА СЕРВЕРАХ. Во мне проснулся инстинкт хакера, и я начал искать ДЫРУ.
Первым делом я полез изучать вкладку Network, пробуя различные методы тыка туда-сюда. Всё что удалось оттуда получить - это подтверждение, что да, оригинал видео без водяных знаков есть на сервере.
Например, при открытии видео мы видим запрос на получение медиафайла: /backend/project_y/post/s_69491ee99e408191addbc9b74004ebca/tree?limit=20&max_depth=1
Который и отдаёт URL для видео с водяным знаком, но в том же ответе присутствуют и другие поля:
Нас интересует поля source и source_wm, URL на видео без водяного знака и с водяным знаком соответственно. Проблема в том, что OpenAI в оба поля вставляют одинаковый URL. Но само наличие поля source указывает на то, что изначально оригинал там был - а значит, вероятно, до сих пор где-то есть.
Первым делом я подумал - ха, так можно просто попробовать подобрать URL, вставляя нужный gen_id/task_id/post_id. OpenAI использует целых три идентификатора для обозначения видео. Но ничего из этого не получилось, потому что в каждом URL присутствует параметр подписи (signature), который генерируется на стороне сервера и который невозможно брутфорсить.
Значит проблема где-то в другом месте...
Возвращение к истокам
Спустя пару часов безуспешных попыток я вдруг вспоминаю: стоп, у них же был другой сайт! Не зря этот называется Sora2 - на первом я что-то не припомню водяных знаков, а аккаунт тот же!
И вот я иду на старый сайт Sora, открываю старое видео - запрос уже другой: /backend/generations/gen_01kbk5p1s5f9pb63q81sx9atax
В нем используется gen_id вместо post_id. Я подумал - это оно! Но когда я получил gen_id для видео из новой Sora и попытался выполнить запрос с ним - получил ошибку. Хм, значит снова мимо, едем дальше.
Дальше я начал смотреть - а что еще всплывает во вкладке network? Я при открытии сайта я увидел странный запрос: /backend/notif?limit=10
Который возвращает всю нашу библиотеку (и Sora1, и Sora2) во всех возможных качествах, включая тот самый source, который Sora2 не хотела отдавать:
Всем привет, после прототипирования клона термопро ик 1-10 кд про на ардуино и макетке из прошлых моих постов про контроллер, захотелось сделать без колхоза, тут я расскажу о схемотехнике оригинальных контроллеров, присутствуют интересные решения, так же о тонкостях при создании своего клона, итак требования: 1. Полная схемотехническая копия плат, чтобы детали были взаимозаменяемы с оригинала на мой и обратно. 2. Полная совместимость по монтажным отверстиям для кнопок, отверстий для крепления в корпусе. 3. Использовать такой же микроконтроллер, как и в оригинале(stm32f103cbt6/gd32f103cbt6). 4. Реализовать все функции доступные в оригинале.
Оригинальный контроллер состоит из трех плат: 1. Основная плата, где распложены кнопки , дисплей и непосредственно сам микроконтроллер:
2. Вторая плата, на ней расположен трансформатор для питания всего контроллера, симистор и moc3063, из фоток к сожалению только распаянная:
3. Ну и третья платка с преобразователем uart-usb и разъемом подключения к пк(ее фотки у меня не осталось, как и самой платы).
Начал я с отрисовки схемы, основной платки, хотя можно было бы сделать 1 в 1 кинув на сканер, но захотелось развести самому, вот схема, которая у меня получилась:
Схема с некоторыми упрощениями, но полностью рабочая, из интересного это реализация опроса матрицы кнопок, задействованы те же GPIO микроконтроллера, что и для записи информации в дисплей, соответственно отсюда вытекает прикол, если нажать две кнопки, которые буду на одной строке например как на фото
То на дисплей информация будет передана некорректно, появятся артефакты как на видео, а еслт сильно постараться, то придется перезапускать контроллер
Так же интересно реализована работа с памятью, так как отдельной eeprom на плате нету, а так же нету у самого stm32, то запись настроек происходит во flash память, но вопрос когда? Сразу после изменения параметра? Или спустя некоторое время? В ходе экспериментов было выяснено, что настройки запоминаются прямо во время выключения, а сделано очень хитро, на схеме есть gpio у микроконтроллера, который я обозначил как STBY:
Так вот функции у него две, детект переходя сетевого напряжения через ноль, для этого к этому входу подключен транзистор и rc цепочка, и напрямуб к выводу трансформатора, я обозначил как 6VAC1, вот осциллограмма:
Желтый сигнал непосредственно на пине STBY относительно земли, а голубой с вывода трансформатора, относительно земли, так вот получается частота 50гц, соответственно когда мы выключаем контроллер, 50гц с ножки мк пропадают и тот начинает запись параметров, заряд конденсаторов на плате еще остается и этого хватает для записи параметров во внутреннюю флэш. Довольно интересное решение. Ну а теперь мой вариант разводки платы, далеко не супер, делалось ночами и на скорую руку:
Из того что убрал: разделение питаний аналогового на термодатчики и цифрового, в оригинале между ними стоит дроссель, я его не стал применять, смысла в нем не увидел, так же убрал защитные диоды по входу с термодатчиков, тоже смысла нет, особо они не спасут. На схеме этих элементов у меня тоже нет, в остальном все схоже.
Следующей отрисовал плату с трансформатором и симистором, ее схемы особо нету, ибо она очень простая, рисовал буквально без схем:
Ну и следом плата с преобразователем uart-usb:
Ну а дальше готовые платки приехали:
Заказал сразу несколько комплектов:)
Вот сравнения моих плат и оригинала:
Вроде неплохо, перекинул все детали на свои, в том числе и родной мк для проверки плат на наличие ошибок, все заработало, не без косяков конечно, но там буквально по мелочи:)
Ну а дальше самая сложная часть, написание прошивки) заняло больше всего времени, но по итогу результат неплохой: 1.Запоминание параметров перед выключением как и в оригинале 2. Полностью реализован протокол обмена с термопроцентр, смена языка, звуковые метки в контроллер, в том числе и ограничение диапазонов уставки, в прошлом прототипе я этого не делал. 3. Управление симистором с помощью алгоритма Брейзенхама, работает благодаря тому же сигналу на пине STBY, получилось прикольно. 4. Поправил отслеживание нажатия двух кнопок в строке, если контроллер это детектит, то дисплей перезагружается, в целом в 8 случаях из 10 артефактов как на видео на оригинале у меня нету, а так же срабатывание кнопок сделано не по нажатию, а по отпусканию, в оригинале же по нажатию, соответственно как тока кнопку нажимаем, сразу запись в дисплей, но если нажаты две, то запись белеберды) у меня такого нет. 5. Реализовал полуапаратный параллельный протокол для работы с дисплеем lcd1601, кто разбирается - знает, что там очень большие задержки нужны, они сильно тормозят код, у меня же нет:)
Вот собранные мои платки и контроллер:
Ну и пару прогонов с него:
Довольно неплохо работает сам пид:) остается изготовить копию корпуса и наклейки, пока что собрано в оригинальном корпусе. Вот кстати как это выглядит в корпусе:
По итогу полная совместимость, моя прошивка подходит в оригинальные контроллеры))) как и все детали на плате, полный клон.
Разработчик Jane Manchun Wong, известный реверс‑инженер, нашёл в коде приложения Spotify упоминание о новой функции под названием “SongDNA”. С помощью анализа кода она смогла создать скриншоты, показывающие, как SongDNA будет выглядеть в приложении. По её данным, функция предоставит визуальный интерфейс, позволяющий пользователям просматривать кредитные записи треков и альбомов, видеть связи между участниками и исследовать их другие работы.
Spotify работает над SongDNA, новым способом открывать для себя артистов и команду, стоящую за каждой песней.
Как будет работать
SongDNA предполагает возможность навигации по кредитам: пользователи смогут увидеть, кто писал тексты, продюсировал, микшировал, исполнял вокальные партии и т.д. На примере актрисы Rei Ami из проекта “KPop Demon Hunters” было продемонстрировано, как её голос встречается в других треках, не связанных с фильмом.
Если функция будет выпущена, она может стать конкурентом интерактивных кредитов в сервисе TIDAL, где также можно исследовать вклад различных участников в любимые композиции. SongDNA будет полезна как профессионалам музыкальной индустрии, ищущим потенциальных партнёров, так и обычным слушателям, желающим узнать больше о людях, стоящих за созданием музыки.
Реакция Spotify
Сразу после публикации скриншотов Wong сообщила, что в обновлении приложения были удалены все упоминания о SongDNA. На запрос о комментариях Spotify отказался предоставлять дополнительные детали, но и не опроверг наличие функции.
Другой реверс‑инженер и технолог Chris Messina подтвердил существование SongDNA, обнаружив в коде ссылки на неё. По его словам, строки кода указывают, что функция может раскрывать сеть соавторов песен, позволяя пользователям исследовать их работы.
SongDNA, по текущим данным, ориентирована в первую очередь на людей, участвующих в создании музыки, а не на саму музыкальную составляющую. Пока функция остаётся закрытой, её потенциальный запуск может изменить способы знакомства слушателей с творческими командами за треками.