Faq по созданию карты прошивки для X120resman’а

В инструкции подробно излагается процесс создания карт прошивок X120resman’а.

Содержание

 

1. Смысловое значение файлов карты 2. Звуки 3. Игры 4. Картинки 5. Регуляторы громкости 6. memory.ini

 

 

Создание карты здесь будет рассматриваться на примере X210XEFF2 Карта для X120ResMan’а состоит из 4-х папок: Data, TempMelodies, TempPic и TempJava В папки TempMelodies, TempPic и TempJava, как правило, копируются мелодии, картинки и java-файлы соответственно, которыми мы заменяем стандартные ресурсы при работе программы. Поэтому при создании карты эти папки остаются пустыми! Основная информация о прошивке хранится в папке Data в файлах с расширением .lst и в файле memory.ini В подкаталоге Pic папки Data хранятся картинки, которые прописаны в карте Итак, начнём создавать карту: Копируем папку X120XEDJ2 из папки X:\\Documents and Settings\\»Имя текущего пользователя»\\Application Data\\X120ResMan\\ , где X — это имя системного диска (на котором стоит ОС) в другое место (например, на Рабочий стол) и теперь будем работать только с этой копией, папку можно закрыть. Переименовываем папку так, чтобы она называлась так же, как и версия прошивки, для которой делается карта (в нашем случае мы переименовываем в X210XEFF2). Заходим в папки TempMelodies, TempPic и TempJava и удаляем оттуда все файлы, если они там есть (в папках с картинками обычно хранится системный файл Thumbs, который содержит эскизы изображений для быстрого их просмотра в режиме Эскизы страниц и имеет иногда значительный объём . Чтобы увидеть этот файл, нужно зайти в Сервис/Свойства папки, перейти на вкладку Вид и снять флажок Скрывать защищённые системные файлы Его тоже нужно удалить) Заходим в папку Data и начинаем редактировать файлы(Открывать их надо с помощью стандартного блокнота):

Смысловое значение файлов карты

Файлы lst, которые оканчиваются на Files (MelodiesFiles, JavaFiles и PicFiles), на Names (не StdNames) и на Size (MelodiesSize, JavaSize и PicSize), используются для хранения информации об уже заменённых ресурсах. Например, когда мы выбираем для замены определённую мелодию, то программа помещает эту мелодию в папку TempMelodies, а в файлы MelodiesFiles и MelodiesNames по порядковому номеру заменяемой мелодии записывает название файла этой новой мелодии(чтобы найти её в папке TempMelodies), а в файл MelodiesSize — размер новой мелодии. Так что после закрытия программы данные о заменяемых мелодиях сохраняются Файлы lst, которые оканчиваются на StdNames (или содержат этот кусок текста), используются для хранения списка названий ресурсов (файл программой не изменяется) Файлы lst, которые оканчиваются на StdOffsets (или Offsets), используются для хранения информации о каждом стандартном ресурсе — его размера и смещения в таком виде, каков он в прошивке Файлы lst, которые оканчиваются на Table, содержат смещение, по которому находится информация о каждом ресурсе в файлах, которые оканчиваются на StdOffsets (или Offsets) Файлы, которые начинаются на Volumes, содержат информацию для регуляторов громкости Файл memory.ini содержит различную информацию, такую как: — адреса свободных регионов для помещения новых ресурсов — патч на снятие ограничения воспроизведения мелодии в 64 Кб — флаги, которые разрешают или запрещают появление или использование отдельных функций в программе (замена мелодий, замена картинок, замена игр, регуляторы громкости) В папке Pic в папке Data содержатся примеры картинок, прописанных в карте

Звуки

MelodiesNames

Этот файл содержит имена для звуков. Открываем его, удаляем старые данные, сохраняем и начинаем заполнять(название каждого нового звука начинается с новой строчки): 1) По порядку вписываем названия стандартных мелодий, начиная с 1-й и заканчивая последней (это смотрим в телефоне) 2)После мелодий пишем названия для 10-ти звуков на смс, например вот так: SMS 1 SMS 2 SMS 3 SMS 4 SMS 5 SMS 6 SMS 7 SMS 8 SMS 9 SMS 10 3) Вписываем названия звуков клавиатуры для каждой цифры, начиная с 0 и заканчивая 9 (Можно один набор, можно несколько.) Заменяются только наборы Ребёнок, Девушка и Женщина! Например: Женщина 0 Женщина 1 Женщина 2 Женщина 3 Женщина 4 Женщина 5 Женщина 6 Женщина 7 Женщина 8 Женщина 9 4) Далее вписываем(звуки включения, выключения): Включение (классич.) Выключение (классич.) Включение (весёл.) Выключение (весёл.) 5) По желанию можно вписать: Звук соединения Звук USSD-запроса Звук разрядки батареи 6) Для раскладушек можно добавить: Звук крышки — Будущее (открытие) Звук крышки — Будущее (закрытие) Звук крышки — Хрустальный (открытие) Звук крышки — Хрустальный (закрытие) ИТОГО у меня получилось следующее содержание для Х210:

