Hi Richard,
maybe I'm doing some confusion and about to say something of funny, but I have a doubt:
How do you ensure in this code that you are in the correct bank reading the address of "buffer" ?

Code:
ASM
Flash2Ram macro buffer, msg ; Fills the buffer from flash msg
   movlw   UPPER msg
   movwf   TBLPTRU
   movlw   HIGH msg
   movwf   TBLPTRH
   movlw   LOW msg
   movwf   TBLPTRL
   movlw   low buffer		
   movwf   FSR2L
   movlw   High buffer
   movwf   FSR2H
   L?CALL  _bfill
   endm
ENDASM