$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
                            