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

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

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

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


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

Спасибо, чё та я совсем не х.. не знаю оказывается :)

Пойду обновлять версию моска :)

Прочитай описание компилятора BinEdit'a для начала.

ARM_Compiler_doc.rar

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

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

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

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

попытка просто вставить команды из какого нибудь меню мне ничем не помогла...

 

а ещё интересно, как просто текст нужный вывести на экран? хотя, если смогу вывести подписи софт-клавиш, могу потом в этом же месте и нужный текст таким же образом выводить... но хотелось бы в другом, нужном мне месте...

 

угу :) но это было два года назад... у меня все тема сохранена, всю читал, но не запомнил... спасибо...

Лучше работать завтра, чем сегодня...

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

а ещё интересно, как просто текст нужный вывести на экран? хотя, если смогу вывести подписи софт-клавиш, могу потом в этом же месте и нужный текст таким же образом выводить... но хотелось бы в другом, нужном мне месте...

поиск, поиск, поиск и еще раз - поиск!

В данной теме это уже обсуждалось, можно просто поискать "вывести текст" - и найдешь мой ошибочный пост, а след. за ним - разъяснение, что к чему.

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

нашёл, прочитал...

скопировал, вставил... не работает...

во первых, у меня несрабатывает

 

blx $Ven$AT$L$$lk4_10WriteWindow

 

вот эта вещь... бинэдит ругается...

не может эта функция работать с параметрами по умолчанию? или если одни нули вбить?

 

0x18FC0FB0 - или вместо этого адреса надо что нить другое вставить?

Лучше работать завтра, чем сегодня...

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

blx $Ven$AT$L$$lk4_10WriteWindow

Это вызов готового редиректа, нужно ставить:

bl lk4_10WriteWindow.

не может эта функция работать с параметрами по умолчанию? или если одни нули вбить?

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

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

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

Обожаю свою жену Анюточку! =)

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

почему именно оперативку? нельзя ли адрес какого нибудь текста?

вот что я пробовал сделать... телефон просто сразу перезагружается...

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

помогите кто нибудь разобраться...

 

 

.equ my0_5task_Table 0x20848014 ; D780

.equ MyPatchLocate 0x214E1C70

 

.equ _lk_get_sofk 0x20A6F850

.equ _Reg_Draw_Softkey 0x212D7A7C

.equ lk4_10WriteWindow 0x20EF935C

.equ lk4_10WriteWindow1 0x21805418

 

.start my0_5task_Table+0xF0*4

.word tsk+1

 

 

.start MyPatchLocate

.mcc mcc_task 0x20 0xF0 0 5 10*60*1000

.mcc mcc_getkey 0 0 2

.mcc mcc_exit

 

tsk:

 

ldr r1,=fx_pos

mov r3,26

strh r3,[r1]

ldr r1,=fy_pos

mov r3,0xA4

strh r3,[r1]

ldr r1,=f_width

mov r3,150

strh r3,[r1]

ldr r1,=f_height

mov r3,16

strh r3,[r1]

ldr r1,=f_font

mov r3,1

strb r3,[r1]

ldr r3,=0x0000FFFF

ldr r1,=f_color

str r3,[r1]

ldr r0,=0x30670E42

bl strlen

mov r1,r0

mov r2,3

str r2,[sp,4]

mov r2,0xA1

mov r3,0

mov r0,0

str r0,[sp]

ldr r0,=0x30670E42

bl lk4_10WriteWindow

 

add sp,0x100

pop {r4-r7,pc}

 

многие параметры уже пытался менять наугад... ;) просто потому что не разбираясь до конца, пытался методом тыка попасть...

ещё пытался смотреть на исходник от ЭкстаДесктоп, но мне это тоже как то мало помогло... :)

Лучше работать завтра, чем сегодня...

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

почему именно оперативку? нельзя ли адрес какого нибудь текста?

Можно.

Вообще, вроде как - код рабочий.

Ну что могу сказать - пробуй, возможно эквы неверно найдены.

Также попробуй в sp4 сохранить не тройку, а ноль.

Пробуй не обязательно прошиваться, а пробуй писать функцию в CGSN сразу же - чтоб запускать данный код (не забудь, что функция требует кусок стека).

И нафига какие-то параметры тебе в таске, которые ты все равно не считываешь ?

Плюс - если R3 не равен единице перед вызовом данной функции - то нужно будет еще обновить экран.

И шрифт ты выбрал маленький - ставь хотя бы 10.

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

щас по пунктам...

эквы - взяты из работающих патчей... к примеру, тот же ЭкстраИнфо...

советы опробую...

параметры остались от таска из фонаря... я просто прямо в его коде изменяю пока, чтобы нового не писать...

а как и в какой момент обновлять экран?

 

.mcc mcc_task 0x20 0xF0 0 5 10*60*1000

