RA looks like it's the most of a full byte,
you could read in the RA byte, use a bitmask to prevent the two x bits from being overwritten and write out your data byte, which will give you all but bits 4 and 0, which you should be able to further mask out from your data byte to the leftover bits on RB. You'd still have 3 extra bits on RB so you could use one of those as a strobe 'data ready' bit if you need it to be synchronous.
That's a bit of codeing though, you could also just bit bang a synchronous serial shift register. Many people do that to increase the number of I/O pins on non speed sensative designs.
That is exactly my method of creating a virtual port for 4-bit LCD interfacing. Write to Virtual port and call VP_Update to automatically map individual bits of a byte or bytes to corresponding i/o channels. Either full port masking with mathmatical operators or simple BTFSS, it still elegant in my book. Its elegant because its Virtual