Chinese Dance Happy Birthday Hello Christmas Dance Samba Party Snow Peer Gynt Cool Bell 1 Bell 2 SMS 1 SMS 2 SMS 3 SMS 4 SMS 5 SMS 6 SMS 7 SMS 8 SMS 9 SMS 10 Женщина 0 Женщина 1 Женщина 2 Женщина 3 Женщина 4 Женщина 5 Женщина 6 Женщина 7 Женщина 8 Женщина 9 Включение (классич.) Выключение (классич.) Включение (весёл.) Выключение (весёл.) Звук соединения Звук USSD-запроса Звук разрядки батареи Звук крышки — Будущее (открытие) Звук крышки — Будущее (закрытие) Звук крышки — Хрустальный (открытие) Звук крышки — Хрустальный (закрытие)

Теперь нам нужно посчитать, сколько у нас вышло звуков. Для этого копируем содержание нашего файла MelodiesNames(жмём Ctrl+A или жмём Правка/Выделить всё и нажимаем Ctrl+C (или жмём Правка/Копировать) , создаём новый документ в Microsoft Word и всталяем содержимое туда(жмём Ctrl+V или жмём Правка/Вставить. Далее выделяемвсё (Ctrl+A), жмём Формат/Список , выбираем вкладку Нумерованный и там выбираем сверху второй слева прямоугольник и жмём ок. Теперь по последней цифре определяем количество звуков P.S. Теперь вы знаете, как легче посчитать количество строк, не считая вручную… В нашем случае количество звуков равно 41. Запоминаем эту цифру (у вас она может быть другая)

MelodiesFiles

Здесь нужно вписать столько строк [Стандартная мелодия], сколько у нас получилось звуков (чтобы не париться вручную, делайте тоже с помощью нумерованного списка) Вот то, что получилось у меня:

[Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия] [Стандартная мелодия]

MelodiesSize

Здесь нужно вписать столько строк с нулём (0), сколько у нас было звуков. Вот, что получилось у меня:

0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

MelodiesTable

Здесь хранится смещение таблицы для каждого звука по порядку, как они перечислены в MelodiesNames Подробнее об этом: Звуки в прошивке хранятся следущим образом: в определённом месте задана таблица звуков, в ней для каждого звука выделено 8 байт (байтом считаются 2 символа) Первые 4 байта — это смещение, которое записано в формате Little Endian. Это означает, что, допустим, если звук записан по адресу 0x008D4ED0, то в таблице его адрес указан так: D04E8D00 (т.е. смещение читается справа налево по одному байту) Вторые 4 байта — это размер звука, заданный в шестнадцатиричной системе счисления(HEX), и тоже в формате Little Endian. Это означает, что если размер звука в десятичной системе счисления (DEC) 21000 байт, то в HEX это будет 5208 (4 байта — это 00005208) Значит в таблице размер будет записан 08520000 (опять же Little Endian) Для поиска адреса таблицы воспользуемся SFE версии 1.7.28. Запускаем программу, жмём Файл/Открыть и выбираем bin-файл прошивки, для которой мы делаем поддержку. Программа скорее всего выдаст сообщение о том, что модель телефона не поддерживается. Жмём ок, на запрос программы поискать все таблицы автоматически отвечаем Нет. Переходим на вкладку Sounds и жмём Найти звуки Появится список звуков прошивки. Первые звуки — это всегда стандартные мелодии, так что выделяем первый звук и жмём Найти ссылку на звук Программа найдёт значение адреса таблицы для первого звука в таком виде: например, для Х210 — это 0х008A8E60. Копируем в первую строчку файла MelodiesTable всё, что идёт после 0х (у нас это 008A8E60). Теперь считаем, сколько у нас стандартных мелодий, и дублируем это значение столько раз, чтобы количество строк с этим значением равнялось количеству стандартных мелодий. Так как каждое новое значение таблицы идёт через 8 байта, то добавляем к первому значению 8 байт (008A8E60+8=008A8E68). Т.е. во второй строчке исправляем 0 на 8. Теперь к значению во второй строчке (008A8E68) прибавляем 8 байт (008A8E68+8=008A8E70) Т.е. в третей строчке я изменяю 60 на 70 (в принципе только 6 на 7) НО! Не во всех моделях на один звук отводится 8 байт. Например, в Х210 на каждый звук отводится 12 байт (это можно определить, вычтя значение таблицы какого-либо звука из значения таблицы следующего за ним звука, а значения таблицы можно вычислить в SFE кнопкой Найти ссылку на звук) Поэтому в Х210 мне придётся прибавлять к каждому значению не 8, как это в большинстве случаев, а щестнадцатиричное значение 12-ти — С Не забывайте, что при задании адреса используется шестнадцатиричная система счисления (почитайте о ней где-нибудь подробнее). Здесь после 9 идёт A,B,C,D,E,F, а после F уже добавляется еденица в старший разряд И так далее для каждой строчки, теперь посмотрим, что получилось у меня (в Х210 10 стандартных мелодий):

008A8E60 008A8E6C 008A8E78 008A8E84 008A8E90 008A8E9C 008A8EA8 008A8EB4 008A8EC0 008A8ECC P.S. Шестнадцатиричные вычисления можно производить в стандартном калькуляторе, перейдя в Инженерный режим и поставив галочку на HEX под таблом… Теперь в SFE нажимаем Экспорт всех звуков и выбираем папку, куда экспортировать звуки, и введя общее имя для всех файлов (например, «а»). Теперь переходим в ту папку, куда экспортировали и с помощью любой программы для воспроизведения mmf (например, MidiRadioPlayer) прослушиваем звуки после стандартных и ищем первый звук SMS. Находим, под каким он номером, выделяем звук с этим номером в SFE и опять ищем для него ссылку (жмём Найти ссылку на звук) и вставляем после значений таблиц для стандартных мелодий в файл MelodiesTable Теперь по такому же принципу, как и мелодии (учитывая то, что звуков на смс — 10), увеличивая значение таблицы для первого звука на 8 (или 12) байт, прописываем значения таблицы для остальных звуков смс. Теперь в папке, куда мы экспортировали звуки, ищем произношение слова 0 для того набора звуков клавиатуры, который мы прописали (заметьте, что мы записываем в файл MelodiesTable значения строго по тому порядку, как у нас прописаны мелодии в файле MelodiesNames , Когда найдём, аналогично звукам смс вписываем 10 значений таблицы для звуков клавиатуры Теперь ищем Классический звук включения. Искать его особо не надо, т.к. его можно найти по размеру (1147) в списке звуков в SFE. За ним всегда идёт Классический звук выключения, далее весёлый звук включения и весёлый звук выключения. Для них также прописываем значение таблицы А теперь, руководствуясь содержанием файла MelodiesNames, дописываем в том же порядке значения для остальный звуков. Размер звук разрядки батареи — 191, USSD-запроса (когда, допустим, првоеряем счёт, при появлении информации проигрывается звук) — 399, звуков соединения в прошивке 2 одинаковых, но мы берём тот, который идёт 1-й по порядку, размер его — 220 При заполнении значений таблицы для каждой группы (мелодии, звуки смс, звуки клавиатуры и т.д.) проверяйте значения следующим образом — смотрите значение последнего звука группы в вашем файле и вычислите его в SFE. Если они совпадают, значит должно быть всё нормально Когда закончите заполнение файла, проверьте, чтобы не было пустых строк и чтобы количество строк совпадало с количеством строк в MelodiesNames Вот, что в целом получилось у меня:

008A8E60 008A8E6C 008A8E78 008A8E84 008A8E90 008A8E9C 008A8EA8 008A8EB4 008A8EC0 008A8ECC 008A8F74 008A8F80 008A8F8C 008A8F98 008A8FA4 008A8FB0 008A8FBC 008A8FC8 008A8FD4 008A8FE0 008A92EC 008A92F8 008A9304 008A9210 008A921C 008A9228 008A9234 008A9240 008A924C 008A9258 008A8EE4 008A8EF0 008A8EFC 008A8F08 008A8F14 008A8FEC 008A8F50 008A9364 008A9370 008A937C 008A9388

Игры

Теперь приступаем к редактированию файлов, которые отвечают за замену стандартных игр

JavaFiles

Считаем, сколько у вас стандартных игр (обычно их 4, но вот, например, в Х140 их 3, а в Х210 вообще 2) Теперь количество игр умножаем на 2 и прописываем полученное число раз строчку [Стандартная игра] . В нашем случае, т.к. игр 2, то мы прописываем в этот файл 4 таких строчки Вот, что в целом получилось у меня:

[Стандартная игра] [Стандартная игра] [Стандартная игра] [Стандартная игра]

javahelp

Это файл оставляем без изменений (также и pichelp) Эти документы содержат текст, который отображается на вкладках Замена игр и Замена картинок соответственно

JavaSize

Этот файл содержит текущую информацию о размере файла игры (используется для хранения уже заменённых файлов). В нём прописываем столько же нулей, сколько прописали строчек [Стандартная игра] в JavaFiles Вот, что в целом получилось у меня:

0 0 0 0

JavaStdNames

Вы не задавались вопросом, почему мы количество игр умножали на 2? Ведь дело в том, что чтобы заменить одну игру, нужно заменить для неё 2 файла: jar и jad Так вот в этом файл нужно написать имя jar и jad файла для каждой игры (видите, в конце стоит .jad и .jar) Вот, что в целом получилось у меня:

BubbleSmile.jad BubbleSmile.jar Fun2Link.jad Fun2Link.jar

JavaStdOffsets, JavaTable

Эти 2 файла удобно редактировать синхронно: 1-й файл содержит информацию из таблицы Java о каждом файле: XXXXXXXXYYYYYYYY, где XXXXXXXX — это размер файла, а YYYYYYYY — это смещение, по которому он находится (всё опять же в LittleEndian — читать выше) 2-й файл содержит адрес для каждой строки, по которому она находится в прошивке Как искать: Для поиска этой информации в прошивке нам нужна программа WinHex 1)Открываем в ней bin-файл прошивки (File — Open) 2)Выполняем поиск строчки e:\\S100\\manager_storage_settings (Search — FindText, вводим в поле эту строчку и жмём ОК) 3)После того, как строчка нашлась, мы её пропускаем и смотрим на следующую часть текста (после точек). Там должно быть что-то вроде b;‘.e:\\S100\\#Z#I#O%0020#Interactive_#Bubble#Smile_suite.jad. Так вот, теперь смотрим на строку, где расположен текст b;‘.e:\\S100\\, а именно на HEX-код этой строчки слева С самого левого края синим цветом написан адрес начала этой строчки — 009DA260, далее следует 8 байт кода: 5F000000623B9100. Это информация о файле manager_storage_settings.db (т.е. здесь принцип такой — сначала идёт код, который содержит имя файла и ещё какую-то информацию, а затем после множества нулей по какому-то адресу, в нашем случае 009DA260, расположена информация о нём: размер и смещение, как говорилось выше) Соответственно для файла manager_storage_settings.db в файл JavaTable у нас пошло бы значение 009DA260, а в файл JavaStdOffsets5F000000623B9100, но этот файл нам прописывать не нужно, так что начнём с файла BubbleSmile_suite.jad По принципу, который описан выше, мы смотрим на первые данные, отличные от нуля после описания файла. Это 0B01000054B48E00, т.е. размер файла — 0000010B(hex) = 267 байт (dec), а смещение, по которому лежит сам файл — 0x008EB454 По строчке, в которой у нас встретились данные 0B01000054B48E00,, слева смотрим значение, которое написано синим цветом. Это 009DA2E0, но не по этому адресу находится наша информация о файле (это адрес начала строчки, о чём говорит нуль в конце). Если же мы идём вправо, то этот нуль возрастает (чтобы получить ссылку для вторых 00 — т.е. для второго байта вместо нуля надо вписать 1 и т.д., подробнее читать в «Основные принципы формата s3»). Ссылка на информацию о файле будет 009DA2E8 Итого в первую строчку файла JavaTable мы вписываем 009DA2E8, а в первую строчку файла JavaStdOffsets0B01000054B48E00.т.е мы внесли информацию о файле BubbleSmile_suite.jad. Второй строчкой будет информацию о файле BubbleSmile_suite.jar и так далее, пока не закончатся игры. Помните, что количество строчек в файлах должно в конце концов совпасть с количеством строчек файлов JavaFiles, JavaSize и JavaStdNames Вот, что в целом получилось у меня: JavaTable:

