It might save you a few bytes of code footprint, and probably much more in your compressed buffers, to not do "full" RLE, but just record spans of spaces vs non-spaces. That's really where your compression ratio is going to come from anyway, unless somebody likes making horizontal lines of dashes and such. It saves a byte from each compressed tag, because the byte that's being repeated is implied to be a space character and no longer needs to be included.
However, reading from your code, do you RLE tag
everything? As in a line of "abcde " would be .byt 'a',1,'b',1,'c',1,'d',1,'e',1,' ',35 ?
Usually, RLE compression will use 1 bit of the length byte to flag if the next bytes are repeated or not. Thus, the above example would be .byte 5,"abcde",35|128,' '. This assumes that if the high bit is clear, then that many raw bytes follow. If it is set, the lower 7 bits say how many times to repeat the following byte. A repeated byte is only used when at least 2 are in succession, so "2 3 +" would end up as a span of 5 bytes, followed by a repeated span of 35 spaces, even if you're only RLE-ing spaces.
Code:
Encoding " 3 2 +": (3 leading spaces, some text, then the rest of the line empty)
;; Always using RLE tags, even for single bytes
.byte " ",3, "3",1, " ",1, "2",1, " ",1, "+",1, " ",32
; = 14 bytes
;; Using a bit flag for compressed vs uncompressed
.byte 3|128," ", 5,"3 2 +", 32|128," "
; = 10 bytes
;; Implied spaces as the compressed character
.byte 3|128, 5,"3 2 +", 32|128
; = 8 bytes