Перейти к содержанию
Old Phone Forum
  • Вход

    Вы сейчас не залогинены на форуме.

    Для возможности комментариев, загрузки файлов, подписок на ответы - вам надо войти.

Задаем вопросы по теме "Создание патчей, для начинающих"


Рекомендуемые сообщения

Вот нарыл у себя сегодня на винте статейку, думаю начинающим и не только пригодиться...

Программная среда ARM

Programme_ambience_ARM.rar

  • Like 5
Сложность программы растет до тех пор, пока не превысит способности программиста!!!
Ссылка на комментарий
Поделиться на другие сайты

  • Ответов 1,4 тыс
  • Создана
  • Последний ответ

Топ авторов темы

ПривеД. :132: Вот думаю патчик написать (мигание подсветки при входящем). Скажыте это сложный патч? Я его посилю?. Опыт имею только в портировании (и то не большой)!:128:

Счастливый обладатель лицензионной Windows 7

Для друзей просто ' Паня '

Ссылка на комментарий
Поделиться на другие сайты

имеется текстовый ресурс софт-полосы, как можно найти место, где он отображается?..

Я так понимаю, это не MCC... :132:

Ссылка на комментарий
Поделиться на другие сайты

FRAER,

это как раз MCC :(

MCC_SOFTKEY зовётся на 250XEFL1 :132: А четвёртый параметер - это и есть индекс текстового ресурса для отображения.

  • Like 1

Тормозит Gravity Defiended? Тебе

сюда. Любишь музыку, но не влазит новый альбом? Тебе сюда.

Хочешь смотреть качественное видео на мобильном? Тебе

СЮДА!

Кризис?! Нету денег на хорошие наушники? Тебе СЮДА!

Ссылка на комментарий
Поделиться на другие сайты

Эта мсс используется не так часто. почти во всех местах индексы софт-полосы указываются в тумбе.

Ссылка на комментарий
Поделиться на другие сайты

имеется текстовый ресурс софт-полосы, как можно найти место, где он отображается?..

Давай конкретный текстовый ресурс и версию прошивки, будем разбираться :idea:

Сложность программы растет до тех пор, пока не превысит способности программиста!!!
Ссылка на комментарий
Поделиться на другие сайты

Дамир,

текстовый ресурс "Стоп" прошивка х700..с3

хочу сделать, чтоб при запуске плеера он не отображался (оставалось "Назад")... :!:

Ссылка на комментарий
Поделиться на другие сайты

Дамир,

текстовый ресурс "Стоп" прошивка х700..с3

хочу сделать, чтоб при запуске плеера он не отображался (оставалось "Назад")... ;)

Обычно текс софт подписи определяет lk_get_sofk

В R0 передается индекс текстового ресурса софт полосы.

В нашем случае это "Стоп", т.е. индекс 0х58

Сначала рисуется правая софт, потом левая

 

