Hiya, Steve My little page bit macro seems to work, so far. I did add lines to suppress the warnings generated by the macro: the remaining warnings simply tell me if I have missed any places where the macro is needed. Note that it doesn't use any forward references: it simply flips (inverts) the page bit from the current page. It will work just fine until I start using the new 8K parts ... . I also wrote a quick "goto" macro - it does the same thing except that it doesn't need to change the page bit back after going to the new address. How I use the macros is simple: if I know that a particular subroutine or jump is on the other page, I simply use xgoto or xcall (Andy Warren's idea for the macro names). If I miss any places that need the macros, the assembler gives warning messages telling me where. I guess my next trick will be to add error checking to make sure that the page bits are really correct. I'll simply output an error message if there is a problem. That should cover situations where I might accidently use an xcall instead of a call. xcall MACRO routine ;flip ROM page bit if ($ & 0x800) bcf PCLATH,3 else bsf PCLATH,3 endif errorlevel -306 call routine errorlevel +306 if ($ & 0x800) bsf PCLATH,3 else bcf PCLATH,3 endif endm xgoto MACRO routine ;flip ROM page bit if ($ & 0x800) bcf PCLATH,3 else bsf PCLATH,3 endif errorlevel -306 goto routine errorlevel +306 endm Dwayne Reid Trinity Electronics Systems Ltd Edmonton, Alberta, CANADA (403) 489-3199 voice (403) 487-6397 fax