I recently dealt with this problem in my Demon's Blazon project. It's going to take ASM work, eventually.
First, you should try and figure out the pointer system. If you can't figure out the pointers the easy way, you either don't understand them enough, or you ran into a non-standard system. That's where the ASM comes in. You need to set a read breakpoint for a string of text (say, the first bit of dialog) and then step-through the font routine until you have a good general understanding of how it works. You should look for something in the routine that loads the SNES address for that string. Lets say the SNES address was BE1000.
LDA $BE (or $BE00, depending on whether or not A= 16 or 8 bits)
STA $(some number), x
LDA $(second number), y
STA $(third number)
(Note: A will change to the last two bytes of your SNES address after the second LDA, so in this case A would be $1000.
It's getting the $1000 from "(second number)". This is where your pointer table is.)
When you see some section like that, you can determine where the pointer table is located. Unless it's super complicated. This is probably the simplest type, as far as ASM goes. Also, if you were to expand the game later, and want to change the location of the pointer table, simply change first instruction (which would be the bank byte) to whatever else you want, and use Atlas to auto-write the new pointers in the location of your choosing.
Hope that makes sense. I'm quite tired, so it may be slightly incorrect. If it is, someone please point it out. =D
~DS