009DA2E8 009DA370 009DA3F8 009DA480

JavaStdOffsets:

0B01000054B48E00 0B8301005FB58E00 EC0000006A389000 0C02010056399000

P.S. Заметьте, что значения в JavaTable через строчку отличаются ровно на 110 (так должно быть и у вас) 009DA3F8 — 009DA2E8 = 110 009DA480 — 009DA370 = 110

Картинки

Для начала нужно определиться, какие картинки нужно прописать в карту и сколько их будет. Т.к. на самом деле обычно нужны лишь картинки на группы, то я опишу здесь процесс прописывания в карту 20-ти картинок на группы (по 2 картинки на группу — из-за того, что там анимация). Если вам нужно прописать больше картинок, то действуйте аналогично.

PicFiles

Здесь нужно прописать столько строчек [Стандартная картинка], сколько картинок нам нужно прописать в карту (в нашем случае 20) Вот, что в целом получилось у меня:

[Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка] [Стандартная картинка]

PicSize

В этот файл нужно вписать столько строчек с нулём, сколько мы лпанируем прописать картинок в карту (в нашем случае 20) Вот, что в целом получилось у меня:

undefined undefined 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

PicNames

Здесь нужно по порядку прописать имена картинок, как они будут отображаться в программе. Помните, что проименованные картинки в карте — это признак качественной карты Вот, что в целом получилось у меня:

