I have a PBP program running in an 18F8722.

I'm using a serial interrupt routine based on the example below given by MELABS:
;---------------------------------------------------------------------
IntHandler

; Save the state of critical registers
movwf wsave ; Save W
swapf STATUS, W ; Swap STATUS to W (swap avoids changing STATUS)
clrf STATUS ; Clear STATUS
movwf ssave ; Save swapped STATUS

movf Low FSR0, W ; Move FSR0 lowbyte to W
movwf fsave ; Save FSR0 lowbyte
movf High FSR0, W ; Move FSR0 highbyte to W
movwf fsave+1 ; Save FSR0 highbyte

;-------------------------------------------

(BASIC interrupt handler goes here)
;-----------------------------------------------
movf fsave, W ; retrieve FSR0 lowbyte value
movwf Low FSR0 ; Restore it to FSR0 lowbyte
movf fsave+1, W ; retrieve FSR0 highbyte value
movwf High FSR0 ; Restore it to FSR0 highbyte
swapf ssave, W ; Retrieve the swapped STATUS value (swap to avoid changing STATUS)
movwf STATUS ; Restore it to STATUS
swapf wsave, F ; Swap the stored W value
swapf wsave, W ; Restore it to W (swap to avoid changing STATUS)
retfie ; Return from the interrupt
EndAsm


00000000000000000000000000000000000000000000000000 00000000000000000000000000000

My problem is, my MAIN program (placed after the ASM routines) works fine as long as the program is small. As soon as it gets past a certain size (I'm assuming that forces it to do bank switching, my program appears to run, but toggles bits (output pins) all over the place.
Am I not saving all the pertinent registers?

Can anyone tell me what else I might be doing wrong?

Charles Linquist