Forums -> Аудио и видеотехника -> Модифицируем прошивку для DVD плейера (MTK 1389)
| Full Version

Страницы: 1 2 [3] 4 5 6 7 8
cax
NewAge раскололся: он использовал ZWAD2410.BIN
Rvs
cax

Мы наверно о разных вещах говорим!!!

В группах на yahoo тему по замене ARM, уже как месяц мусолят, там даже и файл с описанием Ati2 выложил, заменил уже с пяток ARM-ов, замена проходит, менял на прошивке от NA. ARM-ы брал с других аппаратов причём даже с DRAM больше чем у моего Xoro. Аппарат запускался и работал, да есть немного не стыковки (15-20%) с 8032, поэтому и спрашивал по поводу обработчиков функций, что-бы под строить под новый ARM!!! На мой взгляд найти процедуру и вставить к себе можно, но стоит игра свеч, проще всё таки ARM, по богаче прикрутить...!!!

А про имена файлов спрашивал как предположения, сравнил твою прошивку с оригинальной, (то что первое бросилось в глаза) увидел смену шрифтов, и модифицированный ARM. Сейчас привинчу к своему и хотел знать чего ждать от изменений в ARM-е и цель изменений!!!

А шрифты в прошивке от http://newage.mpeg4-players.info/firmwares/xoro/hsd400pro/NAv2/NAv2.html Font1, Font2, Font3 в ней измененный. Глянь если не тяжело!!! Факт в том что в итоге надписи на экране нормальные.
ivani4
QUOTE
И ещё,может быть вам поможет-у меня есть прошивка где переворот строки происходит при написании:
имя фильма.avi
имя фильма.heb.sub
Хочу добавить,что у меня есть такая же прошивка без этой функции.Т.е. ,вероятно,годится для сравнения.
moroz
cax, не волнуйся, напишу я функцию. Может быть даже сегодня. Это проще чем кажется. А вот как ты ее будешь использовать - вот в чем вопрос!
moroz
...и даже еще проще ;)

.text:00008174 Reverse; CODE XREF: .text:0000819Ep
.text:00008174 00 B5 PUSH {LR}; Push registers
.text:00008176 07 4B LDR R3, =0x12345678; Load from Memory
.text:00008178 07 48 LDR R0, =0x1234567A; Load from Memory
.text:0000817A 5B 78 LDRB R3, [R3,#1]; Load from Memory
.text:0000817C 19 18 ADD R1, R3, R0; Rd = Op1 + Op2
.text:0000817E 05 E0 B loc_818C; Branch
.text:00008180 ; ___________________________________________________________________________
.text:00008180
.text:00008180 loc_8180; CODE XREF: .text:0000818Ej
.text:00008180 02 78 LDRB R2, [R0]; Load from Memory
.text:00008182 0B 78 LDRB R3, [R1]; Load from Memory
.text:00008184 03 70 STRB R3, [R0]; Store to Memory
.text:00008186 0A 70 STRB R2, [R1]; Store to Memory
.text:00008188 01 30 ADD R0, #1; Rd = Op1 + Op2
.text:0000818A 01 39 SUB R1, #1; Rd = Op1 - Op2
.text:0000818C
.text:0000818C loc_818C; CODE XREF: .text:0000817Ej
.text:0000818C 88 42 CMP R0, R1; Set cond. codes on Op1 - Op2
.text:0000818E F7 D3 BCC loc_8180; Branch
.text:00008190 00 BD POP {PC}; Pop registers
.text:00008190 ; ___________________________________________________________________________
.text:00008192 00 00 ALIGN 4
.text:00008194 78 56 34 12 _d DCD 0x12345678; DATA XREF: .text:00008176r
.text:00008198 7A 56 34 12 dword_8198 DCD 0x1234567A; DATA XREF: .text:00008178r


****************************************************
А вот последовательность:
00 B5 07 4B 07 48 5B 78 19 18 05 E0 02 78 0B 78 03 70 0A 70 01 30 01 39 88 42 F7 D3 00 BD 00 00 78 56 34 12 7A 56 34 12

Понятно, вместо 0х12345678 - адрес субтитров
cax
QUOTE (Rvs @ 18-01-2006, 13:08)
В группах на yahoo тему по замене ARM, уже как месяц мусолят
Вот как намусолят чего полезное и безглючное - тут я и подключусь.
QUOTE
На мой взгляд найти процедуру и вставить к себе можно, но стоит игра свеч, проще всё таки ARM, по богаче прикрутить...!!!
Не всё так радужно. Например, в 05.00.05.01 замечено запаздывание звука и пропадание субтитров - чаще и больше, чем в других версиях.

QUOTE
Сейчас привинчу к своему и хотел знать чего ждать от изменений в ARM-е и цель изменений!!!
Если ты видел моё руководство по модификации - ты знаешь точно, что именно я меняю в АРМ и зачем.

QUOTE
Font1, Font2, Font3 в ней измененный. Глянь если не тяжело!!! Факт в том что в итоге надписи на экране нормальные.
Вижу, шрифты выглядят покоцанными - скорее всего MTK ReMaker просто не распознаёт их как следует. Ничего не могу от себя добавить к этому.
cax
QUOTE (moroz @ 18-01-2006, 18:16)
...и даже еще проще ;)

.text:00008174 Reverse; CODE XREF: .text:0000819Ep
.text:00008174 00 B5 PUSH {LR}; Push registers
.text:00008176 07 4B LDR R3, =0x12345678; Load from Memory
.text:00008178 07 48 LDR R0, =0x1234567A; Load from Memory
Придётся малость переделать, я позже уточню как. Дело в том, что адрес конца строки меняется в зависимости от её длины, которую мы получим по выходу из подпрограммы подсчёта длины строки.

И ещё я хочу найти упомянутую прошивку от Апекс 2410.
moroz
А черт, только сейчас обратил внимание... Зачем подпрограмма? Длина лежит во втором байте. Надо только уточнить - включает она ноль или нет. Наверное да. Если это так то у меня баг, ноль перескочит в начало строки. Завтра вечером исправлю.
moroz
cax, колись, как собираешься определять что выбран ивритский фонт? Ведь есть же у тебя какя-то идея, иначе бы ты не начинал.
cax
Ну, где-то на yahoo этот вопрос пробегал, да и я собирался подглядеть у NewAge, для того и ищу прошивку для сравнения...

А весь буфер переворачивать нельзя - только текущую строку, т.е. до ближайшего 0x0D/0x0A или (если строка последняя) - до 0.

Поэтому сперва нужно найти конец строки (подобно тому, как это делается в SUB_SubtitleTextLineCount или SUB_CalcTextLineWidth) и только потом переворачивать...
Rvs
cax

Ок!!! Замечания учёл!!!

Если ты про файл ZWAD2410.BIN, то у меня он есть, правда как прошивка к ямаде!!! Могу кинуть!!! Я её уже адаптировал к Xoro, работает нормально, правда CP1251, не понимает!!!
moroz
QUOTE
А весь буфер переворачивать нельзя - только текущую строку, т.е. до ближайшего 0x0D/0x0A или (если строка последняя) - до 0.

А, дошло. Вот как бывает, когда второпях. Исправим.
cax, сколько у нас свободного места? А то у меня запланированы работы по улучшению переворота, вплоть до достижения совершенства.
cax
По поводу прочесть из АРМ значение, заданное в меню - читать здесь:
http://groups.yahoo.com/group/mt13x9/message/6676

Осталось только понять, о каком загадочном nnnn там говорится.

Свободного места есть 0x128 байт, часть я занял под конверсию из юникода, осталось 0xE3 байт.
cax
QUOTE (Rvs @ 19-01-2006, 07:25)
файл ZWAD2410.BIN
Могу кинуть
Давай - на borus собака mail.ru
wallfire
QUOTE (cax @ 21-12-2005, 10:07)
Ну не насилуй меня, не буду я искать синий квадрат.

