motofan logo
> 

6 шрифтов!, Подробный мануал по их созданию

Dimka
сообщение 23.7.2007, 23:43


МотоКовырятель
******

Группа: Разработчики
Сообщений: 707
Регистрация: 21.3.2005
Из: Волгоград
Пользователь №: 39 255
Модель телефона: Moto X, Defy, ZN5, E2

Рейтинг: 1029



Методика

Смысл методики заключается в том, что все языки разбиты на 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 и немного через 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

В прошивке – это выглядит следующим образом:
Изображение

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

Завершающий этап – имена шрифтов

Теперь, если прошить сделанные лэнг и DRM и применить патч, то все должно работать. Но в списке языков будут сплошные Русский, Русский и т.д. Поэтому необходим завершающий штрих, а именно названия языков. Делать это необходимо через пользовательский языковой пакет, т.е. через DNP.PRF во всем известной программе Language_Editor от Random. Номер строки, в которой хранится название языка - $0525, поэтому содержимое DNP.PRF должно выглядеть, например, следующим образом:
Изображение

Еще стоит отметить небольшой нюанс. Со всеми языками, кроме реально русского языка будет небольшая недоработка, в справочнике не будет работать поиск по первой букве, т.к. TAP раскладки, которые хранятся в CG1 будут не правильные. Для исправления этого глюка по моей просьбе и с моей поддержкой GandjaFuzz сделал патч. А Мачо написал небольшой мануальчик по конвертации данного патча на другие платформы (мануал в прикрепленном архиве). Этот патч будет работать только, если точно следовать мануалу, т.е. брать те же языки, что я предложил и т.д.

З.Ы. Хочу обратить внимание, чтоб данный материал абсолютно уникален, выкладывается впервые и данная методика разработана полностью мной. Поэтому выкладывание на других форумах и ресурсах только при указании на первоисточник, и с указанием моего Ника! cool.gif

Сообщение отредактировал Dimka - 15.10.2007, 11:45
Прикрепленный файл 6_fonts_manual.rar   ( 34.27 килобайт ) Кол-во скачиваний: 848
Юзер вышелВ друзьяВизиткаП/Я
К началу страницы
+Ответить

Сообщений в этой теме
Dimka   6 шрифтов!   23.7.2007, 23:43
KOLYAN   Dimka, ты великолепен! Все просто и понятно ра...   24.7.2007, 4:48
Semenigor   Молодец!   24.7.2007, 5:02
vic66   Ну слава Богу - дождались наконец! :) С перв...   24.7.2007, 17:45
Motohobiman   Однозначно лучший в своей области!Браво во ист...   24.7.2007, 17:51
Dimka   Спасибо! Очень приятно, правда! :)   24.7.2007, 20:32
Мачо   Инструкция. Делаем патч. Поиск в справочнике п...   25.7.2007, 14:28
KOLYAN   Вот, по мануалу Мачо сделал патч поиска при 6 шриф...   26.7.2007, 10:16
Dimka   Конечно можно! Я же для этого и писал мануал....   26.7.2007, 20:34
Dimka   Хм, а зачем? Тогда просто будет в Установках ввод...   27.7.2007, 9:25
Shevc00f   Как говорится.."дело было вечером, делать был...   10.9.2007, 13:08
Shevc00f   Сделал еще один пак из 6 шрифтов. Использовал шри...   11.9.2007, 16:49
Shevc00f   В 6 шрифте глюк, независимо от выбранной для замен...   14.9.2007, 17:34
Штирлиц2   [u]Dimka, Всё заработало на Razr V3 R374_G_0E.42.1...   15.11.2007, 6:38
Movesilenthunter   Хочу обратить внимание всех ковырятелей, что для L...   6.3.2008, 12:04
Movesilenthunter   Dimka, Собственно я разрабатываю 3443, а в 3511 н...   24.3.2008, 22:12
P1xEL   [size=3][color=DarkRed] LangPack 5 in 1 for V3r b...   31.3.2008, 14:30
XoneX   Кстати, можно добавить в мануал, что для телефонов...   2.7.2008, 12:17

6 шрифтов!, Подробный мануал по их созданию · Шрифты и языковые пакеты · Forum
 

Ответ в темуСоздание новой темы
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



Текстовая версия Сейчас: 13.7.2025, 3:48

Форум живёт: