Ah Ha ! I've caught you out ! Regarding the below, stack is taken from actual location at a CALL or LCALL. stack is wider than PCL, includes non R/W PCH bits. When you set program page select bits, these do not take effect until the actual jump or call at which time a special internal operation transfers them to the the otherwise non R/W PCH register. Easy english: LCALL does not spoil return address on stack. Andrew Warren wrote: > By the way, don't bother using the "LCALL" pseudo-op... Since it > doesn't restore the code-page bits after the CALL, it's sorta > useless. , Leave it to the PIC to save and restore stack correctly !