FAQ по созданию карты прошивки для X120 ResMan\’а by Cadaver

0
131

СОЗДАНИЕ КАРТЫ ПРОШИВКИ ДЛЯ X120ResMan’а

Внимание! Перед этой инструкцией настоятельно рекомендуется к прочтению FAQ по AGERE(Гуми) телефонам и Общие принципы формата s3

Создание карты здесь будет рассматриваться на примере X210XEFF2

Карта для X120ResMan’а состоит из 4-х папок: Data, TempMelodies, TempPic и TempJava
В папки TempMelodies, TempPic и TempJava, как правило, копируются мелодии, картинки и java-файлы соответственно, которыми мы заменяем стандартные ресурсы при работе программы. Поэтому при создании карты эти папки остаются пустыми!
Основная информация о прошивке хранится в папке Data в файлах с расширением .lst и в файле memory.ini В подкаталоге Pic папки Data хранятся картинки, которые прописаны в карте

СОЗДАНИЕ КАРТЫ ПРОШИВКИ ДЛЯ X120ResMan’а

Внимание! Перед этой инструкцией настоятельно рекомендуется к прочтению FAQ по AGERE(Гуми) телефонам и Общие принципы формата s3

Создание карты здесь будет рассматриваться на примере X210XEFF2

Карта для X120ResMan’а состоит из 4-х папок: Data, TempMelodies, TempPic и TempJava
В папки TempMelodies, TempPic и TempJava, как правило, копируются мелодии, картинки и java-файлы соответственно, которыми мы заменяем стандартные ресурсы при работе программы. Поэтому при создании карты эти папки остаются пустыми!
Основная информация о прошивке хранится в папке Data в файлах с расширением .lst и в файле memory.ini В подкаталоге Pic папки Data хранятся картинки, которые прописаны в карте

Итак, начнём создавать карту:

Копируем папку X120XEDJ2 из папки X:Documents and Settings”Имя текущего пользователя”Application DataX120ResMan , где 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:S100manager_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)

Вот, что в целом получилось у меня:

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 и попробовать сделать карту для неё, а потом сравнить её с моей 😉

ОСТАВЬТЕ ОТВЕТ

Please enter your comment!
Please enter your name here