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

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

Member

Group: Members
Posts: 134
Warn:0%-----
cax, спасибо на добром слове, но хочу пояснить: я ассемблерный код не пишу. Мне даже страшно подумать, сколько времени заняло бы написать такое на ассемблере, даже если бы я его хорошо знал. Для этих дел люди придумали компайлер - вот его-то я и использую. Я предупреждал что ты будешь разочарован.
Насчет кода проверки - постараюсь надурить компайлер так чтобы он изготовил желаемый код, но 10 байт не гарантирую.

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

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

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

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

This post has been edited by moroz on 26-01-2006, 23:20
PM Email Poster
Top Bottom
 moroz Member is Offline
 Posted: 26-01-2006, 23:22 (post 272, #537072)

Member

Group: Members
Posts: 134
Warn:0%-----
Сколько дать offset_of_menu_choice?
PM Email Poster
Top Bottom
 cax Member is Offline
 Posted: 26-01-2006, 23:23 (post 273, #537073)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
Я его (SUB_ClearMpeg4SubtitleParams) не нашёл. Не исключено, что у меня его и нет.

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

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

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

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

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

This post has been edited by cax on 26-01-2006, 23:34
PM Email Poster
Top Bottom
 moroz Member is Offline
 Posted: 26-01-2006, 23:36 (post 274, #537082)

Member

Group: Members
Posts: 134
Warn:0%-----
Абсолютно

Заняло, кстати, 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
PM Email Poster
Top Bottom
 cax Member is Offline
 Posted: 26-01-2006, 23:47 (post 275, #537087)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
Эээээ... зря я тебе сказал "любое число"...

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

Пы.Сы. Если не буду долго отвечать - значит уснул и продолжу, скорее всего, через день-два (или более).

This post has been edited by cax on 26-01-2006, 23:54
PM Email Poster
Top Bottom
 moroz Member is Offline
 Posted: 27-01-2006, 00:14 (post 276, #537104)

Member

Group: Members
Posts: 134
Warn:0%-----
Ограничение на длину, конечно, есть. Надеюсь нам хватит. А то придется заплатить еще двумя байтами.

Спокойной ночи.

This post has been edited by moroz on 27-01-2006, 00:18
PM Email Poster
Top Bottom
 moroz Member is Offline
 Posted: 27-01-2006, 01:46 (post 277, #537153)

Member

Group: Members
Posts: 134
Warn:0%-----
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 восстановить. Должно сработать. Только вот не знаю, когда теперь дойдут руки, постараюсь не задерживать.
PM Email Poster
Top Bottom
 moroz Member is Offline
 Posted: 27-01-2006, 16:20 (post 278, #537524)

Member

Group: Members
Posts: 134
Warn:0%-----
Дело все больше запутывается, надеюсь что нигде не напорол.

Вызывать вместо 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
PM Email Poster
Top Bottom
 cax Member is Offline
 Posted: 28-01-2006, 18:00 (post 279, #538140)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
Запутывается - не то слово.

Первый запуск оказался неудачным. Никакой кабель не понадобился - ведь зависает оно только при попытке показа субтитров, но сдаётся мне, что мы не можем вызывать подпрограмму 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

Заранее благодарю.
PM Email Poster
Top Bottom
 moroz Member is Offline
 Posted: 28-01-2006, 20:13 (post 280, #538210)

Member

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

Баг состоит в другом, сейчас я это заметил. sub_F442 возвращает значение в R0, а я его бесстыдно затираю своим. Виноват, исправлюсь.
PM Email Poster
Top Bottom
 cax Member is Offline
 Posted: 28-01-2006, 20:26 (post 281, #538217)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
И всё же, сделай, пожалуйста, как я попросил - 2 команды вначале

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

This post has been edited by cax on 28-01-2006, 20:45
PM Email Poster
Top Bottom
 moroz Member is Offline
 Posted: 28-01-2006, 21:09 (post 282, #538253)

Member

Group: Members
Posts: 134
Warn:0%-----
Не могу. Компайлер ведь делает пуш самостоятельно, первым делом при входе в функцию. Давай я все-таки сначала починю баг, а?
PM Email Poster
Top Bottom
 cax Member is Offline
 Posted: 28-01-2006, 22:05 (post 283, #538309)

Pro Member

Group: Members
Posts: 738
Warn:0%-----
Как скажешь.
PM Email Poster
Top Bottom
 moroz Member is Offline
 Posted: 28-01-2006, 22:51 (post 284, #538342)

Member

Group: Members
Posts: 134
Warn:0%-----
Попутно нашел еще один баг - при неподходящем значении меню выход происходил без вызова рутины. Может в этом было дело?


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

This post has been edited by moroz on 29-01-2006, 14:43
PM Email Poster
Top Bottom
 kisav Member is Offline
   Posted: 30-01-2006, 04:24 (post 285, #539176)

Newbie

Group: Members
Posts: 31
Warn:0%-----
Доброго времени суток.

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

Несколько дней мучаюсь со своим плеером. Но русский он не показывает.
Может, откликнется добрая душа и укажет где я ошибся. :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
PM Email Poster
Top Bottom
Topic Options Pages: (52) 1 2 3 .. 6 .. 9 .. 12 .. 15 .. 17 18 [19] 20 21 .. 24 .. 27 .. 30 .. 33 .. 36 .. 39 .. 42 .. 45 .. 48 .. 51 52