what about this
Code:
 
 
 pause 2000
 
 Serout2 PORTb.7,84,["ready",13,10] 
 addr var word
 inbuff  var byte[30]
 buff var byte[30]       $4f0
 lb var byte
 hb var byte
 lc var byte
 lp var word
 Clear

 



 goto StartLoop ' Required

 String1:
 @ data "may \"Hello\"\0"

 String2:
 @ db "say",34,"hello",34,0
 
 

 '------------Flash2Ram Macro - Location insensitive -------------------------
 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  
   
 ASM   
GetAddress macro Label, Wout
    CHK?RP Wout
    movlw low Label          ; get low byte
    movwf Wout
    movlw High Label         ; get high byte
    movwf Wout + 1
    endm
  
   
   
   
   
   
 ENDASM

       


 
 
 
 
 

StartLoop: ' This loop repeats continuously just as a test.
@ Flash2Ram  _buff,_String1' Get a String from flash memory
 Serout2 PORTb.7,84, [13,10,"buff ",str buff ,13,10] '  and print it
@ Flash2Ram  _inbuff,_String2' Get a String from flash memory
 Serout2 PORTb.7,84, ["inbuff ",str inbuff ,13,10] '
 pause 500
;@ GetAddress _String3 ,_addr  
' 
addr =$5170 
 
for lc=0 to 3
Serout2 PORTb.7,84, [13,10,"address ",hex4  addr ]  
readcode addr ,lb

addr=addr+1
;Serout2 PORTb.7,84, [13,10,"address ",hex4  addr ]
readcode addr ,hb 
Serout2 PORTb.7,84, [" hb ",hex2 hb ]

Serout2 PORTb.7,84, [" lb ",hex2 lb ]
addr=addr+1
next
 

  

  
;@ GetAddress _String3 ,_addr 
addr =$5170 
for lc=0 to 3  
Serout2 PORTb.7,84, [13,10,"address ",hex4  addr ]   
readcode addr ,lp
addr=addr+2 
Serout2 PORTb.7,84, [" lp ",hex4 lp]
next
  

addr =$5177   
readcode addr ,lb 
Serout2 PORTb.7,84, [13,10,"odd address ",hex4  addr ] 
Serout2 PORTb.7,84, [" b ",hex2 lb ] 
addr =$5176   
readcode addr ,lb 
Serout2 PORTb.7,84, [13,10,"even address ",hex4  addr ] 
Serout2 PORTb.7,84, [" b ",hex2 lb ] 

 
 goto StartLoop ' Repeat
end 
 
 

 




 
bfill: 
ASM
Next_Char
   tblrd   *+
   movf   TABLAT,w
   movwf  POSTINC2
   btfss STATUS,Z 
   goto   Next_Char
   return   
ENDASM  



String3:
asm
 org 0x5170
  dw      0x003F,0xFC00,0x3FFC,0x5566,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000,0x0000;,0x00  
ENDASM

output
buff may "Hello"
inbuff say"hello"

address 5170 hb 00 lb 3F
address 5172 hb FC lb 00
address 5174 hb 3F lb FC
address 5176 hb 55 lb 66
address 5170 lp 003F
address 5172 lp FC00
address 5174 lp 3FFC
address 5176 lp 5566
odd address 5177 b 55
even address 5176 b 66