RST?RP is a Macro that comes with PBP. It's not a standard ASM directive.

It's pretty much the same thing as this
Code:
    bcf    STATUS, RP1
    bcf    STATUS, RP0
PREV_BANK = 0
Except it optimizes out anything that is not needed. So if BANK1 is currently selected (RP1 = 0, RP0 = 1) then all it will compile to is
Code:
    bcf    STATUS, RP0
PREV_BANK = 0
Saving 1 word of code space and 1 instruction cycle.

If the current bank was already BANK0, then no code is generated, saving 2 words and 2 instruction cycles. When you are changing banks several hundred times in a program, the savings can be considerable.

For more info on the "?" character, check out one of my other posts here.
http://www.picbasic.co.uk/forum/show...d=539#post2009

The underscore prefixing the variable name is require for any variables that are defined in PBP. PBP adds the underscore to make sure that variable names don't conflict with other symbol names used by either PBP or the ASM compiler (PM or MPASM)

Placing the variable in BANK0 let's the ASM routine access it without having to figure out what bank it's in first. It would add more cycles to the routine, depending on which bank it was located in. That would change the number of cycles it takes to re-load the timer. Instead of 7, it could be 9 or 11 throwing off the timing.

For the RS232 part, you shouldn't have any problems. RS232 is very slow. You should be able to run at a much higher baud rate without missing anything. Just be sure to use the Hardware USART with interrupts. SERIN2 timing is software based, and as such will mean that other "ON INTERRUPTS" will not occur untill the SERIN/OUT has completed, many milliseconds later.

Best regards,
    Darrel