Jump to content
Old Phone Forum
  • Login

    You are currently not logged in to the forum.

    To comment, upload files, subscribe to answers - you need to login.

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


Recommended Posts

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

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

Programme_ambience_ARM.rar

  • Like 5
Сложность программы растет до тех пор, пока не превысит способности программиста!!!
Link to comment
Share on other sites

  • Replies 1.4k
  • Created
  • Last Reply

Top Posters In This Topic

Top Posters In This Topic

Popular Posts

f2065

Приделал к мастерпатчу обработчики BSRP, RSP, IP… Типа описание для начинающих:   MCC_BSRP - это в принципе тоже самое что MCC_TASK, но, после выполнения thumb-кода BSRP будет ждать сообщения, которое должно быть прописано в таблице cnf_err_tab. Обычно это надо в случаях использования Rtk05_2SendMsgToProcess - оно отправляет параллельному процессу какое-то указание, и не факт что указание будет выполнено мгновенно. BSRP позволяет дождаться ответного сообщения от процесса, и продолжить выполнение

AlexeyK

В принципе в настройках компилятора есть пункт "Искать адреса редиректов для длинных переходов". во многих случаях компилятор сам сможет найти нужный редирект и сделать вызов через него.   PS. правда настройка мало тестировалась и по умолчанию отключена. На вариантах которыя я сам проверял вроде работало, но мало статистики.

Дамир

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

Posted Images

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

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

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

FRAER,

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

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

  • Like 1

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

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

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

СЮДА!

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

Сложность программы растет до тех пор, пока не превысит способности программиста!!!
Link to comment
Share on other sites

Дамир,

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

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

Link to comment
Share on other sites

Дамир,

текстовый ресурс "Стоп" прошивка х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
Сложность программы растет до тех пор, пока не превысит способности программиста!!!
Link to comment
Share on other sites

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

 

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

 

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

Сначала на самом верху чертится полоска толщиной в 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 пикселей ниже вычерчивается ещё одна и начинает переливаться всеми цветами радуги и всё тут.

 

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

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

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

Link to comment
Share on other sites

не веди счетчики в регистрах 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
Link to comment
Share on other sites

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

 

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

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

Link to comment
Share on other sites

  • 3 weeks later...

Дамир,

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

Link to comment
Share on other sites

Дамир,

попробовал поискать, как ты мне посоветовал, нашлось много адресов, отбросил заведомо ложные, остальные попробовал простым перебором вариантов - нужного не оказалось... :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

Link to comment
Share on other sites

Попробуй поискать через под меню у кнопки А "Относительные вызовы (команда 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 давал :(
Link to comment
Share on other sites

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

Edited by AlexeyK
  • Like 1

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

Link to comment
Share on other sites

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

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

 

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

Link to comment
Share on other sites

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

...

используй 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*/
/* #*/

 

Edited by SaNek
  • Like 2
Link to comment
Share on other sites

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

Link to comment
Share on other sites

  • 2 weeks later...

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

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

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

Link to comment
Share on other sites

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

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

Link to comment
Share on other sites

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

Link to comment
Share on other sites

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

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

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

Link to comment
Share on other sites

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

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

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

 

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

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

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

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share




×
×
  • Create New...