Regarding moving text to free space, it depends. For instance, in Tag Tamers I had an address "17ECA0" for a line of text. The pointer to it was 00 00 CA 7E. The first part of the address, 1, wasn't part of the pointer table but was "implied" when the code ran, for lack of a better term. I have another pointer table in D1-Tamers where the code applies an offset in code - for instance, the address 179BB6 is pointed to as 06 00 BB 39, and the code applies an offset of 0x40 to that last byte. My favorite was when I had a double pointer table - the pointer table pointed to a second pointer table.