$ARM9E $genonly $INCLUDE (C:\Dev\macro_SWI.inc) $INCLUDE (C:\Keil\ARM\library.inc) ; Run player at headset connection v4 ; Запус плеера при подключении гарнитуры v4 ; ©-=(Kad)=-, Kibab ; Отдельное спасибо ~Jhellico Patch equ 0x006DB00 // размещение основного патча Entry equ 0x0335FF6 // место врезки UnkProc equ 0x027BE18 // херня какая-то, надо вызвать наверное... :) Headset equ 19d ;Stereo hedset ShowIn equ 1 ;1.1 1.2 PlayerOn equ 2 Akku equ 3 SoundVibra equ 4 Freq equ 5 Durat equ 10 PlayIfoff equ 15 EnableSound equ 16 ;=========================================================================== org Patch CODE16 EntryPoint: PUSH {LR} // сохраним адрес возврата ;) ; Выполним команды, затертые врезкой MOV R0, R4 CallLib SetProfile CallReg 7, aUnkProc ;=========================================================================== LoadReg 0, config + 4 CallLib GetBuffer beq Patch_Exit mov r7, r0 ; В r7 теперь буффер патча ;=========================================================================== CallLib IsUnlocked ; add r0, #1 ; Проверка на состояние клавы ldrb r1, [r7, #ShowIn] ; lsr r1, r0 ; bcc Patch_Exit ; ; Код запуска и прочее дерьмо CallLib GetAccessoryType // Проверяем акксессуар cmp r0, #Headset // гарнитура ли это? BNE Patch_Exit // нихера не гарнитура... ;=========================================================================== ; Гарнитура =) // запуск плеера на последней песне // проверка звоним мы или нет CallLib IsCalling ; Получили в r0 состояние CMP R0, #1 ; Здесь мы звоним, ну тода надо BEQ Patch_Exit ; уходить // проверка запущен ли плеер CallLib IsPlayerOn ldrb r1, [r7, #PlayerOn] cmp r0, r1 beq Patch_Exit //проверим аккум CallLib GetAkkuCapacity ldrb r1, [r7, #Akku] cmp r0, r1 ; Не запускать если заряд аккумулятора меньше BHI Exec ; чем #Akku b Patch_Exit Exec: ldrb r5, [r7, #EnableSound] ; Проверяем разрешено ли нам воспроизводить звук cmp r5, #1 ; bne onlyEXEC ; нет, не разрешено ldrb r0, [r7, #SoundVibra] ; Настройки звука ldrb r1, [r7, #Freq] ; ну и выбры заодно.. ldrb r2, [r7, #Durat] ; ldrb r3, [r7, #PlayIfoff] ; CallLib PlaySoundVibra onlyEXEC: CallLib MEDIA_PLAYLAST // Включаем плеер. ; Организуем выход Patch_Exit: POP {r7} // В R7 теперь адрес возврата ADD R7, #4 // +4, иначе попадем в середину адреса вызова BX R7 // Уходим! ; Адресочки... aUnkProc: dd UnkProc + q0 //////////////////////////////// Align16 config: dd Magic, 0x0000ad04, 0,0 ;{p=`Run player at headset connection` id=AD04 cp=`-=(Kad)=-, Kibab` ver=4}\ ;{info=`(r) ~Jhellico, \nThE TrIFoN`}","\ ;{sm `Run player at`}\ ;{1.0 cb `Lock` v=1}\ ;{1.1 cb `Unlock`}\ ;{2 cb `Only if player alredy on/off`}\ ;{endsm}","\ ;{sm `Sound settings`}\ ;{16 cb `Enable Sound`}\ ;{4 h `Sound (if >0x80 plays with virba)` v=90}\ ;{5 b `Frequency` v=25}\ ;{10 ms `Duration` v=249}\ ;{15 cb `Play if vibra off` v=1}\ ;{endsm}\ ;\ ;{3 b `Dont run player if akku is lower than: \n(0=always run)` r=0..100 v=25}\ ;",00 ; Врезка патча org Entry CallReg 7, aPatch ; Адрес самого тела Align4 aPatch: dd Patch + q1 Align16 END