.mcc mcc_init_restore

.mcc mcc_clear_screen 1 0 0 240 0 320

.mcc mcc_getkey 0 0 2

 

для запуска компилируем в окно результат и запускаем в терминале?

а что сделать для стэка? перед всем этим отнять 4?

Лучше работать завтра, чем сегодня...

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

а как и в какой момент обновлять экран?

Ну в какой момент обновлять - зависит от задачи поставленной. Ну а вообще - тогда, когда тебе нужно, чтобы надпись появилась на экране.

Вот код обновления всего экрана:

mov r0,0

str r0,[sp]

str r0,[sp,4]

mov r1,0

mov r2,240

mov r3,240

add r3,80

bl lk4_9LcdInvalidate

.mcc mcc_clear_screen 1 0 0 240 0 320

Clear - Стирать

Screen - дисплей

Это очистка дисплея, т.е. заполнение его белым цветом, но никак не обновление =)

Обновление на мсс уровне - это mcc_screen_display, параметры такие же,как у clear_screen.

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

Кстати-кстати... :(

не просто так ведь я из патча mcc_screen_display выбросил, думал, чё пишу...

и первый парам у mcc_clear_screen не просто так единицей выставил :59: загляните в её код :)

 

но экран обновится есс-но после очистки, поэтому надо делать после этого вывод своего текста и снова обновлять...

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

чем вы мне нравитесь, тем что вы друг с другом пообщались, и главное - друг друга поняли :)

посмотрел я на код... ну вижу там эту единицу... вроде как понятно... но не совсем...

 

216DAB34: 7FB5 PUSH {R0-R6,LR} ;Сохранить регистры R0-R6,LR

216DAB36: 041C MOV R4, R0 ;R4 = R0 = 0x308AF154 (814412116)

216DAB38: 0025 MOV R5, #0x0 ;R5 = 0

216DAB3A: 2068 LDR R0, [R4] ;R0 = слово по адресу [R4]

216DAB3C: 00AB ADD R3, SP, #0x0 ;R3 = SP + #0

