Автор минуала
Dimka
Методика
Смысл методики заключается в том, что все языки разбиты на
6 групп (вообще 7, но одна не задействована):
LATIN (все основные языки);
ARABIC; HEBREW; CHINESE; CYRILLIC (не используется и не возможно задействовать);
THAI; VIETNAMESE. И для каждой группы определен свой шрифт в лэнге. Например, для группы
LATIN определен шрифт под номером $01 в лэнге. В группу
LATIN входят ВСЕ языки кроме языков
$2D $08 $04 $05 $0B $0C. Вот получается, что можно добавить в лэнг языки из других групп, в эти языки загрузить русские строки и назначить на эти языки дополнительные шрифты, которые конечно нужно добавить в лэнг. В кодовой группе
CG15, т.е.
DRM находится таблица, в которой находятся указатели на шрифты для каждой группы языков. Получается, необходимо создать
специальный лэнг с дополнительными шрифтами, отредактировать
DRM и
создать патч для переназначения языков группам. Теперь обо всем по порядку.
Создание лэнга
На данном этапе необходимо создать лэнг, в котором будут
6 шрифтов и
6 русских языков, только с разными
ID. Редактирование будет происходить естественно через мою программу
Moto Lang Editor v2.2 от 7.07.07(Скачать программу и библиотеку qtintf70, необходимую для работы программы.) и немного через HEX редактор.
Для начала выберем языки, которые будем использовать для
замены на русские. Выбрать надо 5 языков, они должны быть редкие и есть еще один нюанс, который я объясню в конце. Я советую брать языки:
$0011 – CROATIAN; $0012 – CZECH; $0017 – GREEK; $0018 – HUNGARIAN; $0028 – TURKISH. Лучше выписать языки на листочке, чтоб потом было проще.
Теперь необходимо выбрать
5 не используемых шрифтов в лэнге, которые будут заменены на необходимые нам. Первый – это естественно будет шрифт
$02, т.к. это дубль основного шрифта, который не используется. Только с ним связан один нюанс. Это не просто дубль шрифта, а он даже ссылается на основной шрифт
$01 и моя программа не дает изменить данный шрифт. Но я специально переделал программу и добавил возможность редактирования данного шрифта, поэтому обязательно необходимо
скачать последнюю версию программы 2.2. Для того, чтобы при сохранении в лэнге шрифт
$02 сохранился – в этой версии необходимо
поставить галочку Separate 1 & 2 font:
Далее выбор остальных 4 шрифтов зависит от конкретных лэнгов, в разных не используются разные шрифты. Еще, если в лэнге меньше 16 шрифтов,
то можно добавлять свои, в программе для этого есть соответствующая функция (т.е.
можно добавлять свои, пока номер шрифта не превысит
$0F):
Например, во всех лэнгах можно заменять шрифт
$06 – этот шрифт служит для подписей софт клавиш, но на моделях с экраном
176*220 он не используется, а на моделях с меньшим экраном, если заменять на шрифт высотой 15 пикселей, т.к. мелкий, то все будет нормально. Еще, во всех лэнгах можно заменять шрифты
$0B – это тайские символы и
$0C – он вроде вообще нигде не используется. Последний шрифт уж выбирайте сами, например, для прошивок R365 я добавлял 2 шрифта, а на R373 еще
$08, т.к. на данной платформе он не используется.
Подробно процесс редактирования шрифта описывать не буду, т.к. это можно прочесть в темах Moto Lang Editor v2.2 от 7.07.07 и Создание Шрифтов . Скажу только, что для замены шрифтов, номер которых больше
$02 необходимо иметь шрифты в отдельном файле формата MFF. Чтобы потом, выбрав шрифт – заменить его, нажав в программе
Load Font в меню
Font. Для того, чтобы получить шрифт в формате
MFF надо редактировать два основных шрифта
$01 и $02, а потом сохранять их в файл через функцию
Save Font в том же меню
Font программы Moto Lang Editor v2.2 от 7.07.07 . Это делается для того, чтобы шрифты, которые мы будем сами добавлять, имели тот же набор символов, что и основной шрифт.
Шрифты готовы,
теперь необходимо добавить языки, которые будут использованы для назначения на них этих языков. Только добавлять их будем не через программу Moto Lang Editor v2.2 от 7.07.07 , а вручную в
HEX редакторе, при чем физически добавлять их даже не будем, а просто в заголовке будем
делать ссылку на русский язык. Лучше всего после того, как шрифты сделаны, в лэнге еще удалить все не нужные языки и оставить только русский и естественно английский. К слову,
английский язык вообще нельзя удалять, потому что в нем есть информация, которая используется во всех других языках и он является базовым. Удалить языки можно на вкладке
Strings кнопкой
Delete Language:
После удаления языков лэнг необходимо сохранить в программе и открыть его через любой удобный для вас HEX редактор, я использую WinHEX.
Начиная со смещения
$000018 идет описание языков, по
48 байт на язык. Например, вот описание английского языка:
Первый байт – это номер языка. Вообще размер этой таблицы
12 DWord'ов. Кроме первого байта – это адреса, указатели на определенные таблицы. Еще, кроме первого байта, нас будет интересовать
5-й DWord – это указатель на iTAP таблицу. Значит, теперь задача заключается в том, чтобы следующие 12 DWord'ов за английским языком, которые начинаются с байта
$23 (русский язык) скопировать дальше еще
5 раз, при чем
5-й DWord у них убрать, чтоб в этих других языках не было
iTAP. Должно получиться следующее:
Но сейчас мы получили 6 русских языков, что нам совершенно не нужно, поэтому теперь необходимо сменить
ID 5 языков на ID, которые мы выбрали раннее. Т.е. Необходимо первые байты в описании языков заменить на
$11 $12 $17 $18 $28. И еще, кроме этого
теперь необходимо в заголовке сменить количество языков в лэнге. Если вы до этого удалил все языки кроме английского и русского, как я посоветовал, то теперь у нас будет
2 + 5 = 7 языков в лэнге. Количество языков в лэнге хранится по смещению
$000014, т.е. этот байт надо заменить на
$07. В итоге должно получиться следующее:
Все, лэнг полностью готов, сохраните его.
Редактирование DRM
Сначала необходимо найти таблицу в
DRM, которую будем редактировать. В заголовке
DRM по смещению
$000070 или
$00006С находится указатель на эту таблицу. Найти ее не сложно, потому что она имеет характерный вид:
На скрине выделенный текст – это вся таблица, а рамкой выделен ее кусок, который мы будем редактировать. Размер этой таблицы –
16*7=112 байт, т.е. на скрине одна строка – это одна запись в таблице. Каждая запись – это описание одной группы языков. Как видно их семь, но 5-я строка – это та самая группа
CYRILLIC, которая не задействована в прошивке, поэтому, получается, сделать только 6 шрифтов, а не 7. Редактировать будем
1-е 4 байта в каждом описании.
2 байта – это описание основного шрифта, а следующие
2 байта – это описание шрифта для софт клавиш.
При чем каждый байт разделен на 2 части, первые
4 бита это размер, что трогать мы не будем и другие
4 бита – это указатель на номер шрифта в лэнг, его мы и будем менять на те, что сделали в лэнге. Т.е. необходимо у каждой записи
в первых 4 байтах заменить вторую часть байта на указатели новых шрифтов.
При чем первую часть байта не трогать, если она совпадает с первой часть в первой записи, а если не совпадает, то изменить на нее, но это бывает редко, обычно ее вообще не надо трогать. В итоге должно получиться примерно следующее:
Следует еще сделать небольшую оговорку. На моделях с экраном шириной 128 пикселей лучше использовать шрифты высотой 15 пикселей или не менять указатели на шрифты к подписям софт клавиш, чтоб не было глюков.
Создание патча
В прошивке есть
код, в котором распределяется какой язык – относится к какой группе. Мы будем менять это распределение, т.е. будем заменять своими, выбранными языками, чтобы отнести их к другим группам.
Вот паттерна для поиска данного кода:
2802D003282CD001282D
И вот для старых моделей с 16 метровыми флэшками:
28026809D003282CD001282D
В этой паттерне
$02 меняем на
ID первого, выбранного нами языка, т.е. на
$12; затем ищем дальше по коду первое появление байта
$08, по идее оно будет через
16 байт и меняем на
$18; затем ищем байт
$04 через
8 байт и меняем его на
$28; затем байт
$0B через
12 байт меняем на
$11; и байт
$0C через 8 байт меняем на
$17. Например, для
R373…49R я получил следующий патч:
Код:
[Patch_Info]
Firmware=R373_G_0E.30.49R
Description=Патч для реализации 6 шрифтов.
Author=Dimka
[Patch_Code]
5EA65D: 12
5EA66D: 18
5EA675: 28
5EA681: 11
5EA689: 17
В прошивке – это выглядит следующим образом:
Весь код выделен, а байты, которые редактировались, помечены красным цветом. Подробно описывать процесс создания самого патча я тоже не буду, т.к., если вы взялись за это дело, то явно это умеете.
Завершающий этап – имена шрифтов
Теперь, если прошить сделанные
лэнг и DRM и
применить патч, то все должно работать. Но в списке языков будут сплошные Русский, Русский и т.д. Поэтому необходим завершающий штрих, а именно
названия языков. Делать это необходимо через
пользовательский языковой пакет, т.е. через
DNP.PRF во всем известной программе
Language_Editor от Random. Номер строки, в которой хранится
название языка - $0525, поэтому содержимое
DNP.PRF должно выглядеть, например, следующим образом:
Еще стоит отметить небольшой нюанс. Со всеми языками, кроме реально русского языка будет небольшая недоработка, в справочнике не будет работать поиск по первой букве, т.к.
TAP раскладки, которые хранятся в
CG1 будут не правильные. Для исправления этого глюка по моей просьбе и с моей поддержкой
GandjaFuzz сделал патч. А
Мачо написал небольшой мануальчик по конвертации данного патча на другие платформы (мануал в прикрепленном архиве). Этот патч будет работать только, если точно следовать мануалу, т.е. брать те же языки, что я предложил и т.д.
Оригинал темы