The routine calling is done with some indirect jump magic. The variable irqLowOffset stores the lower part of the PC to jump to. The application has to adjust the higher parts of the PC (PCLATH and PCLATU) before using it. On startup both registers should be cleared and irqLowOffset should point to a simple retfie instruction. Currently this done in the projectIRQ.asm.
Before enabling any low priority interrupts the application must ensure the correct PC value. Else a deadlock can occur.