216DAB3E: 4088 LDRH R0, [R0, #2] ;R0 = слово по адресу [R0 + 2] ' биты 16-31 приравниваются 0

216DAB40: 1881 STRH R0, [R3, #8] ;слово по адресу [R3 + 8] = R0

216DAB42: 2068 LDR R0, [R4] ;R0 = слово по адресу [R4]

216DAB44: 8088 LDRH R0, [R0, #4] ;R0 = слово по адресу [R0 + 4] ' биты 16-31 приравниваются 0

216DAB46: 5881 STRH R0, [R3, #10] ;слово по адресу [R3 + 10] = R0

216DAB48: 2068 LDR R0, [R4] ;R0 = слово по адресу [R4]

216DAB4A: C088 LDRH R0, [R0, #6] ;R0 = слово по адресу [R0 + 6] ' биты 16-31 приравниваются 0

216DAB4C: 9881 STRH R0, [R3, #12] ;слово по адресу [R3 + 12] = R0

216DAB4E: 2068 LDR R0, [R4] ;R0 = слово по адресу [R4]

216DAB50: 8089 LDRH R0, [R0, #12] ;R0 = слово по адресу [R0 + 12] ' биты 16-31 приравниваются 0

216DAB52: D881 STRH R0, [R3, #14] ;слово по адресу [R3 + 14] = R0

216DAB54: 02A8 ADD R0, SP, #0x8 ;R0 = SP + #8

216DAB56: ACF75CEC BL _lk_ClearScreen ;(компенсирован) Вызов \ адрес 0x20A66B1C

216DAB5A: 2068 LDR R0, [R4] ;R0 = слово по адресу [R4]

216DAB5C: 4078 LDRB R0, [R0, #0x1] ;R0 = байт по адресу [R0 + 1 байт]

216DAB5E: 0128 CMP R0, #0x1 ;Сравнить R0 и 1

216DAB60: 0ED1 BNE loc_216DAB80 ;если не равно (not Z) то переход на адрес 0x216DAB80

 

как то так... так вот сначала вызывается очистка, а потом проверяется эта единица... или я что то не так понял?

или единица в первой выделенной строке?

 

а теперь основной вопрос на сегодня, который меня очень смутил... как я писал выше, эквы брал из патча ЭкстраДесктоп, который вроде как писал знающий человек... и главное, что патч то работает... взял эти эквы, добавил в SYM файл и обнаружил, что всё что использовал vvyura не совпадает с тем, что было раньше в моём файле... т.е. теперь у меня, допустим, два адреса для lk4_10WriteWindow: 20A6471C - был раньше; 20EF935C - из ЭкстраДесктоп... меня это загнало в тупик...

Изменено пользователем BaRsupillamy

Лучше работать завтра, чем сегодня...

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

всё работает... дело было в экве от экстрадесктоп, как я понял... убрал его и заработало...

там, видимо, vvyura, использовал то, что было надо ему...

 

а помогите загнать этот код в терминал...

пример в марте, который был, я нашёл... как его дополнить?

 

вот то, что надо запустить:

 

ldr		r1,=fx_pos
mov		r3,26
strh	r3,[r1]
ldr		r1,=fy_pos
mov		r3,0xA4
strh	r3,[r1]
ldr		r1,=f_width
mov		r3,150
strh	r3,[r1]
ldr		r1,=f_height
mov		r3,20
strh	r3,[r1]
ldr		r1,=f_font
mov		r3,10
strb	r3,[r1]
ldr		r3,=0x0000FFFF
ldr		r1,=f_color
str		r3,[r1]
ldr		r0,=0x210A1C40
bl		strlen
mov		r1,r0
mov		r2,0
str		r2,[sp,4]
mov		r2,0xA1
mov		r3,0
mov		r0,0
str		r0,[sp]
ldr		r0,=0x210A1C40
bl		lk4_10WriteWindow

Изменено пользователем BaRsupillamy

Лучше работать завтра, чем сегодня...

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

BaRsupillamy,

пробуй, например, так:

 

.plugin

push {lr}
sub  sp,0x20

ldr		r1,=fx_pos
mov		r3,26
strh	r3,[r1]
ldr		r1,=fy_pos
mov		r3,0xA4
strh	r3,[r1]
ldr		r1,=f_width
mov		r3,150
strh	r3,[r1]
ldr		r1,=f_height
mov		r3,20
strh	r3,[r1]
ldr		r1,=f_font
mov		r3,10
strb	r3,[r1]
ldr		r3,=0x0000FFFF
ldr		r1,=f_color
str		r3,[r1]
ldr		r0,=0x210A1C40
bl		strlen
mov		r1,r0
mov		r2,0
str		r2,[sp,4]
mov		r2,0xA1
mov		r3,0
mov		r0,0
str		r0,[sp]
ldr		r0,=0x210A1C40
bl		lk4_10WriteWindow

add  sp,0x20
pop  {pc}

.endplugin

 

но так ты ничего на экране не увидишь, чтоб увидеть - нужно обновить экран после вывода, либо посредством самой ф-и WriteWindow, для этого нужно передавать 1 в R3

 

ldr r3,=0x0000FFFF

ldr r1,=f_color

str r3,[r1]

под цвет там 2 байта выделено, поэтому правильнее использовать strh

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

шикарно :)

про стэк я догадался и так и делал, просто не уяснил про обновление и Р3 :)

спасибо, всё работает :)

Лучше работать завтра, чем сегодня...

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

как то так... так вот сначала вызывается очистка, а потом проверяется эта единица... или я что то не так понял?

или единица в первой выделенной строке?

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

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

точно 8)

затупил... приношу извинения за обвинения... а я проверяю эквиваленты на своей от д780, попадаю непонятно куда и думаю, как этим можно было что то делать в ЭкстраДесктопе... виноват...

пора мне становиться внимательнее...

Изменено пользователем BaRsupillamy

Лучше работать завтра, чем сегодня...

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

честное слово, поиск мне не помог... терпения не хватило найти...

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

патч про быстрое выключение подсветки смотрел... просто bl lk4_BackLight_On с Р3=0 и она тухнет... но мне же надо какое то время, чтобы экран горел, потом тух и снова горел... вопрос у меня только в том, как сделать счётчик... есть ли какое нить подобие wait??? или ещё как то это надо делать...

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

Лучше работать завтра, чем сегодня...

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

BaRsupillamy, это довольно сложно, нужно использовать таймер или регистрировать функцию, как отдельный поток.

Функцию для этого я знаю, а как ей пользоваться - нет.

А таймеры в удобном понятии для патчмейкера - в самсунге реализованы плохо, или просто мы не нашли нормальную функцию для этого дела.

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

а не получиться сделать что нибудь типа того, как у меня вышло в слайд шоу?

там используются какие то пользовательские функции типа... нормально описать не могу, всё по телефону на работе... завтра попробую...

т.е. стандартными средствами ассемблера никак задержки не сделать? нельзя организовать цикл с какой нибудь операцией? пусть регистры туда сюда кидает... на это же время должно уходить... для моргания хватит 2-3 секунды...

Лучше работать завтра, чем сегодня...

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

BaRsupillamy, при цикле - телефон не отдает отклик, что он работает (только зарегистрированный процесс отключения подсветки перейдет из основного процесса, т.е. выполнения цикла - в отключение подсветки, затем опять вернется в основной процесс). Я могу тебе дать функцию адрес функции delay, просто передаешь кол-во мс, сколько нужно подождать - и все. но тогда телефон не будет отвечать. Т.е. не реагировать на нажатия клавиш. А тебе нужно парралельно, чтоб было ожидание.

Ну а вообще - я один таймер организовал свой, построен на мсс+асм. Внедрен в Java Voodoo на G600. Ну а так, мысли вслух - я ищу нормальную функцию таймера на тумбе, чтобы сразу же там же передавать кол-во времени для него, а также функцию для выполнения по завершению таймера, ибо на данный момент - функцию для передачи по завершению таймера я нашел лишь, как сделать - на уровне мсс, а мне это никак не годится для реализации других своих идей.

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

а почему на уровне мсс не годится?

как это попробовать?

 

202EADAC  67 00 0000 0000 0000 00000000 0000 0000  Начало вызова пользовательских событий

202EADBC  68 04 3337 0000 0000 7841FD20 0000 0000  Пользовательское событие 14131 (адрес обработки 0x20FD4178)

202EADCC  69 06 3700 3737 0000 FCAE2E20 0000 0000  MCC_USER_TIMER

202EADDC  6B 00 0100 FFFF 0000 00000000 C603 0000  Задержка 65535 с

 

нельзя использовать что нибудь такое?

здесь есть два адреса: в пользовательском событии и в таймере... может можно их использовать?

задержка работает вместе с таймером или по отдельности? и куда телефон преходит после задержки? по одному из указанных адресов? или по по переходу, который стоит после тасков по этим адресам?

 

т.е. нельзя ли вызвать события нужные... допустим, ставим яркость макс, длительность горения 2 секунды, и включаем подсветку - всё как в фонаре... потом таймер и задержка делают задержку 1 секунду ну или меньше и снова ставим пользовательское событие с горением, опять задержка...

 

хотя, наверно, как мсс и мне не подойдёт до конца... но вообще такое реально?

Лучше работать завтра, чем сегодня...

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

Я брал таймер из лук теста - прогрессбара.

Код такой у меня вышел:

.mcc mcc_task 0x14 0xC2 9 ;Включение таймера

.mcc mcc_user_event_start ;Начало пользовательских событий

.mcc mcc_user_timer 0x6 0x37 0x3739 0 mcc_jazelle_check_install_finish ;скрипт с данными именно о нашем таймере

.mcc mcc_user_event_wait

.mcc mcc_return

Если таймер срабатывает, то телефон переходит в mcc_jazelle_check_install_finish. Если же нет - то ничего не происходит (ну а вообще - телефон ждет, когда сработает этот таймер, чтобы перейти в mcc_jazelle_check_install_finish).

При срабатывании таймера - если нужная мне вещь недостигнута (в данном патче - это если же установка еще не завершена, переход опять в код, указанный выше - т.е. вновь включается таймер, затем идет ожидание, когда он остановится и вызовет нужное нам событие.

Когда таймер больше нам не понадобится, нам нужно его остановить (возможно тут недочет, т.е. как бы при завершении его - он считается уже завершенным, т.е. останавливать нужно в случае, если мы прерываем его выполнение, например - таймер работает, а тут раз, красную трубку нажали, след. надо таймер остановить). Остановка таймера у меня - .mcc mcc_task 0x14 0xC2 9 1.

А теперь сам код таска таймера:

tsk_09_TimerOperations:

ldr r5,=0x373739

ldrh r0,[r4,6]

cmp r0,1

beq tsk_09_StopTimer

 

mov r0,0x37

bl Rtk06_3DetermineTaskNumber

mov r1,r0

mov r0,r5

mov r2,1

str r2,[sp]

mov r2,0x37

mov r3,0

bl RtkStartTimer (vp_TimerID, vp_Task, vp_Count, vp_TypeOfTimer, vp_Precision)

 

b tsk_exit

;;;;;;;;;;;;;;;;

tsk_09_StopTimer:

mov r0,r5

bl RtkStopTimer

b tsk_exit

Все данные - все взято из прогрессбара в луктесте. Все данные для твоего телефона - можно взять там. Вроде все по полочкам разъяснил, так что - удачи.

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

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

 

.MCC MCC_USER_EVENT_START ;Начало вызова пользовательских событий

.MCC MCC_USER_TIMER 0x6 0x37 0x3737 0 0 ;MCC_USER_TIMER

.MCC MCC_USER_EVENT_WAIT 0 0 0x1 0 0 0

 

вот эти три мсс делают нормально задержку в одну секунду и потом идём дальше...

проблема в том, что при использовании этой конструкции у меня перестаёт работать удержание цифровых клавиш... сразу зависает телефон... как это исправить нужно?

 

самое интересное, даже не надо ничего запускать... т.е. сразу после прошивки вот этого кода удержание перестаёт работать...

Лучше работать завтра, чем сегодня...

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

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

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

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

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

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

Войти

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

Войти



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