Иконка группы 1 (кадр 1) Иконка группы 1 (кадр 2) Иконка группы 2 (кадр 1) Иконка группы 2 (кадр 2) Иконка группы 3 (кадр 1) Иконка группы 3 (кадр 2) Иконка группы 4 (кадр 1) Иконка группы 4 (кадр 2) Иконка группы 5 (кадр 1) Иконка группы 5 (кадр 2) Иконка группы 6 (кадр 1) Иконка группы 6 (кадр 2) Иконка группы 7 (кадр 1) Иконка группы 7 (кадр 2) Иконка группы 8 (кадр 1) Иконка группы 8 (кадр 2) Иконка группы 9 (кадр 1) Иконка группы 9 (кадр 2) Иконка группы 10 (кадр 1) Иконка группы 10 (кадр 2)

PicOffsets и PicTable

Эти 2 файла опять же удобно редактировать синхронно. Файл PicOffsets содержит информацию о каждой картинке из прошивки в следующем виде: XXXXYYYYAAAAAAAA, где(всё опять же в LittleEndian): XXXX — это ширина картинки в HEX YYYY — это высота картинки в HEX AAAAAAAA — это адрес (смещение), по котормоу лежит картинка Например, 80007F00B2544300 означает, что картинка имеет разрешение 128х127 (0080 (hex) = 128 (dec), 007F(hex) = 127(dec)) и лежит по адресу 0x004354B2 Файл PicTable содержит адреса той самой информации из таблицы картинок, которая записывается в PicOffsets Для заполнения этих файлов нам понадобится SFE 1.7.28 и прошивка, для которой делается карта в BIN и S3 форматах Открываем в SFE прошивку формата bin. Программа скорее всего выдаст сообщение о том, что модель телефона не определена, жмём Ок, на запрос поиска таблиц ресурсов отвечаем Нет На вкладке Images жмём справа внизу Найти таблицу Если высветилось окошко с надписью Поиск завершён, то жмём Ок и пропускаем далее пункты 1,2 и 3, если же программа выдала сообщение о том, что таблица не найдена, поступаем следующим образом: 1) Заходим во вкладку FirmWareProfileCreator, вводим там разрешение экрана для модели, для прошивки под которую вы делаете карту, убираем галочки с Искать звуки и Искать Java (галочка должна остаться только на Искать картинки) и жмём Начать поиск 2) В поле Таблица картинок должно появиться смещение для таблицы картинок (если не появилось, то советую проделать аналогичные действия в SFE 2.0) 3) Копируем это значение(смещение), переходим на вкладку Images и вставляем его в поле Адрес таблицы Так или иначе, сейчас мы находимся на вкладке Images и в поле Адрес таблицы у нас есть смещение для таблицы картинок (например, на Х210 это 0x0039F338) Жмём тут же справа внизу Прочитать, а далее левее в пустой области, где наблюдается одна выделенная строчка ,жмём правой кнопкой мыши и выбираем Импорт найденных рисунков Теперь на всякий случай жмём Сохр.таблицу и выбираем, куда её сохранить, чтобы потом её можно было открыть посредством кнопки Откр.таблицу Теперь в программе находим первую картинку, название для которой у вас записано в PicNames (в нашем случае — это первую картинку групп). Все 20 картинок групп в прошивках обычно расположены по порядку. На строчке с информацией о картинке (например, в нашем случае это строчка с именем Image_107) жмём правой кнопкой мышки и в появившемся контекстном меню выбираем Изменить адрес, а в появившемся окошке жмём Найти ссылку. Справа под заголовком Адрес появится значение таблицы для этой картинки, которое ссылается немного неправильно. В любом случае, теперь открываем с помощью блокнота S3-файл прошивки, заходим в Правка/Найти (или жмём Ctrl+F) и вписываем в поле поиска то самое найденное значение, но без 0x и последний символ заменяем на 0(нуль). Например, в Х210 для первой картинки было найдено значение таблицы 0x0039F68C. В поле поиска я ввёл 0039F680 Зачем заменять последний символ на нуль? Дело в том, что в прошивке для каждой строчки стоит только нулевой адрес (адрес для первого байта строки), а далее мы уже сами считаем, каков адрес будет для 2-го,3-го и последующих байтов После этого жмём Найти далее. Строчка, которую мы ищем, должна найтись обязательно после S315 Если мы посмотрим на код, на который указана ссылка, которую мы нашли в SFE, то мы увидим, что это ссылка указывает на смещение картинки, а нам нужно, чтобы ссылка указывала на разрешение картинки, а затем уже идёт смещение. Абзац, описанный выше, означает, что нам нужно для записи значения таблицы для картинки взять адрес, найденный в SFE и вычесть из него 4 (т.е. как бы перейти на 4 байта влево), тогда мы получим значение, которое нужно записать в PicTable Для нашего случая это 0039F68C — 4 = 0039F688 Теперь в файл PicOffsets нам нужно записать информацию о картинке (те самые 8 байт: разрешение и смещение в Little Endian), для нашего случая это информация находится по ссылке 0039F688: 80007F00EA764800 (начинается она обычно с 8000, .т.к. в большинстве телефонов ширина экрана — 128) Так как в нашем случае следующие картинки идут подряд за первой, то теперь нам осталось в файле PicTable 19 раз продублировать значение 0039F688, но после первого значения идёт 0039F688 + 8 = 0039F690, затем на третьей строчке 0039F690 + 8 = 0039F698 и т.д., изменяется только последний байт в значении У нас должно получиться 20 строчек (для нашего случая) со значениями таблицы (найдите адрес таблицы для последней картинки группы в SFE, вычтите из него 4 и сравните с вашим, они должны совпасть) С файлом PicOffsets поступаем следующим образом: В открытом S3-файле прошивки копируем текст после нашего первого значения (т.к. в одной строчке помещается информация о 2-х картинках, то копируем где-то около 10-11 строчек), вставляем в наш файл и начинаем редактировать: 1) Удаляем в каждой строчке S315AAAAAAAA, где AAAAAAAA — это смещение (адрес) 2) В каждой строчке удаляем последний байт — чексум(контрольная сумма) 3) Теперь делаем так, чтобы информация о каждой картинке была на отдельной строчке, т.е. у нас в одной строчке — информация о двух картинках, помещаем курсор на место, где заканчивается информация об одной картинке и жмём Enter Итого у нас должно получиться 20 строчек (лишнюю информацию удаляем) Теперь смотрим смещение для последней картинки в вашем файле и сравниваем его со смещением последней картинки групп в SFE в поле Адрес (в строчке, где мы нажимали правой кнопкой, чтобы искать адрес таблицы). Они должны совпасть. Вот, что в целом получилось у меня: PicTable:

