Now I have not read all of the posts in this thread but you seem to have missed and important point about how the register banks work in "legacy" PIC16F parts.Ah, so I need to banksel whatever bank INDF is pointing to. Ho Hum...
I'm using (still trying to use them!) an ancient baseline pic I got years ago which is just right for the job (lots of I/O, not much brains), so I'm kind of married to it.
But for future use I will get the newer ones... Might even try and learn c.
There are two sets of bank select bits in the status register. The set you are most familiar with select the register for the direct address mode. The second set of bits are used for the indirect address mode. There is an assembler directive "BANKISEL" that is handy for setting the register bank for the INDF register.
A warning is needed here. The bank select bits for indirect address mode are present only in PIC16F parts with more than two banks of registers.
This is because the FSR is an 8-bit register so it can hold an address for any register in the range from 0x00 to 0xFF.