А по поводу русских букв, очень важно последним ли идёт шрифт для имён файлов (у него только 128 символов и он занимает 1 номер вместо двух в MTK Remaker). Если да - остальное не очень сложно, если нет - придётся повозиться. Проверь это.
Привет всем! Не красиво перебивать но всё же! cax ты не мог бы мне помочь в моём начинании. у меня YAKUMO DX4 проблема в руссификации имён файлов. дело в том что у меня фонт для имён файлов не находится последним! помоги разобраться! тут прошивкапробовал далее описанным способом с подпрограммой написаной в Patching_HU3899_from_A_to_Z русские буквы показывает подчекиваниями. Старый фонт содержал 128 симв. я менял его на самодельный cp1251 256 симв.
есть предложение заменить китайский шрифт на ср1251 и использовать его.
cax
wallfire, решений два: либо определить для чего используются шрифты, идущие после шрифта для имён, и везде где надо подменить номер на новый, который изменится после замены; либо перенести сам шрифт для имён файлов и, соответственно, везде где надо подменить его номер...

Кое-что из этого описано у меня, кое-что в недавно опубликованной на mt13x9 инструкции, но в общем случае - задача нетривиальная.
В ближайшие месяц-два я вряд ли найду время взглянуть, извини.
aleshin
несколько более глубоких вопросов:
1) как устранить (уменьшить) паузу между треками при проигрывании mp3 (от 3 до 5 секунд),когда привод встает и вновь раскручивается
2)как увеличить диапазон регулировки громкости или это у меня на shinco железная проблема (звук до конца не убавляется - у всех шинок так)
3)как сделать доступной регулировку цветности (её нет)
4)в довесок - не подскажете код кнопки eject
уважаемые гуру, поделитесь пожалуйста, если у кого есть какая-то информация , на яху достучатся не могу.
cax
Если вопросы ко мне - то я не знаю ответа ни на один из них.

Проблема номер 1, на мой взгляд, вообще неустранима, т.к. открытие файла с компакта берёт время, и судя по твоему описанию происходит каждый раз с самого начала, без кэширования.
Проблемы 2 и 3 надо решать пультом от телевизора.
aleshin
wallfire у меня он шел первым номером, и ничего все срослось. А ты в 8032 тоже посмотри и исправь. У меня после правки ARM тоже стали прочерки, а после правки 8032 все стало нормально. Правда последние цифры в двух из трех последовательностей были другими.
ROM:00015EEB 94 20 subb A, #0x20
ROM:00015EED 40 06 jc ROM_5EF5
ROM:00015EEF E0 movx A, @DPTR
ROM:00015EF0 D3 setb C
ROM:00015EF1 94 7E subb A, #0x7E
ROM:00015EF3 40 10 jc ROM_5F05

А именно вместо 10 были 06 и 05 если не ошибаюсь, но в целом инструкция права от и до.
Еще заменил один двойной неиспользуемый шрифт так как места шрифтов сместились на один вниз после замены на cp1251 и все встало на свои места.
aleshin
cax отвечаю
1)привод то зачем в паузах останавливается, ведь если принудить перейти его на след.трек он просто перепозиционирует головку и не делает такой паузы (практически мгновенно начинает воспроизводить)
2)у меня активная акустика 5.1 без ДУ (бралось не под данный аппарат , но меня более чем устраивает
3) в RGB режиме телевизор регулировать цвет не в состоянии, а качество полного скарта терять не хочется
cax
QUOTE (aleshin @ 19-01-2006, 17:13)
Еще заменил один двойной неиспользуемый шрифт так как места шрифтов сместились на один вниз после замены на cp1251 и все встало на свои места.
Вот, пожалуйста, замечательный пример творческого подхода к решению задачи. Инструкциями на все случаи жизни не напасёшься, тут понимание нужно. Браво !
moroz
Вот, поправил. Теперь переворачивает построчно. К моему ужасу рутина (вернее теперь уже три рутины) разрослась аж до 0х60 байт, а ведь еще и не начал ее "окультуривать". Посмотрим как пойдет дальше.
cax
Какая-то беда с аттачем - не открывается почему-то...
moroz
Действительно... Господа модераторы, ау! Помогите, пожалуйста.
А в принципе это промежуточная версия, не страшно. Это я так, в рамках "квартального отчета" :)

В любом случае, вот она в бинарном виде:
00 B5 03 78 0D 2B 03 D9 01 30 03 78
0D 2B FB D8 00 BD 00 00 00 B5 88 42 07 D2 02 78
0B 78 03 70 0A 70 01 30 01 39 88 42 F7 D3 00 BD
30 B5 0B 4D 2A 78 13 06 2C 1C 1B 0E 01 E0 01 34
23 78 0C 2B FB D9 20 1C FF F7 DC FF 05 1C 69 1E
20 1C FF F7 E1 FF 2A 78 00 2A EC D1 30 BD 00 00
78 56 34 12
Rvs
cax