0039F688 0039F690 0039F698 0039F6A0 0039F6A8 0039F6B0 0039F6B8 0039F6C0 0039F6C8 0039F6D0 0039F6D8 0039F6E0 0039F6E8 0039F6F0 0039F6F8 0039F700 0039F708 0039F710 0039F718 0039F720

PicOffsets:

80007F00EA764800 80007F00D0BA4800 80007F00BCFE4800 80007F00F6424900 80007F00DC864900 80007F00F4C94900 80007F006E0D4A00 80007F00BC504A00 80007F0014944A00 80007F00A6D74A00 80007F00681A4B00 80007F00A05D4B00 80007F006EA04B00 80007F0024E24B00 80007F00E2234C00 80007F00FE674C00 80007F00E0AB4C00 80007F00BAEF4C00 80007F004C334D00 80007F0096754D00

И теперь последний этап: для прописанных картинок нужно в папку Data/Pic добавить картинки из прошивки для их отображения в программе. 1) Открываем SFE 1.7.28, открываем bin-файл нашей прошивки, переходим на вкладку Images, открываем нашу сохранённую ранее таблицу картинок, далее на любой строке щёлкаем правой кнопкой, выбираем ExportAllImages и в появившемся окне указываем путь и вводим имя, например, a 2) Заходим в папку, куда экспортировались картинки (куда указывали путь на предыдущем шаге) и выбираем те картинки, которые у нас прописаны в карте, копируем их в отдельную папку 3) Конвертируем их в формат jpg. Это можно сделать, например, с помощью ACDSee (открываем программу, находим эти картинки, выделяем их и жмём Инструменты/Конвертирование, там выбираем формат jpg 4) Если в папке остались старые картинки формата bmp, то их удаляем, пусть в папке останутся только jpg 5) Переименовываем эти картинки следубщим образом: 1 — это имя первой картинки, прописанной в карте 2 — это имя второй картинки…и т.д. в порядке возрастания и в порядке следования картинок в карте 6) После переименования копируем файлы в папку Data/Pic (не забываем потом удалить файл Thumbs)

