Radboud, Since you do not know which Bank was selected when the interrupt happens, the standard PIC trick is to save W in whatever bank is current, then grab STATUS into W. Then you can save everything else. You need to remember that that location is "used" in all RAM banks so that it is set aside for saving W. So use different variable names in each bank, but make sure that there is one in each bank at that address. I use the lowest address in each page. example: ... ;First bank of RAM ; ORG H'20' ;general purpose RAM starts at 020h ;ISRs cannot know which bank of RAM is selected when interrupt occurs, ;so WSave is allocated in both banks. WSave EQU H'20' ;020h: ISR Save Area for W StatSave EQU H'21' ;021h: Save Area for STATUS PCHSave EQU H'22' ;ISR save area for PCLATH FSRSave EQU H'23' ;ISR save area for FSR ... ;Second bank of RAM ;Generated RAM addresses are the SAME as bank 0, program must set RP0 ;to use these variables. ;ISRs cannot know which bank of RAM is selected when an interrupt occurs, ;so WSave is allocated in both banks. WSave1 EQU H'A0' ;0A0h: Duplicate ISR Save Area for W ... IntSvc MOVWF WSave ;Save W. Don't know which bank used SWAPF STATUS, W ;use SWAP to move unmodified STATUS ;bits (nybbles swapped) into W BCF STATUS, RP0 ;switch to RAM bank 0 BCF STATUS, RP1 ; MOVWF StatSave ;save (nybble swapped) copy of STATUS ;Must save PCLATH of interrupted code so that code in other than page 0 EPROM ;can be interrupted and restore correctly MOVF PCLATH, W ;get PCLATH of interrupted code MOVWF PCHSave ;save it CLRF PCLATH ;set PCLATH to xxx00000b for ISR ;Save FSR of interrupted code MOVF FSR, W ;Get FSR of interrupted code MOVWF FSRSave ;save it ;Find out who interrupted. Scan for highest priority first. ... --------------------------------------------------- Barry King Engineering Manager NRG Systems "Measuring the Wind's Energy" barry@nrgsystems.com "The witty saying has been deleted due to limited EPROM space"