I take back what I said about the read_eeprom(). It's using incorrect
register addresses for the 16F785. I installed your version of the
compiler and looked at the .LST file. Also, the write ...
I don't see anything wrong with the read_eeprom() ASM code.
Your union is a little strange. You have a union between a 16-bit
bit value (2 bytes) and an array which is 4 bytes.