Регуляторы громкости

Прописывать регуляторов громкости в карту трудно, так что если в не имеете хорошего опыта, то лучше пока пропустите это и переходите сразу к пункту редактирования файла memory.ini За регуляторы громкости в карте отвечают 3 файла: StdVolumes, Volumes, VolumesOffsets В программе есть такая особенность, что регуляторы громкости должны быть прописаны для 25-ти звуков (ни больше, ни меньше), имейте это ввиду

Volumes

Здесь 25 раз вписываем значение 6C (регулятор по умолчанию будет стоять на 85%) Вот, что в целом получилось у меня:

6C 6C 6C 6C 6C 6C 6C 6C 6C 6C 6C 6C 6C 6C 6C 6C 6C 6C 6C 6C 6C 6C 6C 6C 6C

VolumesOffsets

В этом файле прописываются смещения для значений громкости. Искать их нужно следующим образом: 1)Скачиваем программу BinEdit от AlexeyK (скачать последнюю версию можно здесь 2) Открываем программу и загружаем в неё bin-файл нашей прошивки ( Файл/Загрузить и выбираем bin-файл нашей прошивки) 3) На вопрос, сканировать ли прошивку, отвечаем Да, на вопрос, подгрузить ли ещё файл прошивки, отвечаем Нет, на вопрос, сохранять ли данные о прошивке, отвечаем Да 4) Справа у вас должна быть открыта вкладка Поиск, в поле, где левее написано Sw, вставляем следующуюю строчку: В зависимости от того, какое у вас количество стандартных мелодий, мы вставляем строку, которая состоит из стольки 21??E0?? (?? значит то, что на месте этих символов может стоять что угодно), сколько у вас стандартных мелодий. Т.к. в Х210 10 стандартных мелодий, то мы вставляем следующую строку: 21??E0??21??E0??21??E0??21??E0??21??E0??21??E0??21??E0??21??E0??21??E0??21??E0?? После этого нажимаем Enter . Программа должна найти одно смещение (если их несколько, то берём первое). Это проявится тем, что справа появится следующиее: Расположение Hex-кода………., левее этой строки нажимаем на плюс и видим смещение. Щёлкаем на нём мышкой 2 раза 9если смещений несколько, то на первом), программа перейдёт по этому смещению в Hex-коде слева Первая строка в файла — это будет это смещение, по которому мы перешли минус 1 Например, в Х210 нашлось смещение 0x2B197F, это означает 0x002B197F, так вот, первой строкой в файле будет: 002B197F — 1 = 002B197E Теперь ещё 24 раза дублируем первую строку и исправляем их следующим образом: каждая последующая строка — это есть предыдущая плюс 4, т.е. у меня слудующая строка будет: 002B197E + 4 = 002B1982 и т.д. BinEdit с открытой прошивкой не закрываем, он нам ещё понадобиться для редактирования следующего файла! Вот, что в целом получилось у меня:

