Pages: (52) 1 2 3 .. 6 .. 9 .. 12 .. 15 16 [17] 18 19 .. 21 .. 24 .. 27 .. 30 .. 33 .. 36 .. 39 .. 42 .. 45 .. 48 .. 51 52  ( Show unread post )

> Модифицируем прошивку для DVD плейера (MTK 1389), инструкция от САХ
 cax Member is Offline
 Posted: 23-01-2006, 16:17 (post 241, #534514)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
QUOTE (moroz @ 18-01-2006, 21:36)
Длина лежит во втором байте.
Я через пень-колоду научился кое-как читать из АРМ заданные в меню значения, теперь хочу испытать твою процедуру. Поясни, пожалуйста, какие аргументы она принимает, и если знаешь, то как получить адрес буфера субтитров. Я опять запутался.

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

Пы.Сы. Если выкинуть процедуру перевода юникодных букв в именах файлов, то твоя процедура с трудом помещается в свободном месте АРМ. Видимо, мне придётся научиться его "расширять", как это делают мастера в группе Яху.
PM Email Poster
Top Bottom
 moroz Member is Offline
 Posted: 23-01-2006, 18:39 (post 242, #534603)

Member

Group: Members
Posts: 134
Warn:0%-----
Aргументов нет. Все что нужно - подставить вместо 12345678 (последнее слово) адрес субтитра + 2, т.е. начало самого текста.
Как найти адрес субтитров описано в статье Нью Эйджа. Если некогда возиться - я могу помочь, у меня уже рука набита.
Насчет дополнительного свободного места - было бы очень кстати. Я нечеловеческими усилиями сократил размер кода до 0хF0, но этого все равно недостаточно.
QUOTE
Я через пень-колоду научился кое-как читать из АРМ заданные в меню значения
У меня тут появилась идея как просматривать из АРМ любую память, в т.ч. общую, в рантайме. Если интересно - можно заняться.
PM Email Poster
Top Bottom
 cax Member is Offline
 Posted: 23-01-2006, 19:04 (post 243, #534628)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
moroz:

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

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

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

Мне достаточно войти в точку входа твоей подпрограммы командой BL, и она сама вернёт меня назад по окончании, верно ? Я бы ещё перед возвращением хотел выполнить те 4 байта команд, которые затираются вышеупомянутой командой BL. Если это нельзя встроить перед возвращением - напишу в обходную (но это съест ещё несколько байт).
PM Email Poster
Top Bottom
 moroz Member is Offline
 Posted: 23-01-2006, 21:12 (post 244, #534712)

Member

Group: Members
Posts: 134
Warn:0%-----
Цитирую:
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 байта в каждом субтитре, т.е. возможности практически неограниченые.

This post has been edited by moroz on 24-01-2006, 07:56
PM Email Poster
Top Bottom
 ivani4 Member is Offline
 Posted: 24-01-2006, 09:47 (post 245, #535115)

Member

Group: Members
Posts: 184
Warn:0%-----
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
Субтитры теперь не отображаются.
Не смотря на это произвёл нужные изменения в АРМ и с именами файлов всё получилось.
А как востановить субтитры?
PM
Top Bottom
 cax Member is Offline
 Posted: 24-01-2006, 10:27 (post 246, #535120)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
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 не позволяет - искать схожий фрагмент самому и самому его менять.
PM Email Poster
Top Bottom
 ivani4 Member is Offline
 Posted: 24-01-2006, 10:47 (post 247, #535130)

Member

Group: Members
Posts: 184
Warn:0%-----
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
Но это не помогло
Как нужно было сделать??????????????????

This post has been edited by ivani4 on 24-01-2006, 11:51

Attached File ( Number of downloads: 62 )
Attached File MTK _SUB_Style_.txt
PM
Top Bottom
 cax Member is Offline
 Posted: 24-01-2006, 13:01 (post 248, #535201)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
1) аттачи почему-то не работают
2) Каким образом это похоже ? Там должно быть "setb", разве нет ?
3) иногда шрифт субтитров задаётся совсем в другом месте - например, в ивритизированных прошивках с переключателем шрифта для Апекс 2102 и 2400. Об этом есть у меня в инстру... ну, ты понял.
PM Email Poster
Top Bottom
 ivani4 Member is Offline
 Posted: 24-01-2006, 13:07 (post 249, #535204)

Member

Group: Members
Posts: 184
Warn:0%-----
сах,нет вроде бы setb.А как и что искать в другом месте я не знаю.Если чувствуешьчто это сложно,то давай оставим это дело.Не удобно тебя напрягать.



This post has been edited by ivani4 on 24-01-2006, 14:27
PM
Top Bottom
 cax Member is Offline
 Posted: 24-01-2006, 14:23 (post 250, #535230)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
Ты прав, давай пока оставим.
В качестве альтернативного решения - добавить новый шрифт для имён файлов под номерами 6-7 и поменять его номер там, где он задаётся, но это тоже на пальцах не рассказать...
PM Email Poster
Top Bottom
 cax Member is Offline
 Posted: 24-01-2006, 14:28 (post 251, #535233)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
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 байта, в которых хранится длина буфера (или длина текущего субтитра) ?
PM Email Poster
Top Bottom
 ivani4 Member is Offline
 Posted: 24-01-2006, 14:34 (post 252, #535237)

Member

Group: Members
Posts: 184
Warn:0%-----
cax
ОК.Оставляем это дело.И я по прежнему жду когда ты освободишься что бы рассмотреть баг 60.

This post has been edited by ivani4 on 24-01-2006, 16:15
PM
Top Bottom
 moroz Member is Offline
 Posted: 24-01-2006, 15:38 (post 253, #535271)

Member

Group: Members
Posts: 134
Warn:0%-----
Исключительно на основе анализа кода. Ошибка крайне маловероята. Если нужны доказательства и цитаты - предоставлю, но это займет какое-то время.
PM Email Poster
Top Bottom
 moroz Member is Offline
 Posted: 24-01-2006, 22:31 (post 254, #535589)

Member

Group: Members
Posts: 134
Warn:0%-----
Ну вот хотя-бы это:
Пресловутый пример ограничения субтитра по длине (бывш. баг 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


PM Email Poster
Top Bottom
 ivani4 Member is Offline
 Posted: 24-01-2006, 23:06 (post 255, #535616)

Member

Group: Members
Posts: 184
Warn:0%-----
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
Никак не могу сообразить как это ищут?Не знаю с чего начать.Или без знаний ассемблера ничего нельзя сделать?

This post has been edited by ivani4 on 25-01-2006, 07:52
PM
Top Bottom
Topic Options Pages: (52) 1 2 3 .. 6 .. 9 .. 12 .. 15 16 [17] 18 19 .. 21 .. 24 .. 27 .. 30 .. 33 .. 36 .. 39 .. 42 .. 45 .. 48 .. 51 52