Hi, One big problem I have is with long calls, when I need to call a routine in other page, e.g. the routine in page 1 calls a routine in page 2. Or vice-versa. You can say that LCALL can solve this but LCALL YY is translated in: movlw XX movwf PCLATH call YY Well If I want to pass parameters to the routine via W register, I can't. I did a macro to fix this thing, could anyone tell me if is anything wrong? the macro is: SCALL macro routine . if high(routine)>=8 & high($)<8 . bsf PCLATH,3 ;call page 2 from pa ge 1 . else . if high(routine)<8 & high($)>=8 . bcf PCLATH,3 ;call page 1 from page 2 . else . nop ; call in the s ame page . endif . endif . call routine . endm This macro will be translated in: BSF PCLATH,3 CALL YY or BCF PCLATH,3 CALL YYY or NOP CALL YY The same idea can be used to make a GOTO macro so I can't worry about page swap. Any comment are welcome. Cheers, Octavio ====================================================== Octavio Nogueira - e-mail: nogueira@mandic.com.br http://www.geocities.com/~oct_nogueira "ProPic" Production PIC Programmer Windows under US$20 ======================================================