I have just gotten my eyes up for macros, but there are a couple of questions I'd like to ask you: > ; Do a long call across address boundries > _call macro Routine_Label What does the Rutine_Label do? I used macros without them, but I heard that a macro could be more powerfull if used this way shown here. Why is that? > _CallCounter += 1 What does the above line do? > movlw high Routine_Label ;set upper address byte I think I know what this line does, but I'm not sure, so please correct me if I'm wrong: It moves the high byte (pclath) of the adress where Routine_Label is actually located to w. > movwf PCLATH > call Routine_Label > movlw high Call_Return_Point#v(_CallCounter) ;reset PCLATH > movwf PCLATH Hmmm... I thought that these instructions (talking 'bout the two latter lines above) had to be done in the subroutine (called Routine_Label in this example). Is this because it is in a macro, or what? I guess that the (incredible long, however,) label below is put in just to have a reference when reseting pclath. Is this right? > Call_Return_Point#v(_CallCounter): > endm BTW, I'm sorry for all the questions guys, but I cannot take it when there is something I don't understand. I HAVE to find out how it works, no matter the subject :-) Not _knowing_ is ok with me in many cases, but not _undestanding_ is more than I can bear. Stig ======================================================= Stig Brautaset - mailto:sbrautas@c2i.net - ICQ:11052183 Student of electronics - http://home.c2i.net/sbrautas =======================================================