> > Since this is long, let me summarize my recommendations: 1) Be SURE > > interrupts are off when taking a computed branch, whether a jump or a call. > > The interrupt service routine can change the value of PCLATH and mess up the > > call; > > I disagree. If the interrupt service routine uses PCLATH, then it must preserve > its contents elsewhere, and restore it before doing a return-from-interrupt. If > this rule is followed, there is no restriction that I can see with having > interrupts enabled while taking a computed branch. > > If I am wrong, please help me see the flaw in my thinking. The normal approach when programming ISR's is to have the ISR preserve any of the following that it modifies: W STATUS PCLATH FSR In some cases, however, it may be preferable not to save/restore all of those things (even if the ISR uses them). If there are few places in the main code that use, e.g., FSR it may in some cases be easier to "protect" those places by disabling interrupts than to save/restore the registers within the ISR itself. Not a terribly common practice, but on some rare occasions it may be helpful (BE SURE TO MAKE IT VERY CLEAR IN THE DOCUMENTATION IF YOU DO THAT, THOUGH!)