En mi proyecto PSGed, estoy con la parte del control del ratón, y he utilizado las rutinas de Ramones de un tutorial publicado en Konamito (si estas por estos foros: Muchas Gracias!!!, me han sido muy útiles  

 )
Mirando el código he extraído las funciones checkmouse y mouseread, junto a otras rutinas y constantes utilizadas por estas. Mi intención es adaptarlas para que se puedan compilar desde SDCC, y llamarlas desde C, pero no se como hacerlo. Se como añadir pequeñas rutinas (Inline Assembler), pero estas son un poco complejas, ya que checkmouse llama a rutinas de mouseread, ambas usan constantes, etc...
Ahora mismo lo que he hecho, es compilarlo en la dirección hBE00, y lo añado en el fichero ROM que consigo al compilar el programa en C (es de 32k). En C, hago las llamadas a las funciones de Ramones. Me funciona perfectamente, pero pierdo mucho tiempo, cada vez que quiero probar, el tener que incluir el fichero. Otra razón, es para poder crear un source (o lib) reutilizable, para el que lo necesite en sus aplicaciones.
y después de exponer el caso, mi pregunta es: 
Como puedo hacerlo directamente con SDCC?
Nota: He mirado en la manual y creo que se habla del tema en el punto 3.14.3, pero no acabo de entender el funcionamiento.
Alguien tiene alguna experiencia en esto?
Gracias!
; -------------------------------
; *** MOUSE SUBROUTINES ***
; * (c) Ramones 2007    *
; -------------------------------
GTPAD		equ		00DBh
GTTRIG		equ		00D8h
initmem		equ		0E000h
mouse		equ		initmem			
mousex		equ		mouse+1
mousey		equ		mousex+1
mousebutton1	equ		mousey+1
mousebutton2	equ		mousebutton1+1
msxmodel		equ		mousebutton2+1
        
; -------------------------------
; CHECKMOUSE
; comprueba si hay un mouse 
; conectado en alguno de los 
; puertos	
; Llamar en varias interrupciones
; -------------------------------        
checkmouse:
				ld		a,1
				ld		[mouse],a			
				
				ld		b,12
				call	mousereaddir
				
				ld		a,[mousex]
				cp		1
				ret		nz
				ld		a,[mousey]
				cp		1
				ret		nz
				
				ld		a,2
				ld		[mouse],a
				
				ld		b,16
				call	mousereaddir
				ld		a,[mousex]
				cp		1
				ret		nz
				ld		a,[mousey]
				cp		1
				ret		nz
				xor		a
				ld		[mouse],a
				ret
	
        
; -----------------
; MOUSEREAD
; Lectura del raton
; -----------------
mouseread:		
		
				xor		a
				ld		[mousex],a
				ld		[mousey],a
				ld		[mousebutton1],a
				ld		[mousebutton2],a
		
				ld		a,[mouse]
				or		a
				ret		z
				
				ld		b,12
				cp		1
				jr		z,mouseread0
				ld		b,16
				
mouseread0:				
				
				call	mousereaddir
				ld		a,[mouse]
				jp		mousereadbutton
				
				
mousereaddir:
				ld		a,b
				push	bc
				call	gtpadown			; Primera (Request)
				pop		bc
				
				
				inc		b
				ld		a,b
				
				push	bc
				call	gtpadown			; X
				ld		[mousex],a
				pop		bc
				inc		b
				ld		a,b
				call	gtpadown			; Y								
				ld		[mousey],a
				ret
mousereadbutton:
				push	af
				call	GTTRIG
				ld		[mousebutton1],a				
				pop		af
				inc		a
				inc		a
				call	GTTRIG
				ld		[mousebutton2],a
				ret
				
		
; ------------------------
; GTPADOWN
; Llama a gtpad bios
; o gtpadown segun sistema
; -------------------------		
		
