Урок 1. Создаём вибру : Патчестроение : Форум |
Страница 1 из 2: [1] 2 » |
ZEN: |
08.08.09, 16:52 |
Код: ; это первый урок будут и другие PUSH {R0-R5,LR} ;здесь устанавливаються параметры вибры: мощьность,время одного вибрика, время между вибриками MOV R0, 0x30 MOV R1, 0x20 MOV R2, 0x10 ;здесь вызываеться функция виры LDR R5, SWI_0x1BB_Vibra BLX R5 MOV R0, 0x7F ;время длительности всего этого процесса LDR R1, off_ ; переход на выключение вибры LDR R5, SWI_0x129_Timer_Set BLX R5 POP {R0-R5,PC} off: ;здесь сопсна говоря она и вырубаеться PUSH {R0-R3,LR} MOV R0, 0 LDR R3, SWI_0x248_Vibra_Off BLX R3 POP {R0-R3,PC} ; --------------------------------------------------------------------------- SWI_0x1BB_Vibra DCD 0x45452EA4+1 off_ DCD off+1 SWI_0x129_Timer_Set DCD 0x45294D90+1 SWI_0x248_Vibra_Off DCD 0x45452F7C+1 ;дреса преведены для W810 R4DB005 [ Редактировано ZEN в 9.8.09 11:51 ] |
den_po: |
08.08.09, 17:25 |
устаревшие функции. вибру давно можно использовать без таймера. http://supertrubka.org/wiki/doku.php?id=elflib:functions:audiocontrol_vibrate |
Va_st: |
08.08.09, 18:35 |
тогда так: Код: PUSH {LR} BL sub_AudioControl_Init CMP R0, 0 BNE loc_ BL sub_GetAudioControlPtr LDR R0, [R0] loc_: MOV R3, 0x30 ;totaltime MOV R2, 0x10 ;pausetime MOV R1, 0x20 ;vibratime BL sub_AudioControl_Vibrate POP {PC} sub_AudioControl_Init: LDR R3, off_AudioControl_Init BX R3 off_AudioControl_Init DCD AudioControl_Init+1 sub_GetAudioControlPtr: LDR R3, dword_GetAudioControlPtr BX R3 dword_GetAudioControlPtr DCD 0x201806C4 ;for k790 r8bf003 sub_AudioControl_Vibrate: PUSH {R3} LDR R3, off_AudioControl_Vibrate MOV R12, R3 POP {R3} BX R12 NOP off_AudioControl_Vibrate DCD AudioControl_Vibrate+1 Добавлено 8.8.09 20:39 или так: Код: PUSH {R0-R7,LR} MOV R0, 0 SUB SP, SP, 4 STR R0, [SP] SUB SP, SP, 0x88 MOV R0, SP LDR R1, off_ BLX R1 MOVL R1, 0x3E8 MOV R2, 0x32 ADD R3, R1, 0 LDR R6, [R0] MOVL R4, 0x168 LDR R6, [R6,R4] BLX R6 ADD SP, SP, 0x8C POP {R0-R7,PC} ALIGN 4 off_ DCD 0x4529D5D8+1;for k790 r8bf003 |
jamesbond22: |
08.08.09, 22:13 |
example for phones A2: Код: PUSH {R0-R7,LR} SUB SP, SP, 4 MOV R0, SP LDR R1, off_ BLX R1 LDR R0, [SP] MOVL R1, 0x3e8 MOV R2, 0x32 ADD R3, R1, 0 LDR R6, [R0] MOV R4, 0xFF ADD R4, 0x89 LDR R6, [R6,R4] BLX R6 ADD SP, SP, 4 POP {R0-R7,PC} align 4 off_ DCD 0x10DC0070+1 ;for W595 r3ea037 LT |
Va_st: |
08.08.09, 23:16 |
jamesbond22, и в чем различие от последнего?? причем а2?? Код: push {r0-r7,lr} sub sp, sp, 4 mov r0, sp ldr r1,.addr blx r1 ldr r0,[sp] movl r1, 0x3e8 mov r2, 0x32 add r3,r1,0 ldr r6,[r0] movl r4, 0x194 ldr r6,[r6,r4] blx r6 add sp,sp,4 pop {r0-r7,pc} ;for w910 sw-r1fa035 |
CyberMaster: |
09.08.09, 02:18 |
Va_st писал: Код: sub_AudioControl_Vibrate: PUSH {R3} LDR R3, off_AudioControl_Vibrate MOV R12, R3 POP {R3} BX R12 это не правильно. поправь Код: sub_AudioControl_Vibrate: ldr r4, off_AudioControl_Vibrate bx r4 [ Редактировано CyberMaster в 9.8.09 02:41 ] |
den_po: |
09.08.09, 03:48 |
CyberMaster, как это неправильно? |
CyberMaster: |
09.08.09, 04:51 |
den_po, ну а смысл такое извращение делать если можно обойтись всего двумя строчками |
den_po: |
09.08.09, 07:08 |
CyberMaster, точно так же можно спросить "а смысл выносить в отдельную функцию?", это ж целая команда лишняя, да не просто команда, а 4байтная. всё зависит от того, насколько интенсивно в твоей функции используются регистры. вот не будет тебе их хватать, тогда посмотрим, как ты двумя строчками обойдёшься. в любом случае, его вариант не неправильный. Добавлено 9.8.09 07:10 вопрос ко всем: вы отступы в исходниках принципиально не используете? Добавлено 9.8.09 07:22 по поводу обёрток для вызова дальних функций маленькая подсказка да и вообще посыл посмотреть в сторону макросов. макросы могут упростить написание повторяющихся кусков кода. Код: macro longf na { far_#na : push \{r3\} ldr r3,.1 mov r12,r3 pop \{r3\} bx r12 align 4 .1: dw na } макрос создаёт такую обёртку и даёт ей имя, прибавляя в начало имени аргумента "far_". к примеру есть у нас константа debug_printf с некоторым адресом. ставим где-то в коде вызов макроса longf debug_printf после этого можно вызывать обёртку командой bl far_debug_printf. и живой пример использования этого макроса исходник патча: |
Va_st: |
09.08.09, 09:18 |
CyberMaster, пойдет??? Spoiler: |
Страница 1 из 2: [1] 2 » |
URL этой темы: https://mobilefree.justdanpo.ru/newbb_plus/viewtopic.php?topic_id=4204 © 2005-2018 supertrubka.org |