NetLab · Rules · Torrent Tracker · Have a problem? · Eng/Rus | Help Search Members Gallery Calendar |
Welcome Guest ( Log In | Register | Validation ) | Resend Validation Email |
Pages: (52) < 1 2 3 .. 6 .. 9 .. 12 .. 15 .. 18 .. 21 .. 24 .. 27 .. 30 .. 33 .. 36 .. 39 .. 42 .. 45 .. 48 49 50 [51] 52 > ( Show unread post ) |
Модифицируем прошивку для DVD плейера (MTK 1389), инструкция от САХ |
|
Posted: 29-05-2007, 10:51
(post 751, #753250)
|
||||
Member Group: Members Posts: 126 Warn:0% |
vboroda
Я исходники этих функций не смотрел, но NA вышел из положения таким образом. В функции есть ограничение на максимально используемый адрес, он увеличивает границу на 20-30 байт тем самым он уверен на 100% что кроме него эти ячейки ни кто не тронет. Правда одно но, когда ещё не было исходнтков я попробовал увеличить границу, но у меня почему то не пошло, толи я не все изменения внёс толи что то ещё...
Есть пару вопросов: 1. Как нашёл свободное место в Shared Mem? 2. Отобрази твою идею в исходнике, хочу тоже помозговать. |
||||
|
Posted: 29-05-2007, 17:40
(post 752, #753310)
|
||
Newbie Group: Members Posts: 39 Warn:0% |
Просто так увеличить это значение - этого мало Посмотри исходники вниманельнее - за границей максимального eeprom начинается зона сохранения положения на диске. Править надо далеко не в одном месте. |
||
|
Posted: 29-05-2007, 21:48
(post 753, #753406)
|
||||||||
Newbie Group: Members Posts: 21 Warn:0% |
Итак, (1) Где найти свободные ячейки SHMEM. Смотрим исходники. На каждую SI группу отводится 32 байта. В некоторых группах занято почти все, в других - частично. Я решил воспользоваться местом в SI_TIME_INFO_GRP (в исходниках - номер 18, в моей прошивке - 19). После 23 там ничего не используется (хотя насчет ARM я на 100% не уверен, но 8032 явно требует только первые 23 ячейки). Значит, остается 9 свободных ячеек. Мне требовалось 5 байт - 3 для времени и 2 для item ID. (2) Как работает? Нашел (по исходникам, и далее, следуя за дизассемблером) ф-ции, которые выполняются при нажатии определенных кнопок: IR_PAUSE: fgISOPauseKey() IR_STOP: fgISOStopKey() IR_POWER: fgCOMPowerKey() IR_NEXT: fgISONextKey() Каждая из этих ф-ций вызывает vSendUopCmd() для передачи команды ARM. Значит, мы можем сделать один патч для первых трех ф-ций, который сохранит все требуемые данные. Что-то вроде этого:
И функция для восстановления (записываем вызов этой ф-ции в хэндлер IR_NEXT):
Я посмотрел в IDA, какой самый высокий XRAM адрес используется в коде, и для временных переменных занял адреса чуть выше самых высоких:
(3)
Ну, а за зоной сохранения уже ничего не начинается (кажется). Т.е. то, куда пишет vEepromWriteLastMemList, и есть самый конец полезной части EEPROM. В моем случае это 0х20C. Ну хорошо, теоретически там может быть еще MAGIC2 - пропустим еще несколько байт для верности. Остальное, вероятно, не принадлежит никому? Берем простые ф-ции vEepromWriteLastMemList и fgEepromLoadLastMemList, и моделируем на их основе: vEepromSaveShMem (WORD eAddr, WORD shAddr, BYTE len) и fgEepromLoadShMem (WORD eAddr, WORD shAddr, BYTE len) Возможно я ошибаюсь, и так делать нельзя. Я еще не закончил кодировать ассемблер, и тем более - не тестировал. Самое поганое, однако, в том, что даже если я доваяю свой патч, и он будет у меня работать, переносить его на другие прошивки без очень хорошего знания и изучения соответствия между исходниками и реальной имплементацией будет архисложно. Я, разумеется, пока все делаю для Филипс 5960/37, прошивку которого я почти полностью проследил, но даже перенос на почти идентичный 5960/12 будет не совсем тривиален. This post has been edited by vboroda on 30-05-2007, 05:57 |
||||||||
|
Posted: 30-05-2007, 15:10
(post 754, #753601)
|
||
Pro Member Group: Members Posts: 738 Warn:0% |
vboroda: теперь ты можешь предлагать свои услуги продавцам DVD, которые захотят продвигать на рынке аппараты с более продвинутым функционалом, чем у конкурентов. Поскольку сделать подобную штуку нетривиально даже тем, кто владеет ассемблером, то и все карты тебе в руки. |
||
|
Posted: 30-05-2007, 16:52
(post 755, #753617)
|
||
Newbie Group: Members Posts: 39 Warn:0% |
У NA есть исходники для xoro, medion и для cyberhome. Так что сравнивать в бинарном виде изменения - бесполезно. Не делится потому что подписывал кучу NDA. |
||
|
Posted: 30-05-2007, 17:18
(post 756, #753625)
|
||
Newbie Group: Members Posts: 21 Warn:0% |
Ты знаешь, со мной уже один продавец попытался связаться. Получил от него 2 мэйла. Не понимаю, что, собственно, он хочет мне предложить. Перестать публиковать решения задач, и начать их продавать за какие-нибудь копейки? Сомневаюсь, что в этом бизнесе я смог бы заработать существенные деньги, не напрягаясь. Да и хобби уже тогда будет не хобби, а работой. Но работа у меня, слава Б-гу, пока есть, и вполне прилично оплачиваемая. Меня немного раздражает другой аспект этой деятельности: постоянные просьбы что-то сделать. У кого-то похожая прошивка, кому-то хочется, чтобы плеер делал то-то и то-то, третьему срочно требуется, чтобы я поменял в прошивке шрифт. Каждая из этих просьб в отдельности меня бы не затруднила, но когда просьбы поступают с частотой 3 в день... А запортовать мою, скажем, GOTO фичу на похожий плеер Philps 5980 занимает часа три... У меня ведь еще и основная работа имеется, и дети с женой дома требуют внимания. |
||
|
Posted: 30-05-2007, 17:37
(post 757, #753631)
|
||
Newbie Group: Members Posts: 21 Warn:0% |
Кстати, сохранение в EEPROM (и восстановление) работает. Оттестировал, проблем не увидел. Если вы не возражаете, могу привести листинг ф-ций сохранения и восстановления с комментариями. В принципе, обе процедуры вполне портабельные: нужно только заменить XRAM адреса на те, которые можно использовать в вашей прошивке, и, разумеется, поправить все вызовы других функций (морока еще та). В терминах языка С, параметры такие: void vEepromSaveShMem (WORD eAddr, WORD shAddr, BYTE len); BOOL fgEepromLoadShMem (WORD eAddr, WORD shAddr, BYTE len); Я в своей прошивке вызываю их примерно так:
Таким образом, предложенная cax фича полностью реализована. Ну или почти полностью, т.к. я все еще пытаюсь придумать наиболее оптимальный вариант возобновления игры (сейчас я просто тупо запоминаю точку при останове, а при нажатии >>|, если есть запомненная точка, прыгаю на нее, и затираю. Я просто не уверен, что это не будет раздражать пользователя.) This post has been edited by vboroda on 30-05-2007, 17:38 |
||
|
Posted: 30-05-2007, 17:47
(post 758, #753638)
|
||
Pro Member Group: Members Posts: 738 Warn:0% |
Если у есть возможность сбросить память (скажем, в Пионере первое нажатие на "стоп" приостанавливает вопроизведение, а второе - останавливает совсем), то раздражать не должно. Лично я бы добавил в меню пункт "Resume", но и с >>| тоже неплохо, как мне кажется. Проверь только, что это не мешает работе обычных DVD. |
||
|
Posted: 30-05-2007, 18:09
(post 759, #753644)
|
||
Newbie Group: Members Posts: 21 Warn:0% |
Исходники конкретных прошивок? Конечно, только 8032? Его ARM патчи явно не скомпиллированы с исходниками, хотя, судя по отсутствию явной логичности ассемблера, похоже, что он пишет их нa С, компиллирует каким-то THUMB компиллятором, а потом подправляет для вставки в прошивку. Я на 99% уверен, что исходников ARM нет ни у кого, только в Mediatek. Иначе наши китайские друзья уже выложили бы их в открытый доступ. Если у человека есть исходники конкретных прошивок, пусть в пределах 8032 кода, т.е. build environment, то сама по себе деятельность уже совершенно выходит из разряда хобби и хакинга. Если бы я мог просто взять и откомпиллировать мою прошивку, я бы туда столько новых возможностей напихал... Вопрос только в том, почему прошивки NA не распространяют сами производители устройств? Если они подрядили его улучшать их прошивки, почему бы им не рекламировать свои устройства, как улучшенные по методу NA? |
||
|
Posted: 30-05-2007, 18:25
(post 760, #753654)
|
||
Member Group: Members Posts: 126 Warn:0% |
vboroda Отлично!!! Даже очень!!! есть вопрос: в ф-ях void vEepromSaveShMem (WORD eAddr, WORD shAddr, BYTE len); BOOL fgEepromLoadShMem (WORD eAddr, WORD shAddr, BYTE len); 1. ты одновременно сохраняешь и в EEPROM и в ShMem? 2. XRAM_FE66 BYTE bIdCnt XRAM_FE67 BYTE bAddrCnt и т.д. это то что функция возвращает/передаёт? и что оно означает? не могу понять как это всё вяжеться с saveThePlayTimePatch, а так всё понятно и не сложно. This post has been edited by Rvs on 30-05-2007, 18:29 |
||
|
Posted: 30-05-2007, 20:01
(post 761, #753696)
|
||||||||
Newbie Group: Members Posts: 21 Warn:0% |
Rvs, В ShMem я сохраняю с помощью обычных ф-ций, ранее известных как ARM_PutChar/ARM_GetChar. Новые ф-ции берут len байтов по Shared Memory адресу shAddr, и запихивают их в EEPROM по адресу eAddr. И наоборот. XRAM_ ссылки используются в кач-ве локальных переменных функций. Я передаю параметры в ф-ции только через R6R7, R4R5 и R3. Извините за длиннющий листинг, но я все-таки приведу здесь его ради иллюстрации:
bIdCnt и bAddrCnt - местные переменные ф-ций. Чтобы понять, в чем их смысл, почитай исходники "оригиналов" - vEepromWriteLastMemList, fgEepromLoadLastMemList и т.д. Стыковка такая же, как во всем 8032 софте. Данные хранятся в указанных мною ячейках Shared Memory во время нормальной работы устройства. Когда устройство выключают (уходит в STANDBY mode), вызываются ф-ции сохранения параметров из Shared Memory в EEPROM. Одна из них:
Когда устройство включается, другие ф-ции считывают полезную информацию из EEPROM в Shared Memory. Одна из них вызывает теперь мою вторую ф-цию:
Код патча я уже привел. По сути это вызов C процедуры:
Ну а ф-ции, имеющие дело с сохранением и восстановлением точки запуска, знают только об адресе 0х277 в Shared Mem. Им нет никакого дела до EEPROM. This post has been edited by vboroda on 30-05-2007, 20:08 |
||||||||
|
Posted: 31-05-2007, 16:09
(post 762, #753948)
|
||
Member Group: Members Posts: 126 Warn:0% |
vboroda Блин толково ты всё сделал!!! по больше таких програмеров!!! Буду к себе добавлять, как только так сразу отпишусь!!!! |
||
|
Posted: 22-06-2007, 21:38
(post 763, #760131)
|
||
Newbie Group: Members Posts: 21 Warn:0% |
Привет, если эта тема еще дышит. Отправил вопросец в Яху группу MTK, но никакой реакции не последовало, к сожалению. Попробую сформулировать то же самое на родном языке. Имеется прошивка с ARM кодом из трех частей. Аппарат Philips 5960. Распаковал этот ARM код (весь сразу) MTKReMaker'ом. Вроде бы все нормально, но выясняются интересные вещи: многие пойнтеры указывают на адреса, по которым вроде как располагается в распакованном виде исполняемый код. Скажем, делаю патч для UOP removal. Нахожу участок кода. Ба, да буфер UOP_Parameters "расположен" прямо на середине какой-то ф-ции! Здесь, правда, ничего страшного не произошло, т.к. не требовалось создавать никаких новых ф-ций и куда-либо прыгать. Еще пример: попытка поставить P&S патч от fontcreator'a. Ф-цию находим сразу, но размещена она в "высоких" адресах (0х8ХХХХ). У нас еще полно места на C++ мессиджах, расширять код пока не требуется. Попытаемся прыгнуть из "верхней" части кода на место, где располагаются С++ мессиджи. Я попробовал, и получил намертво зависший плеер. В общем, подозреваю, что алгоритм распаковки ARM кода не совсем правильно (или совсем неправильно?) отрабатывает "верхнюю" часть кода, помещая ее в менее высокие адреса, чем те, по которым она на самом деле размещается в работающей системе. Более того, я также не уверен, что алгоритм "расширения" ARM кода, применяемый в программе MtkArmResizer, правильно учитывает расположение "верхней" части кода. Есть ли у кого-то комментарии или советы по этому поводу? Может быть я просто неправильно что-то делаю? Большое спасибо за помощь! |
||
|
Posted: 30-06-2007, 19:01
(post 764, #761994)
|
||
Newbie Group: Members Posts: 1 Warn:0% |
Здравствуйте Владимир, Знаю, что досадно, но что сделать, на днях купил dvp-5980/12, потому что 5960 уже пропал, не продают его... Хотелось бы тоже самое, как на модели 5960/12, если конечно найдется времени на это... ver: 12.07.31.26 sub: 07.08.02.01 8032: 05.00.06.05 servo: 93.77.00.00 risc: 05.00.06.05 DSP: 07.03.00.81 С уважением Джони А! |
||
|
Posted: 19-10-2007, 18:38
(post 765, #787987)
|
||
Newbie Group: Members Posts: 1 Warn:0% |
Не могли бы Вы намекнуть как сделать сие с 8032 фили 3040К? Решил проблемку сам This post has been edited by RanDoM133 on 22-10-2007, 17:01 |
||
Pages: (52) < 1 2 3 .. 6 .. 9 .. 12 .. 15 .. 18 .. 21 .. 24 .. 27 .. 30 .. 33 .. 36 .. 39 .. 42 .. 45 .. 48 49 50 [51] 52 > |