Your init_comms routine look a bit dodgy, RC5 and RC7 both set to input? One of them has to be an output, the TX is the output.
The 10uF I use a 0.1uF, it is just a de-coupling cap.
It hurts nothing to make a couple more solder joints and Hyperterminal might still be trying to use them. I have a cable without those connections and it refused to work until I did those loopbacks. It's irrelevant whether he declared the pins as inputs or outputs, the USART automatically changes them to what's appropriate.
Bit SPEN (RCSTA<7>) and bits TRISC<7:6> have to be
set in order to configure pins RC6/TX/CK and RC7/RX/DT
as the Universal Synchronous Asynchronous Receiver
Transmitter.
I coulda sworn it was like this on all the chips I had been using, but to be honest I've been out of things for a few years. You say you couldn't get it to work on the 886 without setting the TRIS? Hmm. I don't have my own code available right now, but I downloaded Tiny Bootloader, which I do use, and for the F88 and F886 it doesn't bother with setting TRIS.
I can't remember how long ago it was that I discovered that the 2 pins had to be input but it obviously wasn't the 886. It may have been the F88 as I used to use that as my default chip. The fact that Tiny Bootloader doesn't set TRIS is irrelevant as they default to input.
I suppose it depends on the configuration at the cable end, but when I develop on the 232 I just dont use flow control unless I really have to.
I have always set the TRIS pins in HITECH and C18, you may be right, it might not be needed, I always set them though, that way I know that isn't the issue.
I use the loopback when connecting to a modem as it does the handshaking.