002B197E 002B1982 002B1986 002B198A 002B198E 002B1992 002B1996 002B199A 002B199E 002B19A2 002B19A6 002B19AA 002B19AE 002B19B2 002B19B6 002B19BA 002B19BE 002B19C2 002B19C6 002B19CA 002B19CE 002B19D2 002B19D6 002B19DA 002B19DE

P.S. Если у вас, например ,как на Х210, стандартных мелодий намного меньше, чем 25, то далее после мелодий может идти уже рпосто код, никакн е относящийся к громкости мелодий. В таком случае мы всё равно прописываем 25 смещений, но в программе регулируем громкость только для стандартных мелодий, а для других оставляем стандартную!

StdVolumes

В этом файле прописываются стандартные значения для громкости звуков, ищем их следующим образом: Смотрим на наше первое смещение в файле VolumesOffsets, копируем его и вставляем в BinEdit’е выше Hex-кода в поле Адрес (если не стоит галочка левее 0x, то ставим её) и жмём Enter Далее переходим на вкладку Код (выше поля Адрес правее Hex) Вот, что там для Х210:

002B197E: 0921 MOV R1, #0x9;R1 = 9 002B1980: 10E0 B loc_002B19A4 002B1982: 0821 MOV R1, #0x8 002B1984: 0EE0 B loc_002B19A4 002B1986: 0721 MOV R1, #0x7 002B1988: 0CE0 B loc_002B19A4 002B198A: 0721 MOV R1, #0x7 002B198C: 0AE0 B loc_002B19A4 002B198E: 0621 MOV R1, #0x6 002B1990: 08E0 B loc_002B19A4 002B1992: 0621 MOV R1, #0x6 002B1994: 06E0 B loc_002B19A4 002B1996: 0521 MOV R1, #0x5 002B1998: 04E0 B loc_002B19A4 002B199A: 0521 MOV R1, #0x5 002B199C: 02E0 B loc_002B19A4 002B199E: 0421 MOV R1, #0x4 002B19A0: 00E0 B loc_002B19A4 002B19A2: 0421 MOV R1, #0x4 loc_002B19A4: 002B19A4: A942 CMP R1, R5 002B19A6: 01DA BGE loc_002B19AC 002B19A8: 0691 STR R1, [SP, #0x18] 002B19AA: 00E0 B loc_002B19AE 002B19AC: 0695 STR R5, [SP, #0x18] loc_002B19AE: 002B19AE: 0699 LDR R1, [SP, #0x18] 002B19B0: 8800 LSL R0, R1, #2 002B19B2: 2649 LDR R1, =0x010059B0 002B19B4: 0968 LDR R1, [R1] 002B19B6: 23F0E4FD BL off_002D5582 002B19BA: E168 LDR R1, [R4, #0xC] 002B19BC: 0027 MOV R7, #0x0 002B19BE: C860 STR R0, [R1, #0xC] и далее…