gtpadown:
				ld		b,a
				ld		a,[msxmodel]
				or		a
				ld		a,b
				jr		z,gtpadmsx1
				jp		GTPAD
				
		
		
; ------------------------
; GTPADMSX1
; Rutina GTPAD con SOLO
; Raton para MSX1
; (que no contiene en BIOS)
; A: 12,13 14 para port 1
; A: 16,17,18 para port 2
; -------------------------
gtpadmsx1:
				
				ld		b,a
				cp		12
				ld		a,0FFh
				ret		c
				ld		a,b
								
				ld		e,#0f      
				ld 		bc,#00bf   
				ld     hl,#10ef   
				cp     #0c        
				jr     z,gtpadmsx1_348C    
				ld     bc,#40ff   
				ld     hl,#20df   
				cp     #10        
				jr     z,gtpadmsx1_348C    
				and    #03        
				sub    #02        
				ld     a,[#fafe]  
				ret    m          
				ld     a,[#fb00]  
				ret    z          
				xor    a          
				ret               
gtpadmsx1_348C: 				
				di                
				call   gtpadmsx1_3502    
				call   gtpadmsx1_351D     
				push   af         
				call   gtpadmsx1_3508      
				call   gtpadmsx1_3514      
                push   af         
				call   gtpadmsx1_3502      
				call   gtpadmsx1_351A     
				push   af         
				call   gtpadmsx1_3508      
				call   gtpadmsx1_351A     
				push   af         
				call   gtpadmsx1_3502      
				call   gtpadmsx1_351A      
				push   af         
				call   gtpadmsx1_3508      
				call   gtpadmsx1_3514      
				push   af         
				call   gtpadmsx1_3502      
				call   gtpadmsx1_352D      
				call	gtpadmsx1_3508      
				call   gtpadmsx1_352D     
				call   gtpadmsx1_3502      
				ei                
				pop    af         
				pop    hl         
				pop    de         
				pop    bc         
				xor    #08        
				sub    #02        
				cp     #0d        
				jr     c,gtpadmsx1_34E0  
				pop    af         
				call   gtpadmsx1_34FA      
				ld     [#fb00],a  
				pop    af         
				call   gtpadmsx1_34FA      
				jr     gtpadmsx1_34F4     
gtpadmsx1_34E0:                
				ld     a,d        
				add    a,a        
				add    a,a        
				add    a,a        
				add    a,a        
				or     h          
				neg               
				ld     [#fb00],a  
				pop    af         
				pop    de         
				add    a,a        
				add    a,a        
				add    a,a        
				add    a,a        
				or     b          
				neg               
gtpadmsx1_34F4: 				
				ld     [#fafe],a  
				ld     a,#ff      
				ret               
gtpadmsx1_34FA: 				
				xor    #08        
				bit    3,a        
				ret    z          
				or     #f0        
				ret           
    
gtpadmsx1_3502: 			
				call   gtpadmsx1_3525     
				and    l          
				jr     gtpadmsx1_350C      
				
gtpadmsx1_3508:					
				call   gtpadmsx1_3525      
				or     h          
gtpadmsx1_350C:                  
				push   af         
				ld     a,e        
				out    [#a0],a    
				pop    af         
				out    [#a1],a    
				ret               
				
gtpadmsx1_3514: 				
				call   gtpadmsx1_352D      
				call   gtpadmsx1_352D      
gtpadmsx1_351A: 				
				call   gtpadmsx1_352D     
gtpadmsx1_351D: 				 
				ld     a,#0e      
				call   gtpadmsx1_3526      
				and    #0f        
				ret               
gtpadmsx1_3525:                 
				ld     a,e        
gtpadmsx1_3526:                
				out    [#a0],a    
				in     a,[#a2]    
				and    c          
				or     b          
				ret               
gtpadmsx1_352D:                  
				ex     [sp],hl    
				ex     [sp],hl    
				ex     [sp],hl    
				ex     [sp],hl    
				ret