010A0851C:
0620				  MOV	R0, #0x6;назад
25F7F4EF	BL	lk_get_sofk	
041C				 MOV	R4, R0	
MOV	R0, #0x58;стоп
BL	lk_get_sofk	
MOV	R2, #0x0	
MOV	R1, #0x0	
STR	R2, [SP, #0x8]	
MOV	R2, R4	
MOV	R3, R6	
STR	R1, [SP]	
STR	R1, [SP, #0x4]	
BL	Reg_Draw_Softkey

 

Значит надо искать по маске 5820, тк параметр 0х58 передается в R0, затем ????????(:) т.к. идет вызов функции lk_get_sofk и после того, как эта функция возвращает в R0 адрес ресурса, присваивается какому либо регистру.

5820 25F7F4EF 041C

и в итоге получаем 5820 ???????? ??1C

  • Like 3
Сложность программы растет до тех пор, пока не превысит способности программиста!!!
Ссылка на комментарий
Поделиться на другие сайты

Вопрос у меня не по патчеписанию, а вообще по ассемблеру.

 

На всяких экспериментах изучаю работу кода и функций.

 

Сделал такой код, он выводит на весь экран череду разноцветных полосок.

Сначала на самом верху чертится полоска толщиной в 1 пиксель, затем меняется цвет и чуть ниже выводится следующая и таким образом весь экран заполняется переливающимся цветом.

Прошу не тыкать меня носом в полную неоптимизированность кода, так как я на это пока не смотрю.

 

PUSH {R0-R7, LR}

SUB SP, SP, #8

 

MOV R4,220 ; число повторений цикла

LDR R6, =0xf300aa ; первая полоска синего цвета

MOV R0, #0

MOV R1, #0

 

OKRASKA:

 

STR R6, [sP]

STR R0, [sP, #4]

MOV R3, #1 ; толщина линии = 1 пиксель

MOV R2, #176 ; ширина - во всю ширь экрана

BL DrawHLine

CMP R4,0

BEQ EXIT

SUB R6,0x000081 ; цвет следующей полоски будет другой

ADD R1,1 ; координата по Y следующей полоски будет на 1 больше

SUB R4,1 ; уменьшить счётчик цикла

B OKRASKA

 

EXIT:

 

MOV R0, #0

STR R0, [sP]

STR R0, [sP, #4]

MOV R3, #220

MOV R2, #176

MOV R1, #0

BL lk4_9LcdInvalidate ; собственно, вывести всё на экран

 

 

 

ADD SP, SP, #8

POP {R0-R7, PC}

.data

 

 

Код рабочий, и на экран всё полноценно выводится.

Суть его в том, что сначала все полоски как бы "условно вычерчиваются", а потом всё это дело махом за раз выводится на экран.

 

 

 

Я хотел сделать, чтобы начертилась одна, тут же lk4_9LcdInvalidate выводит её на экран и тоже самое для следующих (в дальнейшем собираюсь сделать так, чтобы всё плавно выводилось на экран), и вот какой код сделал

 

 

PUSH {R0-R7, LR}

SUB SP, SP, #0xC

 

MOV R4,220

LDR R6, =0xf300aa

MOV R1, #0

MOV R0, #0

 

OKRASKA:

STR R1,[sP,#8]

STR R6, [sP]

STR R0, [sP, #4]

MOV R3, #1

MOV R2, #176

BL DrawHLine

LDR R1,[sp,#8]

MOV R0, #0

STR R0, [sP]

STR R0, [sP, #4]

MOV R2, #176

BL lk4_9LcdInvalidate

CMP R4,0

BEQ EXIT

SUB R6,0x000042

ADD R1,1

SUB R4,1

B OKRASKA

 

EXIT:

 

 

ADD SP, SP, #0xC

POP {R0-R7, PC}

.data

 

Вот только тут вычерчивается первая, потом где-то на 30 пикселей ниже вычерчивается ещё одна и начинает переливаться всеми цветами радуги и всё тут.

 

Очень прошу глянуть кому не лень,что же тут за ошибка)

И ещё вопрос, воообще стек я правильно использовал в обоих случаях?

Двери есть везде, нужно просто знать как в них войти!

Ссылка на комментарий
Поделиться на другие сайты

не веди счетчики в регистрах r0-r3, если у тебя идут вызовы функций... так как функции сохраняют только r4-r7, с r0-r3 может происходить что угодно... Во втором случае у тебя с регистрами напутано... не следишь за значениями в них...

 

push {r0-r7,lr}

mov r4,220	;счетчик
ldr r5, =0xf300aa;цвет
mov r6, 0	;координата y


loop:
mov r1, 0
mov r0, r5
push {r0,r1}	;кладем в стек цвет и 0
mov r1, r6
mov r0, 0
mov r3, 1
mov r2, 176
bl DrawHLine
mov r0, 0
mov r1, 0
push {r0,r1}	;кладем в стек два 0
mov r3, 220
mov r2, 176
bl lk4_9LcdInvalidate 
add sp, sp,0x10	;восстанавливаем стек
cmp r4, 0
beq exit
sub r5, 0x000042;изменяем цвет
add r6, 1	;изменяем y
sub r4, 1	;уменьшаем счетчик
b loop

exit:
pop {r0-r7,pc}

  • Like 1
Ссылка на комментарий
Поделиться на другие сайты

IM-J, спасибо большущее, всё полноценно выводится на экран!

 

Причём, самое интересное, никаких принудительных задержек мне делать не пришлось, весь экран, как я и хотел, заполняется плавно, сверху вниз примерно ~ 20 пикселей (по высоте) в секунду.

Двери есть везде, нужно просто знать как в них войти!

Ссылка на комментарий
Поделиться на другие сайты

  • 3 недели спустя...

Дамир,

попробовал поискать, как ты мне посоветовал, нашлось много адресов, отбросил заведомо ложные, остальные попробовал простым перебором вариантов - нужного не оказалось... :(

Ссылка на комментарий
Поделиться на другие сайты

Дамир,

попробовал поискать, как ты мне посоветовал, нашлось много адресов, отбросил заведомо ложные, остальные попробовал простым перебором вариантов - нужного не оказалось... :ad:

Попробуй поискать через под меню у кнопки А "Относительные вызовы (команда BL) с указанием значения регистра R0" для lk_get_sofk. только надо учитывать, что эта функция может вызываться и через редиректы. также значение для "Стоп" может браться относительно из какой нибудь таблицы.

 

PS. Может, я не правильно понял, но Дамир, вроде привёл адрес, где используется "Стоп" для прошивки х700..с3

 

010A0851C:

MOV R0, #0x6;назад

BL lk_get_sofk

MOV R4, R0

MOV R0, #0x58;стоп

BL lk_get_sofk

  • Like 1

Одна из последних версий binedit здесь.

AlexeyK.gif

Ссылка на комментарий
Поделиться на другие сайты

Попробуй поискать через под меню у кнопки А "Относительные вызовы (команда BL) с указанием значения регистра R0" для lk_get_sofk

неа, ничего не получается... :49:

PS. Может, я не правильно понял, но Дамир, вроде привёл адрес, где используется "Стоп" для прошивки х700..с3

походу это вообще какой-то посторонний адрес... :67:

10A0851C:	2968	LDR 	R1, [R5]	;R1 = слово по адресу [R5]
10A0851E:	0631	ADD	R1, #0x6	;R1 = R1 + 6 = 0x2A (42)
10A08520:	0230	ADD	R0, #0x2	;R0 = R0 + 2
10A08522:	2AF7C0E9	BL	_strcpy	;(компенсирован) Вызов  \ адрес 0x104C0BF4
10A08526:	3CA8	ADD	R0, SP, #0xF0	;R0 = SP + #240
10A08528:	38F734EA	BL	_spd4_17RemovePlusChar	;(компенсирован) Вызов  \ адрес 0x10EA10F8
10A0852C:	0024	MOV	R4, #0x0	;R4 = 0

 

Комментарий модератора Дамир
Это я для К6 давал :(
Ссылка на комментарий
Поделиться на другие сайты

так может быть и индекс ресурса "Стоп" не 0x58 ?

Как полностью прошивка называется?

Одна из последних версий binedit здесь.

AlexeyK.gif

Ссылка на комментарий
Поделиться на другие сайты

FRAER, эти адреса 1008A838, 1008AD02, 1008ADF0, 1008AE86, 1008E044, 1098194A, 10981F92 наверное уже проверил.

 

посмотри ещё этот 1008AE3A.

 

ещё 10532430 и 1059С758 могут использоваться.

также для вывода подписей софт-клавиш используются MCC MCC_SOFTKEY и MCC_QUESTION. хотя вторая тут скорее всего не при чём.

 

PS. если есть CGSN патч, то можно врезаться в функцию lk_get_sofk и, если R0=0x58, сохранять значение регистра LR в какой-нибудь не используемый адрес оперативки. После вывода подпси посмотреть значение по этому адресу. Это будет адрес откуда вызывалась функция lk_get_sofk для вывода строки софт-клавиш. если нет CGSN патча, то можно сделать вывод на экран. Главное, при вставке кода не затереть регистр LR.

 

 

PPS. Прошу прощения, по умолчанию настроен не мой логин :ak:. AlexeyK

Изменено пользователем AlexeyK
  • Like 1

Спорить с детьми, самоутверждающимися в интернете, бесполезно.

Ссылка на комментарий
Поделиться на другие сайты

Как просить память ???

Если надо много (ну полмега например) ?

 

RtkGetMemory - при запросе около десятка кб - вешает мобилу даже не возвращая код ошибки!

MemMgr_Allocate - там в самом начале есть проверка если просят более 60кб - то возврат нуля сразу же.

 

Rtk50_11GetDynMemory.

А что там значит R1 ?

В примерах из патчей смотрю там пишут MOV R1, 0x23.

 

Ещё нашёл:

 

OsMemory_allocate - тоже на входе вообще R0,R1,R5

OsMemory_free

 

os_malloc. А потом что ? os_close или os_free ?

 

RtkGetPoolMemory - а это что ?

RtkGetPoolMemoryNoTrap - и это ?

Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Ссылка на комментарий
Поделиться на другие сайты

Как просить память ???

...

используй Rtk50_11GetDynMemory

r0 - сколько требуется памяти,

r1 - блок памяти (смотреть в *#56658378# - Memory Pool - Dynamic pool, смотри Initial Size и выбирай тот блок, где хватает памяти для твоих нужд)

void *Rtk50_11GetDynMemory(unsigned short vp_TypePool, unsigned int vp_Size);

 

Spoiler

/*P(***************************************************************************/
/* Procedure name : RtkGetPoolMemory */
/* Object : Return a memory pointer which is took pool passed in parameter */
/*----------------------------------------------------------------------------*/
/* Input parameters : */
/* ------------------- */
/* u16 vp_PoolId : The identificator of the pool */
/* */
/* Output parameters : */
/* ------------------- */
/* void * : The pointer on the allocated memory space */
/* */
/* Used variables : */
/* ------------------- */
/* t_RtkPoolDesc *p_Rtk_PtrPoolDesc : Pointer to the static pools control */
/* blocks table */
/* */
/* Used procedures : */
/* ------------------- */
/* None */
/* */
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* DESCRIPTION */
/* */
/* This primitive checks if there is a free cluster in the pool passed in */
/* parameter. If yes then a pointer on a cluster is returned else an */
/* exception routine is activated */
/*----------------------------------------------------------------------------*/
/***************************************************************************)P*/
/* #*/

 

Spoiler

/*P(***************************************************************************/
/* Procedure name : RtkGetPoolMemoryNoTrap */
/* Object : Return a memory pointer which is took pool passed in parameter */
/*----------------------------------------------------------------------------*/
/* Input parameters : */
/* ------------------- */
/* u16 vp_PoolId : The identificator of the pool */
/* */
/* Output parameters : */
/* ------------------- */
/* void * : The pointer on the allocated memory space */
/* */
/* Used variables : */
/* ------------------- */
/* t_RtkPoolDesc *p_Rtk_PtrPoolDesc : Pointer to the static pools control */
/* blocks table */
/* */
/* Used procedures : */
/* ------------------- */
/* None */
/* */
/*----------------------------------------------------------------------------*/
/*----------------------------------------------------------------------------*/
/* DESCRIPTION */
/* */
/* This primitive checks if there is a free cluster in the pool passed in */
/* parameter. If yes then a pointer on a cluster is returned else returns */
/* a null pointer */
/*----------------------------------------------------------------------------*/
/***************************************************************************)P*/
/* #*/

 

Изменено пользователем SaNek
  • Like 2
Ссылка на комментарий
Поделиться на другие сайты

d780xehe1

 

.thumb

.little

PUSH {LR}

SUB SP, SP, 0x8

MOV R0, SP

BL GetCurrentTimeAndDate ; 0x21348750

MOV R7, SP

LDRB R0, [R7]

LDRB R1, [R7,1]

ADD SP, SP, 0x8

POP {PC}

 

и проблема непонятная:

LDRB R0, [R7]

LDRB R1, [R7,1]

- тут мобила вешается

 

а если

LDR R0, [R7]

LDR R1, [R7, 4]

- то всё нормально

 

Почему ?????

Запускаю кусок кода в ОЗУ (через CGSN-патч).

Может есть какие ограничения связанные с выравниванием при чтении LDRB ?

Или при работе исполняемого кода из ОЗУ (потому что я ранее в ПЗУ в патчах много раз подряд LDRB делал и без проблем) ???

 

Экспериментально уже выяснил, что

одна LDRB R0, [R7] - проходит, а если подряд две LDRB R0, [R7] - вешается!

Попытка воткнуть между ними три NOP - эффекта не дала.

Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Ссылка на комментарий
Поделиться на другие сайты

  • 2 недели спустя...

Люди как можно перенести графику из Бин в Тфс! С помощу какой функцыи, и как это сделать? :(

Счастливый обладатель лицензионной Windows 7

Для друзей просто ' Паня '

Ссылка на комментарий
Поделиться на другие сайты

Помогите пожалуйста, кому не тяжело. Для патча убирания сообщения "Клавиатура разблокирована", первой его версии. Если есть непрочитанная смска или пропущенный звонок и разблокировать, то не появляются подписи к софт-кнопкам и, соответственно, не пашут они как надо. Но если после разблокировки меняется отображаемое время (следующая минута настала, например) или ещё какое событие происходит (например нажатие кнопки фото без активного LCD dump), то подписи к кнопочкам проявляются. Каким образом можно заставить D780 перерисовать экран? Или сделать чтобы окна с параметром времени вывода 0 мгновенно исчезали, а не висели до нажатия кнопки?

Заранее спасибо!

Ссылка на комментарий
Поделиться на другие сайты

Backspace,

перериовать экран так

 

SUB SP, SP, 8

MOV R0, 0

STR R0, [sP]

STR R0, [sP, #4]

MOV R1, 0 ; расстояние от верхнего края

MOV R0, 0 ; расстояние от левого края

MOV R2, 240 ; ширина обновляемой области

MOV R3, 320 ; высота обновляемой области

BL LcdInvalidate

ADD SP, SP, 8

 

только не думаю что это поможет, там ещё с подсветкой какая-то фигня

я думаю лучше поковырять внутренности того MCC_REPORT и в нём нейтрализовать просто вывод окна

 

.equ LcdInvalidate 0x20A649A8 ; D780XEHE1

.equ LcdInvalidate 0x218108DC ; C5212XEIB5

  • Like 1

Нужен какой-то патч на C3322i, C3322, C3592, B5722, S5610, E1080, E1081, и прочие Swift/Infineon ? Обращайтесь в ЛС или E.F2065@gmail.com

Ссылка на комментарий
Поделиться на другие сайты

там ещё с подсветкой какая-то фигня

Спасибо за помощь! Жаль что только вечером к кабелю доберусь...

А подсветка ещё с первой версии включается нормально :shock:

Ссылка на комментарий
Поделиться на другие сайты

Запускаю кусок кода в ОЗУ (через CGSN-патч).

Может есть какие ограничения связанные с выравниванием при чтении LDRB ?

Или при работе исполняемого кода из ОЗУ (потому что я ранее в ПЗУ в патчах много раз подряд LDRB делал и без проблем) ???

 

Экспериментально уже выяснил, что

одна LDRB R0, [R7] - проходит, а если подряд две LDRB R0, [R7] - вешается!

Попытка воткнуть между ними три NOP - эффекта не дала.

Была такая байда в Сименсах, вроде, побороли... Посмотри здесь, я думаю, собака здесь порылась...

Ссылка на комментарий
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйте новый аккаунт в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти



×
×
  • Создать...