I shouldn't have been so brief in my first response, so here is a little more explaination. But, you would be well served to learn more about interrupts if this explaination is still confusing.

@ MOVE?BA PORTB

This is a PBP internal macro which reads PORTB and moves the value to W register. It results in the asm instruction: MOVF PORTB, W This is the simplist way to read PORTB to end the mismatch which triggers the interrupt on change. No variables and only one line of code are required.

RBIF var INTCON.0

This statement assigns the Interrupt Flag (at INTCON.0) used for the PORTB's interrupt on change to the name "RBIF" (which is what it is refered to in the PIC datasheets).

RBIF = 0 'Clear the interrupt flag

This statement clears the interrupt flag, which is also required before exiting the interrupt service routine (ISR), or the program will continue returning back to the ISR. No matter what type of interrupt you use, the Interrupt Flag for that particular interrupt must always be cleared before exiting the ISR, or you will end up in an endless loop.

Steve