Если не тяжело ссылку на инструкцию на mt13x9??? Поискал там, но ничего не нашел. :(
Тоже есть проблемка по смене шрифтов.
Имею:

Font 1, Font 2, Font 3 тут в кучу все кодовые таблицы (1250-1251)- меню, браузер.

Font 4 - Иконки

Font 5, Font 6, Font 7 - опять в кучу 1250-1251 - субтитры

Хочу:

Font 1 (1251) - меню, браузер.

Font 2 - Иконки

Font 3 (1251) - субтитры

У кого какие идеи???
Rvs
сах

В твоей ARM процедуре UnicodeToCP из описания, где задаётся номер шрифта???
cax
Rvs, его там нет и быть не может. Процедура всего лишь переводит 2-байтовый код символа в однобайтовый.
Rvs
мда... лопухнулся :(. Я основывался на документе от NewAge "MPEG4 Subtitle Display in ARM (RISC) Code", там у него Font выбирается.

LDRB R3, [R0,#1] ; FontID
ADD R0, R5, #0
ADD R2, SP, #0x30+var_2C
BL OSD_DisplayCharacter


Думаю что и в процедуре UnicodeToCP от NewAge тоже выбирается, она сложнее.

А как же всё таки найти номер шрифта???

QUOTE
Осталось только понять, о каком загадочном nnnn там говорится.

На мой взгляд nnnn выдаёт утилита от NewAgе, примерно вот так:

MTK (ARM Codes).bin

Version: 05.00.05.07

ADDRESS_1 = 0x0376C400
ADDRESS_2 = 0x0376C800
SHARED MEMORY = 0x0376CC00
CDTEXT BUFFER = 0x0376EC00
ADDRESS_3 = 0x03770000

Additional info (could be wrong):
SACD : NO
DVD-AUDIO : NO
DRAM Size : 8 MB
moroz
Итак, есть много хороших новостей и одна плохая.
Хорошие новости: код готов и более-менее отлажен (на РС). Алгоритм учитывает английские вставки и перевернутую пунктуацию в начале и конце строки. Проверен на нескольких файлах субтитров - вроде работает неплохо, за исключением трудных случаев типа скобок и т.п.
Плохая новость - как можно видеть, код разросся до 0х119 байт.

*****************************************

Болтом отмечена точка входа

00 B5 D0 23 00 06 1B 06 02 0E C0 18 00 0E 09 28
05 D9 13 1C 41 3B 1B 06 1B 0E 19 2B 01 D8 01 20
00 BD 13 1C 61 3B 1B 06 1B 0E 19 2B F7 D9 13 1C
20 33 1B 06 1B 0E 1A 2B F1 D9 00 20 F0 E7 00 00
00 B5 88 42 07 D2 02 78 0B 78 03 70 0A 70 01 30
01 39 88 42 F7 D3 00 BD F0 B5 47 46 80 B4 00 23
2D 4E 98 46 34 78 20 1C FF F7 CA FF 00 28 3D D0
35 1C 0D 2C 3C D9 01 35 28 78 0D 28 FB D8 03 06
00 2B 04 D1 01 23 98 46 01 E0 01 3D 28 78 00 06
00 0E FF F7 B5 FF 00 28 F7 D0 30 1C 29 1C FF F7
CF FF AE 42 19 D2 34 78 20 06 00 28 29 DB 00 0E
FF F7 A6 FF 00 28 24 D0 34 1C AC 42 06 D8 23 78
18 06 00 28 16 DB 01 34 AC 42 F8 D9 78 1C 61 1E
66 1C FF F7 B5 FF AE 42 E5 D3 2B 78 00 2B 02 D0
43 46 00 2B BE D0 08 BC 98 46 F0 BD 01 36 B9 E7
30 78 C4 E7 00 0E FF F7 83 FF 00 28 E6 D1 01 34
E2 E7 20 06 00 0E FF F7 7B FF 00 28 00 D0 37 1C
01 36 AE 42 D0 D8 C6 E7 78 56 34 12
cax
moroz:

Я заранее извиняюсь, если задерживаю - ибо у меня сейчас почти нет времени на работу с прошивками, но вскоре я надеюсь заняться встраиванием, проверками и т.д.
Восхищён твоей скоростью написания кода, с удовольствием перейму технологию - но позже.
cax
Rvs: все известные мне номера шрифтов задаются в коде 8032, не в АРМ.
Взгляни для начала на встроенный в MTK ReMaker патч субтитров - там задаётся номер шрифта для них...
moroz
Боже упаси, спешки нет. А технология настолько тривиальная, что ты наверно будешь разочарован :)
ivani4
cax
QUOTE
встроенный в MTK ReMaker патч субтитров
сах,если можешь,хотя бы вкратце об основных назначениях и применении этого патчера. Я не однокрактно пробовал его использовать ,но у меня никогда ничего не получалось.
aleshin
Поделитесь если у кого есть mtkFilenameLenPatcher_ом, плиз. qwer@ufanet.ru. Заранее благодарен
cax
QUOTE (ivani4 @ 21-01-2006, 09:45)
cax
QUOTE
встроенный в MTK ReMaker патч субтитров
сах,если можешь,хотя бы вкратце об основных назначениях и применении этого патчера. Я не однокрактно пробовал его использовать ,но у меня никогда ничего не получалось.
Он или отображается в меню и работает, или не отображается и не работает, вот и весь секрет. Позволяет выбрать номер шрифта для субтитров и ещё чего-то, не помню что.
moroz
QUOTE
--- In mt13x9@yahoogroups.com, "New Age" <new_age@f...> wrote:
>
> You can find out the shared memory address from checking the
ARM_GetChar, ARM_PutChar function in
> 8032 code.
>
> 0x03nnnn00 + 0x20 and nnnn from the ARM_Put/GetChar.


QUOTE (Rvs @ 20-01-2006, 17:53)
А как же всё таки найти номер шрифта???

QUOTE
Осталось только понять, о каком загадочном nnnn там говорится.

На мой взгляд nnnn выдаёт утилита от NewAgе
Я что-то потерял нить. Парень там спрашивает как ему найти адрес в общей памяти если ему известен оффсет от ее начала. Ему отвечают: возьми адрес начала и прибавь оффсет. У нас адрес начала общей памяти как раз известен. Мы оффсета не знаем. Или кто-то знает?
cax
moroz:

До недавнего времени я как раз не знал адрес начала общей памяти... но мне уже разъяснили на mt13x9: он идёт почти сразу после т.н. "зоны сообщений об ошибке C++" (искать, например, по стрингу "library"): сперва там идут 4 байта "00 00 00 06", а затем сразу адрес. Так что это я для себя уже уяснил.

Что касается офсета - то мы его знаем: в строке меню 6-е число.
(напоминаю, что адрес EEPROM для использования из кода 8032 при помощи PREF_GetChar - 5-е число)

Вот пример (пометил болдом 6-е):

>> ==================================================================
>> 3. No Pic. | Screen Saver | Screen Saver
>> 0008 FFFF 0099 00AB 0007 0020 0001 0000 FF2F51 07C9 - ROM:2F57
>> => 1. On | Screen Saver On | On
>> 0150 00E7 0150 00 - ROM:2F43
>> 2. Off | Screen Saver Off | Off
>> 0151 00E8 0151 01 - ROM:2F4A
>> ===================================================================

Я сегодня игрался с этим и почти уже научился отлавливать установки меню из кода АРМ. Как научусь окончательно - дам знать.
aleshin
сах
Довожу прошивку до идеала (для себя). Сделал длинные имена файлов, обрезку, широкий браузер, но при воспроизведении mp3 и wma, когда начинается прокрутка имени файла в правой части строки остаются "артефакты" (т.е. остатки) букв, в далнейшем прокрутка идет только в левой части строки, как и была раньше - короткая прокрутка. Не подскажешь как с этим бороться, можно ли увеличить длину прокручиваемой области или вообще отключить прокрутку имени (длина отображаемой части меня и так устраивает).
Можно конечно на это не заморачиваться, но ведь победа так близка!!!!!
cax
aleshin:
Извини, но у меня ни на одном из трёх (разных) плейеров при воспроизведении ничего не прокручивается, так что я даже не знаю как это выглядит. Помочь не смогу.
aleshin
сах
Ну тогда и заморачиваться не буду. Выглядит прокрутка как бегущая строка, которая сдвигается на один символ примерно раз в секунду. Прошивка от shinco dvp-8811 (dvp-8830).
cax
QUOTE (moroz @ 18-01-2006, 21:36)
Длина лежит во втором байте.
Я через пень-колоду научился кое-как читать из АРМ заданные в меню значения, теперь хочу испытать твою процедуру. Поясни, пожалуйста, какие аргументы она принимает, и если знаешь, то как получить адрес буфера субтитров. Я опять запутался.

Короче, нужна помощь с интеграцией.
Мы уже в двух шагах от цели !

Пы.Сы. Если выкинуть процедуру перевода юникодных букв в именах файлов, то твоя процедура с трудом помещается в свободном месте АРМ. Видимо, мне придётся научиться его "расширять", как это делают мастера в группе Яху.
moroz
Aргументов нет. Все что нужно - подставить вместо 12345678 (последнее слово) адрес субтитра + 2, т.е. начало самого текста.
Как найти адрес субтитров описано в статье Нью Эйджа. Если некогда возиться - я могу помочь, у меня уже рука набита.
Насчет дополнительного свободного места - было бы очень кстати. Я нечеловеческими усилиями сократил размер кода до 0хF0, но этого все равно недостаточно.
QUOTE
Я через пень-колоду научился кое-как читать из АРМ заданные в меню значения
У меня тут появилась идея как просматривать из АРМ любую память, в т.ч. общую, в рантайме. Если интересно - можно заняться.
cax
moroz:

Идея просмотра в рантайме у меня простая донельзя: при показе имени файла с буквами с кодом > 250 вместо самой буквы показывать любой другой байт, взятый из памяти или ещё откуда. С этим проблем нет, я именно так дебагировал вычитку значений меню.

А насчёт подстановки адреса - подскажи как найти адрес субтитра, а то в статье Нью Эйджа я до конца не разобрался.

Вызывать твой код собираюсь где-то в начале SUB_Mpeg4SubtitleText_Display

Мне достаточно войти в точку входа твоей подпрограммы командой BL, и она сама вернёт меня назад по окончании, верно ? Я бы ещё перед возвращением хотел выполнить те 4 байта команд, которые затираются вышеупомянутой командой BL. Если это нельзя встроить перед возвращением - напишу в обходную (но это съест ещё несколько байт).
moroz
Цитирую:
QUOTE
IDA automatically puts local names to case jumps so the easiest way to find PS_B function calls is doing a text search for ‘case_73’ (0x49 = 73).
...............
ROM:0000A410 case_73_SetMpeg4SubtitleParams ; CODE XREF: sub_9F90+7Aj
ROM:0000A410 60 1C ADD R0, R4, #1
ROM:0000A412 03 F0 AC F9 BL SUB_FillMpeg4SubtitleParamsRecord
ROM:0000A416 19 E0 B case_78
...............
ROM:0000D76E SUB_FillMpeg4SubtitleParamsRecord
ROM:0000D76E 02 78 LDRB R2, [R0]
ROM:0000D770 51 49 LDR R1, =SUB_Mpeg4SubtitleParamsRecord
ROM:0000D772 0A 72 STRB R2, [R1,#8] ; Window ID
ROM:0000D774 83 78 LDRB R3, [R0,#2]
................
Other interesting function before this function in Yamada 6700:

ROM:0000D74C SUB_ClearMpeg4SubtitleParams
ROM:0000D74C 5A 48 LDR R0, =SUB_Mpeg4SubtitleParamsRecord
ROM:0000D74E FF 21 MOV R1, #0xFF
ROM:0000D750 01 72 STRB R1, [R0,#8]
ROM:0000D752 00 21 MOV R1, #0
ROM:0000D754 C1 60 STR R1, [R0,#0xC]
ROM:0000D756 01 80 STRH R1, [R0]
ROM:0000D758 41 80 STRH R1, [R0,#2]
ROM:0000D75A 81 80 STRH R1, [R0,#4]
ROM:0000D75C C1 80 STRH R1, [R0,#6]
ROM:0000D75E 57 48 LDR R0, =pARM_Shared_Memory
ROM:0000D760 02 68 LDR R2, [R0]
ROM:0000D762 3B 20 80 01 MOVL R0, 0xEC0 ; Subtitle Buffer for Yamada 6700
ROM:0000D766 10 18 ADD R0, R2, R0

pARM_Shared_Memory - это и есть субтитр. Первые два байта - длина, дальше строка. Вот адрес строки и надо подставить.

QUOTE
Мне достаточно войти в точку входа твоей подпрограммы командой BL, и она сама вернёт меня назад по окончании, верно ?
Очень на это надеюсь...

QUOTE
Я бы ещё перед возвращением хотел выполнить те 4 байта команд, которые затираются вышеупомянутой командой BL
Не вижу никаких препятствий. Добавь перед последним пушем попом. Только не забудь пересчитать ссылку на адрес.

***************************

QUOTE
Идея просмотра в рантайме у меня простая донельзя: при показе имени файла с буквами с кодом > 250 вместо самой буквы показывать любой другой байт, взятый из памяти или ещё откуда. С этим проблем нет, я именно так дебагировал вычитку значений меню.
Моя идея - задавать желаемый адрес в файле субтитра, а при показе подставлять область памяти за этим адресом. Можно показывать 32 байта в каждом субтитре, т.е. возможности практически неограниченые.
ivani4
cax
Маэстро!Может быть у тебя найдётся возможность помочь.
Делаю поддержку ивр/рус имён файлов.Расклад такой:
Font 0-1 set up/menu
Font 2 иконки(значки)
Font 3 имена файлов
Font 4-5 субтитры
После замены Font 3 ситуация изменилась так:
Font 0-1
Font 2
Font 3-4
Font 5-6
Субтитры теперь не отображаются.
Не смотря на это произвёл нужные изменения в АРМ и с именами файлов всё получилось.
А как востановить субтитры?
cax
ivani4:

Если MTK ReMaker позволяет выполнить Patch->Subtitle, сменить там номер шрифта для субтитров на 5. При этом где-то в Code Part->8032->Page? появится "SUB_Style (Patched)" с таким фрагментом:

01D339: 7F05 mov R7, #05
01D33B: 1205AD lcall #05AD
01D33E: D245 setb RAM_XX.Z

Если MTK ReMaker не позволяет - искать схожий фрагмент самому и самому его менять.
ivani4
cax
MTK ReMaker не позволяет выполнить Patch->Subtitle.
А как искать схожий фрагмент и менять его я не совсем понял,но сделал так:
На мой взгляд похожее место в SUB_Style:
01E37B: 7F04 mov R7, #04
01E37D: 120583 lcall #0583
01E380: 7F02 mov R7, #02
Решил что нужно переправить по адресу 1E37C 04 на 05.
Получил:
01E37B: 7F05 mov R7, #05
01E37D: 120583 lcall #0583
01E380: 7F02 mov R7, #02
Но это не помогло
Как нужно было сделать??????????????????
cax
1) аттачи почему-то не работают
2) Каким образом это похоже ? Там должно быть "setb", разве нет ?
3) иногда шрифт субтитров задаётся совсем в другом месте - например, в ивритизированных прошивках с переключателем шрифта для Апекс 2102 и 2400. Об этом есть у меня в инстру... ну, ты понял.
ivani4
сах,нет вроде бы setb.А как и что искать в другом месте я не знаю.Если чувствуешьчто это сложно,то давай оставим это дело.Не удобно тебя напрягать.

cax
Ты прав, давай пока оставим.
В качестве альтернативного решения - добавить новый шрифт для имён файлов под номерами 6-7 и поменять его номер там, где он задаётся, но это тоже на пальцах не рассказать...
cax
QUOTE (moroz @ 23-01-2006, 18:12)
Цитирую:
QUOTE
ROM:0000D75E 57 48 LDR R0, =pARM_Shared_Memory
ROM:0000D760 02 68 LDR R2, [R0]
ROM:0000D762 3B 20 80 01 MOVL R0, 0xEC0 ; Subtitle Buffer for Yamada 6700
ROM:0000D766 10 18 ADD R0, R2, R0

pARM_Shared_Memory - это и есть субтитр. Первые два байта - длина, дальше строка. Вот адрес строки и надо подставить.

Странно, почему ты пришёл к такому выводу ?
Что же тогда означает офсет 0xEC0 с комментарием "буфер субтитров" ?
И откуда тебе известно про 2 байта, в которых хранится длина буфера (или длина текущего субтитра) ?
ivani4
cax
ОК.Оставляем это дело.И я по прежнему жду когда ты освободишься что бы рассмотреть баг 60.
moroz
Исключительно на основе анализа кода. Ошибка крайне маловероята. Если нужны доказательства и цитаты - предоставлю, но это займет какое-то время.
moroz
Ну вот хотя-бы это:
Пресловутый пример ограничения субтитра по длине (бывш. баг 60) из прошивки к АПЕКС811.
У меня вместо "pARM_Shared_Memory" искомый адрес называется просто "Subtitle". Длина субтитра берется из первого байта (нулевой просто игнорируется, видимо длина больше 256 просто не укладывается в голове). Дальше она сравнивается с 0х78, если больше - меняется на 0х78 и по этому офсету в строку прописывается ноль.

КСТАТИ
Вызывать мой код надо после этого куска. Боюсь что иначе не будет нуля, а я его ищу.


SUB_Mpeg4SubtitleText_Display
...
ROM:0000D6A8 BL SUB_GetSubLength
ROM:0000D6A8
ROM:0000D6AC ADD R6, R0, #0
ROM:0000D6AE CMP R6, #0x78
ROM:0000D6B0 BLS loc_D6B4
ROM:0000D6B0
ROM:0000D6B2 MOV R6, #0x78
ROM:0000D6B4
ROM:0000D6B4 loc_D6B4; CODE XREF: ROM:0000D6B0j
ROM:0000D6B4 MOV R1, #0
ROM:0000D6B6 ADD R0, R6, #0
ROM:0000D6B8 BL SUB_SetChar_R1_At_R0_Offset
...


ROM:0000D2EC SUB_GetSubLength;
ROM:0000D2EC 000 LDR R0, =Subtitle
ROM:0000D2EE 000 LDRB R0, [R0,#1]
ROM:0000D2F0 000 BX LR
ROM:0000D2F0 ; End of function SUB_GetSubLength

ROM:0000D2FA SUB_SetChar_R1_At_R0_Offset;
ROM:0000D2FA 000 LDR R2, =Subtitle
ROM:0000D2FC 000 ADD R0, R2, R0
ROM:0000D2FE 000 STRB R1, [R0,#2]
ROM:0000D300 000 BX LR
ROM:0000D300 ; End of function SUB_SetChar_R1_At_R0_Offset


ivani4
moroz
Учитывая что господин cax сильно занят,решил обратится к тебе.
Скачал кучу книг по иде и ассемблеру,пытался разобратся самостоятельно,но безрезультатно.
Инструкция от сах начинается с баг 60 :
Try to find the code that looks like this:
ROM:0000E884 3C 28 CMP R0, #0x3C
ROM:0000E886 01 D9 BLS loc_E88C
ROM:0000E888 3C 20 MOV R0, #0x3C
Никак не могу сообразить как это ищут?Не знаю с чего начать.Или без знаний ассемблера ничего нельзя сделать?
moroz
сах
Поправка. В статье Нью эйджа действительно субтитр находится по офсету ЕС0 в общей памяти. Приношу извинения. Но в АПЕКСе используется прямая ссылка.
Короче - самое точное определение: в функции SUB_ClearMpeg4SubtitleParams надо смотреть куда прописываются нули - там и субтитр.

ivani4
Боюсь что даже со знанием ассемблера сложновато по такой инструкции (сах - не в обиду). Например если вместо регистра R0 используется R6, как в моем примере, то вся последовательность изменится. Нужно чуть-чуть знать ассемблер и, что хуже, английский, и изучить статью Нью эйджа.
ivani4
moroz
Тем не менее сах считает возможным вдолбить мне это.Но у меня уже нет сил ждать когда он освободится.Я хочу пока сделать,как мне кажется,простую вещь:взять прошивку расматриваемую в инструкции и увидеть в иде то что сах уже нашёл:
ROM:0000E884 3C 28 CMP R0, #0x3C
ROM:0000E886 01 D9 BLS loc_E88C
ROM:0000E888 3C 20 MOV R0, #0x3C
Хотя бы это ты можешь мне объяснить?
moroz
Так ищи последовательность, ты же это уже делал: 3C 28 01 D9 3C 20
ivani4
moroz Нашёл такую последовательность.А как увидеть такое:
ROM:0000E884 3C 28 CMP R0, #0x3C
ROM:0000E886 01 D9 BLS loc_E88C
ROM:0000E888 3C 20 MOV R0, #0x3C
?????????????????????????????????????????????????????????????
cax
QUOTE (moroz @ 25-01-2006, 05:09)
Боюсь что даже со знанием ассемблера сложновато по такой инструкции (сах - не в обиду).
А на что обижаться - я ж там так и написал, что, мол, извините, этот момент я на пальцах объяснить не смогу, читайте классиков и всё такое.
Но, как известно, объясняя другим начинаешь сам лучше понимать, так что есть шанс, что я рожу что-то более внятное :)
moroz
cax, все ли понятно с адресом субтитров? Нужна ли еще какая-то помощь в интеграции?

ivani4
По-моему ты сам уже ответил - использовать IDA
ivani4
moroz.Пойми,я никогда ранее не пользовался идой.Пытаюсь,пока не очень получается.Сегодня удалось разобратся как ищут hex последовательность.Но я никак не могу понять как увидеть информацию в таком виде:
ROM:0000E884 3C 28 CMP R0, #0x3C
ROM:0000E886 01 D9 BLS loc_E88C
ROM:0000E888 3C 20 MOV R0, #0x3C
cax
moroz, спасибо, пока всё ясно.
Надеюсь скоро всё проверить. Дам знать.
cax
QUOTE (ivani4 @ 25-01-2006, 20:29)
moroz.Пойми,я никогда ранее не пользовался идой.Пытаюсь,пока не очень получается.Сегодня удалось разобратся как ищут hex последовательность.Но я никак не могу понять как увидеть информацию в таком виде:
ROM:0000E884 3C 28 CMP R0, #0x3C
ROM:0000E886 01 D9 BLS loc_E88C
ROM:0000E888 3C 20 MOV R0, #0x3C
ivani4, по какому адресу ты нашёл цепочку и сколько раз ?
ivani4
cax.Точно такую цепочку я нигде не нашёл.Была поставлена задача :
QUOTE
Я хочу пока сделать,как мне кажется,простую вещь:взять прошивку расматриваемую в инструкции и увидеть в иде то что сах уже нашёл:
ROM:0000E884 3C 28 CMP R0, #0x3C
ROM:0000E886 01 D9 BLS loc_E88C
ROM:0000E888 3C 20 MOV R0, #0x3C
Так в Hyundai 3899 (02.09.00.00 ) эта цепочка, по указаным адресам ,выглядит иначе :3E 28 01 D9 3E 20 ,но я не стал вдаваться в подробности и сказал что нашёл.
Или ты подразумевал поиск такой цепочки в моём двд ?
cax
QUOTE (moroz @ 23-01-2006, 15:39)
Я нечеловеческими усилиями сократил размер кода до 0хF0, но этого все равно недостаточно.
Я подсократил Unicode2CP на 8 байт (думаю, что можно и ещё), перепроверил кол-во свободного места, и теперь у нас есть его целых 0xF1 байт...
Не хватает совсем чуть-чуть на обвязку...

Давай свой самый короткий код, буду тестировать, а с местом потом посмотрим что делать.
moroz
Последнее достижение - длина Е8
Бонус: место для вызова функции уже подготовлено (отмечено красным)

00 B5 00 06 00 0E 2F 28 01 D9 3A 28 0B D3 40 28
01 D9 5B 28 07 D3 60 28 01 D9 7B 28 03 D3 DF 28
03 D9 FB 28 01 D2 01 20 00 E0 00 20 00 BD 00 00
00 B5 88 42 07 D2 02 78 0B 78 03 70 0A 70 01 30
01 39 88 42 F7 D3 00 BD F0 B5 26 4C 00 27 00 E0
01 34 20 78 FF F7 D4 FF 00 28 F9 D0 25 1C 23 78
0D 2B 03 D9 01 35 2B 78 0D 2B FB D8 2B 78 00 2B
02 D1 01 27 00 E0 01 3D 28 78 FF F7 C1 FF 00 28
F9 D0 20 1C 29 1C FF F7 D3 FF AC 42 22 D8 08 E0
20 78 FF F7 B5 FF 00 28 00 D0 26 1C 01 34 AC 42
08 D8 20 78 80 28 F3 D2 FF F7 AA FF 00 28 EF D0
00 E0 01 34 AC 42 06 D8 20 78 80 28 F9 D3 FF F7
9F FF 00 28 F5 D0 70 1C 61 1E FF F7 B1 FF 01 34
AC 42 E6 D9 2B 78 00 2B 01 D0 00 2F B9 D0 XX XX
XX XX
F0 BD 78 56 34 12
cax
moroz, гениально ! Я как-то занимался оптимизацией ассемблерного кода, и по себе знаю какая это заморочка.

Теперь о моей части. Код проверки выбора в меню выглядит примерно так (вместо R0 можно использовать любой другой регистр):

LDR R0, =sharedMemAdr (этот адрес уже находится неподалёку от места, где лежит этот код - что есть хорошо)
ADD R0, #offset_of_menu_choice
LDRB R0, [R0]
CMP R0, #value
BNE dont_reverse_and_exit

На всё про всё - 5*2=10 байт.

Вся эта радость, если будет висеть снаружи, потребует свой PUSH/POP и ещё команду перехода внутрь кода реверсирования.
Не будет ли так любезен глубокоуважаемый moroz красиво встроить эти 5 команд или их аналог в свой код ?

Похоже, что в конечном итоге мы уложимся в отведённое место.
cax
moroz:

И ещё: судя по твоим листингам, похоже я что-то не так делаю, ибо у меня подпрограммы не опознаются (SUB_GetSubLength, SUB_ClearMpeg4SubtitleParams и т.д.)
Разве нужно что-то делать в IDA кроме прогона MT1389_ARM_v1.6.idc ?
cax
QUOTE (moroz @ 24-01-2006, 19:31)
КСТАТИ
Вызывать мой код надо после этого куска. Боюсь что иначе не будет нуля, а я его ищу.
У меня этот кусок выглядит стандартно - т.е. как в доке НьюЭйджа:

ROM:0000F5C8 loc_F5C8
ROM:0000F5C8 02 98 LDR R0, [SP,#0x30+var_28]
ROM:0000F5CA 5C 28 CMP R0, #0x5C ; '\'
ROM:0000F5CC 01 D9 BLS loc_F5D2
ROM:0000F5CE 5C 20 MOV R0, #0x5C ; '\'
ROM:0000F5D0 02 90 STR R0, [SP,#0x30+var_28]
ROM:0000F5D2
ROM:0000F5D2 loc_F5D2
ROM:0000F5D2 02 98 LDR R0, [SP,#0x30+var_28]
ROM:0000F5D4 00 24 MOV R4, #0
ROM:0000F5D6 34 54 STRB R4, [R6,R0]
ROM:0000F5D8 30 1C ADD R0, R6, #0

и так далее.

Хоть убей, не могу найти =Subtitle.
moroz
cax, спасибо на добром слове, но хочу пояснить: я ассемблерный код не пишу. Мне даже страшно подумать, сколько времени заняло бы написать такое на ассемблере, даже если бы я его хорошо знал. Для этих дел люди придумали компайлер - вот его-то я и использую. Я предупреждал что ты будешь разочарован.
Насчет кода проверки - постараюсь надурить компайлер так чтобы он изготовил желаемый код, но 10 байт не гарантирую.

*********************

QUOTE
подпрограммы не опознаются
В скрипте этого нет, переименовывал вручную. Частью по статье, частью самостоятельно.

*********************

Не могу угнаться за твоими постами :)
QUOTE
У меня этот кусок выглядит стандартно
Здесь все сложнее. Адрес находится на стэке, у меня не получилось отследить как он туда попал, кажется в виде аргумента. А что у тебя в SUB_ClearMpeg4SubtitleParams?
moroz
Сколько дать offset_of_menu_choice?
cax
Я его (SUB_ClearMpeg4SubtitleParams) не нашёл. Не исключено, что у меня его и нет.

На всякий случай: в данный момент работа идёт над прошивкой к Apex JDP707 (YPD701D.BIN)

offset_of_menu_choice (1 байт) - какой угодно. Я буду его потом менять сам под конкретный плейер.

То же касается и загрузки адреса общей памяти - байткод я буду вычислять сам
(один байт - расстояние от команды до числа, делённое на 4, второй - код команды загрузки)

QUOTE
Для этих дел люди придумали компайлер - вот его-то я и использую

Я уже давно догадался, что ты с оптимизациями кросс-компилятора играешься.
А для тестирования компилируешь обычным компилятором под свой PC, верно ?
moroz
Абсолютно

Заняло, кстати, 8 байт. Оптимайзер, однако.


00 B5 00 06 00 0E 2F 28 01 D9 3A 28 0B D3 40 28
01 D9 5B 28 07 D3 60 28 01 D9 7B 28 03 D3 DF 28
03 D9 FB 28 01 D2 01 20 00 E0 00 20 00 BD 00 00
00 B5 88 42 07 D2 02 78 0B 78 03 70 0A 70 01 30
01 39 88 42 F7 D3 00 BD F0 B5 28 4C 00 27 28 4B
9B 7A 01 2B 49 D1 00 E0 01 34 20 78 FF F7 D0 FF
00 28 F9 D0 25 1C 23 78 0D 2B 03 D9 01 35 2B 78
0D 2B FB D8 2B 78 00 2B 02 D1 01 27 00 E0 01 3D
28 78 FF F7 BD FF 00 28 F9 D0 20 1C 29 1C FF F7
CF FF AC 42 22 D8 08 E0 20 78 FF F7 B1 FF 00 28
00 D0 26 1C 01 34 AC 42 08 D8 20 78 80 28 F3 D2
FF F7 A6 FF 00 28 EF D0 00 E0 01 34 AC 42 06 D8
20 78 80 28 F9 D3 FF F7 9B FF 00 28 F5 D0 70 1C
61 1E FF F7 AD FF 01 34 AC 42 E6 D9 2B 78 00 2B
01 D0 00 2F B9 D0 FF F7 85 FF F0 BD 78 56 34 12
cax
Эээээ... зря я тебе сказал "любое число"...

LDRB R3, [R3,#0xA] - это, конечно, офигительно, но если там будет что-то поболее 0xA, оно точно закодируется 2-мя байтами, или в этом виде адресации есть ограничение на величину офсета ?

Пы.Сы. Если не буду долго отвечать - значит уснул и продолжу, скорее всего, через день-два (или более).
moroz
Ограничение на длину, конечно, есть. Надеюсь нам хватит. А то придется заплатить еще двумя байтами.

Спокойной ночи.
moroz
Aдреса мне найти не удалось. Зато вот такая идея:

вот наше любимое место

ROM:0000F5C8 LDR R0, [SP,#0x30+var_28]
ROM:0000F5CA CMP R0, #0x5C ; '\'
ROM:0000F5CC BLS loc_F5D2
ROM:0000F5CE MOV R0, #0x5C ; '\'
ROM:0000F5D0 STR R0, [SP,#0x30+var_28]
ROM:0000F5D2
ROM:0000F5D2 loc_F5D2 ; CODE XREF: SUB_Mpeg4SubtitleText_Display+7Ej
ROM:0000F5D2 LDR R0, [SP,#0x30+var_28]
ROM:0000F5D4 MOV R4, #0
ROM:0000F5D6 STRB R4, [R6,R0]
ROM:0000F5D8 ADD R0, R6, #0
ROM:0000F5DA BL sub_F442

перед вызовом sub_F442 искомый адрес как раз в нулевом регистре. Вместо нее вызвать мой код, а я перед вызовом sub_F442 позабочусь R0 восстановить. Должно сработать. Только вот не знаю, когда теперь дойдут руки, постараюсь не задерживать.
moroz
Дело все больше запутывается, надеюсь что нигде не напорол.

Вызывать вместо sub_F442
Максимальный offset_of_menu_choice - 0x1F. Если больше - добавляется двухбайтная команда.


00 B5 00 06 00 0E 2F 28
01 D9 3A 28 0B D3 40 28 01 D9 5B 28 07 D3 60 28
01 D9 7B 28 03 D3 DF 28 03 D9 FB 28 01 D2 01 20
00 E0 00 20 00 BD 00 00 00 B5 88 42 07 D2 02 78
0B 78 03 70 0A 70 01 30 01 39 88 42 F7 D3 00 BD
F0 B5 47 46 80 B4 07 1C 84 1C 00 23 98 46 2A 4B
1B 68 DB 7F 01 2B 4C D1 00 E0 01 34 20 78 FF F7
CB FF 00 28 F9 D0 25 1C 23 78 0D 2B 03 D9 01 35
2B 78 0D 2B FB D8 2B 78 00 2B 03 D1 01 23 98 46
00 E0 01 3D 28 78 FF F7 B7 FF 00 28 F9 D0 20 1C
29 1C FF F7 C9 FF AC 42 22 D8 08 E0 20 78 FF F7
AB FF 00 28 00 D0 26 1C 01 34 AC 42 08 D8 20 78
80 28 F3 D2 FF F7 A0 FF 00 28 EF D0 00 E0 01 34
AC 42 06 D8 20 78 80 28 F9 D3 FF F7 95 FF 00 28
F5 D0 70 1C 61 1E FF F7 A7 FF 01 34 AC 42 E6 D9
2B 78 00 2B 02 D0 43 46 00 2B B7 D0 38 1C FF F7
81 FF
08 BC 98 46 F0 BD
cax
Запутывается - не то слово.

Первый запуск оказался неудачным. Никакой кабель не понадобился - ведь зависает оно только при попытке показа субтитров, но сдаётся мне, что мы не можем вызывать подпрограмму sub_F442 сами, ибо где-то внутри неё идёт работа со стеком, а мы его подвинули своим PUSH-ем.

Давай попробуем ещё разок, но на этот раз:

1) пусть вместо sub_F442 мы затрём идущие перед ним команды
F5D6 34 54 STRB R4, [R6,R0]
F5D8 30 1C ADD R0, R6, #0

а при входе в подпрограмму первым делом их выполним, после чего уже можно сделать PUSH {R0-R7,LR}

Заодно решится проблема с переходом на заключительный POP {R0-R7,PC} (да, есть такой переход) вместо перехода на продублированную затёртую команду (которые теперь будут идти вначале твоего кода)

2) Будь добр, сделай проверку меню на 2 байта длиннее, но чтобы я мог подставить любой байт, а не только до 0x1F

Заранее благодарю.
moroz
QUOTE
где-то внутри неё идёт работа со стеком, а мы его подвинули своим PUSH-ем
Исключено. Любая функция работает со стеком в двух случаях:
1. Она сама туда "пушнула" (наш случай)
2. Вызывающая функция сунула туда свои аргументы - не наш случай, т.к. перед вызовом sub_F442 пушей нет.
Таким образом, работа со стеком локализована в пределах каждой функции.

Баг состоит в другом, сейчас я это заметил. sub_F442 возвращает значение в R0, а я его бесстыдно затираю своим. Виноват, исправлюсь.
cax
И всё же, сделай, пожалуйста, как я попросил - 2 команды вначале

(даже если мне померещилось, что в недрах вызова подпрограммы идёт снятие значений со стека с индексом, и что выход реализован не совсем корректно)
moroz
Не могу. Компайлер ведь делает пуш самостоятельно, первым делом при входе в функцию. Давай я все-таки сначала починю баг, а?
cax
Как скажешь.
moroz
Попутно нашел еще один баг - при неподходящем значении меню выход происходил без вызова рутины. Может в этом было дело?


00 B5 00 06 00 0E 2F 28
01 D9 3A 28 0B D3 40 28 01 D9 5B 28 07 D3 60 28
01 D9 7B 28 03 D3 DF 28 03 D9 FB 28 01 D2 01 20
00 E0 00 20 00 BD 00 00 00 B5 88 42 07 D2 02 78
0B 78 03 70 0A 70 01 30 01 39 88 42 F7 D3 00 BD
F0 B5 47 46 80 B4 80 46 04 1C 00 27 29 4B 1B 68
FF 33 1B 78 01 2B 47 D1 00 E0 01 34 20 78 FF F7
CB FF 00 28 F9 D0 25 1C 23 78 0D 2B 03 D9 01 35
2B 78 0D 2B FB D8 2B 78 00 2B 02 D1 01 27 00 E0
01 3D 28 78 FF F7 B8 FF 00 28 F9 D0 20 1C 29 1C
FF F7 CA FF AC 42 22 D8 08 E0 20 78 FF F7 AC FF
00 28 00 D0 26 1C 01 34 AC 42 08 D8 20 78 80 28
F3 D2 FF F7 A1 FF 00 28 EF D0 00 E0 01 34 AC 42
06 D8 20 78 80 28 F9 D3 FF F7 96 FF 00 28 F5 D0
70 1C 61 1E FF F7 A8 FF 01 34 AC 42 E6 D9 2B 78
00 2B 01 D0 00 2F B9 D0 40 46 FF F7 83 FF 08 BC
98 46 F0 BD
kisav
Доброго времени суток.

Я думаю что многим здесь на этой ветке это уже не интересно или не актуально но тем не менее...

Несколько дней мучаюсь со своим плеером. Но русский он не показывает.
Может, откликнется добрая душа и укажет где я ошибся. :wink:


Пользовался материалом из этой ветки

2) ищем "41 18 10 39 C9 7B" (должен найтись 2 раза !) ---> В моем случае (254AE И 254Е2)
и запоминаем адреса, где находится каждый "10 39 C9 7B"
(позже мы будем менять каждый "10 39 C9 7B" на другие 4 байта).

3) ищем т.н. "сообщения С++ об ошибках" ---> В моем случае (29280),
Искать нужно ТЕКСТОМ, и ты найдёшь примерно такие фразы:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Я запустил BCalc и сделал расчёты для тебя.

23В72: замени 10 39 C9 7B на 04 F0 31 F8 ---> В моем случае: 254AE: 10 39 C9 7B на 03 F0 E7 FE
23ВА6: замени 10 39 C9 7B на 04 F0 17 F8 ---> В моем случае: 254Е2: 10 39 C9 7B на 03 F0 CD FE

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

Вставил это по адресу 29280

10 39 01 B4 88 7B 04 28 C8 7B 10 D1 08 7C 04 28
C8 7B 03 D0 08 7C 00 28 C8 7B 08 D1 01 28 01 D1
A7 30 04 E0 51 28 01 D1 67 30 00 E0 B0 30 01 E0
00 00 00 00 F9 28 00 D9 F5 38 01 1C 01 BC 70 47



Дальше у меня не сходится с этим примером. У меня в родной прошивке 15 фонтов.
Если я понял правилно то самый первый отвечает за OSD и замена его приводит к не правилному отображению OSD. В место пробела у меня появилось это -> @

После вышеуказаных процедур вместо русского одни "_" До были теже пробелы только в перемешку с цифрами.

Могу сказать одно, ivani4-у сильно повезло с Маэстро :p

На моем фтп есть оригинальная прошивка. ~ 2mb. (Слил через кабель).
Она не поддерживает русский OSD и не отображает название русских имен файлов хотя в одном из фонтов я четко видел русские буквы. (Смотрел через remaker).

Если интересно, то милости просим на мой фтп

kisav.homeftp.net (\LG 511\Original\original_serial.bin)
ftpuser/ftpuser
moroz
cax, что слышно? Как я понимаю, результатов пока нет. Какие планы?
cax
kisav: читай внимательнее - кроме АРМ надо также пропатчить и код 8032, и подчерки заменятся на буквы.
Об этом писалось в этой самой теме.

moroz:

при проверке кода по неизвестной причине я убил 2 плейера. Один оживил сегодня ночью, второй, похоже, умер безвовратно.
Слава богу, ребёнку есть на чём мультики смотреть.
Дальнейшие эксперименты будут позже.
moroz
Нихрена себе! :fear2: Вот так код! "Безвозвратно" - в смысле даже через кабель не прошивается? Как же можно дальше эксперементировать?
moroz
Несмотря на полное невежество в делах оживления плеера все-таки не утерпел и рискнул: приладил переворот иврита к прошивке саха к 2102 (без привязки к меню, только попробовать) и перепрошился. И что интересно - мне это сошло с рук!
Что могу рассказать? Сам переворот работал нормально. Правда протестить как следует не удалось, т.к. увидеть субтитры удалось только в одном фильме (из 3-х). У меня на каждом CD по нескольку вариантов субтитров, и первым выбирался как раз заранее перевернутый вариант. Так в двух фильмах при переключении субтитры просто исчезли. Интересно, кто-то пользуется этой прошивкой для фильмов с субтитрами? Сплошное разочарование.
сах, отсюда возник вопрос (я не вникал в это место в инструкции, заранее извиняюсь): умеем ли мы добавить выбор фонта в меню если его там раньше не было? Я клоню к тому чтобы взять старую прошивку к 2102, в которой нет этой болезни, и сделать ее двуязычной.
cax
Вполне реально. Добавил же я выбор шрифта в такой древний плейер, как Hyundai servo 02.09.

Идея несложная: прочесть в коде 8032 выбор языка в меню Subtitles, и по результатам сменить номер фонта в SUB_SetStyle. Места для добавок в 8032 - навалом. Второй шрифт залепляется вместо китайского. Следи, чтобы размер прошивки не вылез за 1 мегабайт.

Для примера сравни прошивку для Юндая до и после изменений (
сперва надо натравить на оригинальную прошивку Subtitle Patch из MTK ReMakera, и лишь потом сравнивать)

Сейчас у меня серьёзный завал со временем, так что помочь могу только советами.
cax
QUOTE (moroz @ 31-01-2006, 21:03)
moroz, а давай сначала я тебе подскажу как довести до ума меню в новой прошивке, чтобы оно включало иврит-наоборот ? А ? И выложим твоё творение.
А со старой прошивкой дла Апекса повозимся потом. Что скажешь ?
moroz
Выложить прошивку - суть рекомендовать ее всем честным людям. Как я могу рекомендовать кому-то что-то, чем сам пользоваться не считаю возможным? Когда ты над ней работал и выкладывал, ты еще не знал про пенку с исчезновением субтитров. Но я-то уже знаю!

Вообще мой вопрос был скорее "пристрелочный". Я не имел в виду что именно я буду это делать. А если и я, то видимо не скоро, ибо есть несколько причин, по которым не смогу взяться за дело прямо сейчас:

1. С 8082 я практически не знаком. Возьмет время пока освою.

2. Прежде чем я смогу вообще начать мне надо освоить технологию оживления. Плеер у меня один, а мультики так же обязательны как и тебе :)

3. При дальнейшем тестировании алгоритм переворота оказался далеко небезупречен. Придется с ним еще повозиться.

4. Со свободным временем у меня тоже напряженка, как и у всех.

Так что наверно присоединюсь к ivani4: буду ждать пока ты станешь немного посвободнее, а тем временем буду потихоньку продвигаться самостоятельно.

Надеюсь на дальнейшее плодотворное сотрудничество :hi:
cax
Принимается - до появления более безупречного алгоритма.

Что касается "выложить-рекомендовать" - такова прошивка от производителя, и мы лишь её улучшили. Когда будет готов более-менее окончательный вариант твоего кода, дай знать, прицепим к меню вместе (это немного работы и несложно).
ivani4
Я уже предлагал и поэтому боюсь показатся навязчивым,но я не испугаюсь установить в свой плеер любую вашу разработку для проверки.Это сохранит ваши двд.Если заломаете всё безвозвратно,то как мультики будете смотреть?Вот cax уже один свой плеер грохнул.Кстати,cax,смею напомнить что во втором своём письме я предлагал свою помощь в подобных случаях.
А свой плеер я заломать не боюсь и буду рад содействовать.
К сожалению это,наверное,единственное чем могу вам помочь.Да и как? Вы ведь даже почему то не захотели помочь мне освоить иду.
И ещё ,может вам поможет,у меня есть оригинальная прошивка китайского двд в котором переворот иврита осуществлён по полной программе.Но в меню никаких функций нет.
moroz
cax
Лады. Но под твою ответственность :wink:
moroz
ivani4, не обижайся, но я понятия не имею, как помочь тебе освоить ИДУ. Ведь там все на английском, или на ассемблере. Каждый ответ на твой вопрос лишь повлечет за собой десять новых. НО НЕ НАДО ПАНИКИ! Я не сидел сложа руки и нашел то что тебе нужно:

http://www.cracklab.ru/download.php?action=get&n=Mzcw

Это сборник практических руководств для хаккера, на русском языке. В том числе руководство по ИДЕ в десяти томах. Надеюсь, ты найдешь это полезным.

Что касается твоего предложения - не подумай что твоей помощью пренебрегают. Просто отлаживаться по переписке - это иногда довольно затруднительно. Впрочем, буду иметь его в виду и при подходящей возможности воспользуюсь. В любом случае - спасибо.
ivani4
moroz
Спасибо за ссылку.Скачал.Обязательно ознакомлюсь.
А что касается иды ,так я не просил чтоб вы меня обучили,я не настолько наглый учитывая вашу занятость и мою тупую голову.Да и не освоить мне её никогда.Это,так скажем,ознакомится.Просто хотел получить ответ на конкретный вопрос.Теперь,учитывая что у нас разный уровень знаний а отсюда и разное восприятие, могу допустить что вопрос был поставлен не грамотно.Поэтому сформулирую эту же просьбу несколько по другому:
Выдержки из объяснений от сах:
Если нам повезёт, то эти 2 байта грузятся в регистры 4 и 5 примерно так:
7D 07 mov R5, #7
7C 02 mov R4, #2
Но если не повезёт, и регистры грузятся иначе....
Какой из них нам подходит - узнаем уже в дизассемблере
,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Я научился искать HEX последовательность в иде и вижу эти байты,но не вижу в какие регистры они загружены.
Вопрос:Каким образом вы это видите?Как увидеть информацию типа:
ROM:0000E884 3C 28 CMP R0, #0x3C
ROM:0000E886 01 D9 BLS loc_E88C
ROM:0000E888 3C 20 MOV R0, #0x3C
???????????????????????????????????????????????????????????

moroz,если данная просьба не грамотна или не корректна или же сложна в объяснении,то не затрудняй себя ответом.
cax
ivani4, чтобы увидеть не голые байты, а команды с мнемоникой, надо после загрузки АРМ-файла в IDA (укажи тип процессора ARM) запустить IDC скрипт (File->IDC file). Он пройдёт по файлу и всё пометит. Скрипт берут из раздела файлов группы mt13x9 (последняя версия скрипта, вроде, 1.6)
cax
QUOTE (moroz @ 30-01-2006, 08:18)
Нихрена себе! :fear2: Вот так код! "Безвозвратно" - в смысле даже через кабель не прошивается? Как же можно дальше эксперементировать?
Отвёз сегодня свой портативный плейер в мастерскую. Наверняка, по гарантии мне его не починят - по нему ясно видно, что его вскрывали. Надеюсь, что сумеют починить и денег не очень много возьмут... хотя скорее всего мне это влетит сотни в 4 шекелей.

Обидно, что я рискую своими плейерами, а ни один импортёр так и не предложил мне не то что денег за работу, а хотя бы плейер для экспериментов.
ivani4
cax спасибо за информацию,попробую разобратся с идой.
А помощь я предлагал тебе не однократно и в личных письмах(2 шт.) и в открытую на форуме(последний раз вчера).
Страницы: 1 2 [3] 4 5 6 7 8