> BUT. I wrote my code to go into a windowed C554. > All will fit properly, but I have a problem. This part has only one > bank of user RAM. Upon interrupting, I might be in the upper page, and > then my W save action will go zinging off into cyberspace. Even if it > makes it to the lower page, upon restoring STATUS, it will definitely > read zeros when it looks in upper page. The memory architecture on some of those things is--as you have observed--a real pain. It need not be a showstopper, however, as there are some work- arounds. Two that I have seen that may be applicable are: [1] Use the top bit of PCLATH. This will require 3 extra cycles on interrupt entry, and 3 on exit. [2] Use something like this [nb: this uses up an extra stack level] Intr: btfss RP0 goto NotSet bcf RP0 call IntMain bsf RP0 retfie NotSet: call IntMain bsf RP0 retfie IntMain: movwf WSave swapf STATUS,w movwf SSave ... swapf WSave,f swapf SSave,w movwf STATUS swapf WSave,w return ; ** NOT RETFIE! This is a bit clunky, but it should be workable.