Пока идут команды MOV, затем B, MOV, B — это идут регуляторы, но как только начинаются другие команды (в нашем случае — CMP, BGE, STR, то это уже идут не регуляторы. В Х210 регляторы видно предусмотрены только для 10 стандартных мелодий и всё, далее уже идёт другой код. В файл нужно заносить байты, которые предшествуют 21в команде в строке с командой MOV, т.е. в нашем случае это: 09,08,07,07,06,06,05,05,04,04 В большинстве телефонов код MOV, B идёт дальше и можно выписывать значения далее, но в Х210 я далее запишу 15 значений по тем адресам, которые указаны в файле VolumesOffsets, но изменят ьв программе я эти значения не буду. Потом эти 15 значений надо будет скопировать в файл Volumes после 10-ти первых (но это только в моём случае) Вот, что в целом получилось у меня:

09 08 07 07 06 06 05 05 04 04 01 00 06 26 23 E1 C8 00 26 08 06 1B 80 0F C1

memory.ini

Этот файл также открываем блокнотом и начинаем редактировать. Сначала в файле прописываются свободные регионы в телефоне для записи туда новых мелодий, игр и картинок (соответственно [Melodies], [JavaGames] и [Pictures]) StartOffset — это начальный адрес региона, EndOffset — это адрес, где регион заканчивается. Чтобы найти эти самые свободные регионы, нужно слить с телефона полный дамп и затем открыть его с помощью блокнота Свободные регионы обычно находятся в конце дампа, так что перемещаем вертикальный скроллбар в самый низ и начинаем искать Память, которая не используется, в дампе забивается байтами FF, т.е. нам нужно искать регионы, где в строчках идёт S315FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF — такие строки мы будемн азывать пустыми Начинаем с конца дампа и идём вверх и смотрим, чтобы все строчки были подобающие таким, как приведена выше. Как только встретилась строка, которая не подобает той, что выше, мы, например, для мелодий, в StartOffset вписываем адрес последней строки, которая подобает той, что выше, а в EndOffset — адрес последней такой строки. И также для игр и картинок Следите затем, чтобы для разных групп (мелодий, игр и картинок) не было пересечения (наложения) или повторения адресов, это недопустимо! Часто бывает так, что удаётся найти только один свободный регион, тогда можно распределить его между этим тремя группами, а иногда приходится делать неполную поддержку, т.к. в дампе не находится свободных регионов, например, для замены картинок или игр Внимание! В дампах очень часто замечено, что вроде бы идут всё «пустые» и «пустые» строки, но вот то, что можно не заметить: По адресам, которые оканчиваются на 000 обычно идёт 5-6 байт данных, если такое замечено, то этот регион уже использовать нельзя! Со временем, когда вы будете создавать карты, вы сами будете замечать ещё некоторые тонкости и поднаберётесь опыта в поиске свободных регионов Далее идут такие 2 строки: [StringTable] Size=1024 Это мы оставляем без изменений Patch64K= — Это патч на снятие ограничения в 64 Кб. Его вы можете скачать в теме «Патчи на AGERE», либо если же вы горите желанием научиться его делать, то обращайтесь ко мне в личку, я научу Если патча нету, то можно пока попробовать без него, оставить просто [Patches], а строку, которая начинается с Patch64K= — удалить полностью VolumePatchAvailable=1 MelTabAvailable=1 JavaTabAvailable=1 PicTabAvailable=1 Это биты переключения доступности регуляторов громкости, замены мелодий, замены картинок и игр соответственно. Если после = стоит 0, значит либо регуляторы громкости не будут доступны и использоваться вообще (для первой строки), либо не будет соответствующей вкладки, после которой стоит 0. Еденица соответственно включает эти опции Это удобно использовать ,если вы, например, не прописали картинки в карту или не смогли прописать регуляторы громкости, тогда напротив соответствующей строчки ставим вместо еденицы нуль Вот, что в целом получилось у меня:

[Melodies] StartOffset=»0x00E90000″ EndOffset=»0x00FBFFF0″ [JavaGames] StartOffset=»0x00A12240″ EndOffset=»0x00A44240″ [Pictures] StartOffset=»0x00A44250″ EndOffset=»0x00AFFFF0″ [StringTable] Size=1024 [Patches] ; !!!! не изменить этот параметр, если патч ; на регулирование громкости недоступен! ; можете повредить прошивку, и телефон станет нерабочим VolumePatchAvailable=1 MelTabAvailable=1 JavaTabAvailable=1 PicTabAvailable=1

Карту на Х210 я выложу, как только её доделаю. Советую, если у вас не получится делать карту для своего телефона, для начала «научиться», т.е. скачать прошивку X210XEFF2 и попробовать сделать карту для неё, а потом сравнить её с моей

 

Автор: das

Комментариев нет

  1. Dimanchik:

    das, спасибо за статью smile Сейчас хочу взяться за создание карты для C130… wink

Добавить комментарий