You can use label in macro and multiple call to that macro.
Just need to define your labels as local.
Here is local used in my example:
Code:
TFTSTR?B macro Bin
MOVE?CB high (Bin), FSR2H ;load highbyte
MOVE?CB low (Bin), FSR2L ;load low byte
local tftstrloop
local tftStrDone
tftstrloop movf POSTINC2, W ; Get a character, then increment pointer
BZ tftStrDone ;All strings must end with 0
;Not Null char
L?CALL tftWoutput; CALL print char in W to TFT
BRA tftstrloop ;Get next chr
tftStrDone: ;Null char
endm ;end of macro
But way your done use less FLASH 
And you can make bfill little smaller
Code:
bfill
Next_Char
movf POSTINC2, W ; Get a character
bz exstr2 ; Null char
MOVWF _g_chr
L?CALL _gcga
bra Next_Char
exstr2 return
To save few bytes in FLASH.
And I'll suggest you to put TFT_ in front all labels and variable names so there is minimal chance for user to duplicate label/variable or unintentional use one of tft variables.
Bookmarks