[Back to INTERRUP SWAG index] [Back to Main SWAG index] [Original]

    {
     If you have an interrupt handler and you want to jump to the original
     interrupt handler and NOT return to your handler.

    Call the following procedure with a pointer to the old interrupt handler
    (which you'd better have saved :-).
    }

    PROCEDURE JumpToInterrupt(oldvector : Pointer);
    INLINE(                        { Jump to old Intr from local ISR  }
       $5B/                        { POP  BX IP part of vector     }
       $58/                        { POP  AX CS part of vector     }
       $87/$5E/$0E/                { XCHG BX,[BP+14] switch ofs/bx }
       $87/$46/$10/                { XCHG AX,[BP+16] switch seg/ax }
       $8B/$E5/                    { MOV  SP,BP                    }
       $5D/                        { POP  BP                       }
       $07/                        { POP  ES                       }
       $1F/                        { POP  DS                       }
       $5F/                        { POP  DI                       }
       $5E/                        { POP  SI                       }
       $5A/                        { POP  DX                       }
       $59/                        { POP  CX                       }
       $CB                         { RETF      Jump [ToOldVector]  }
       );                          { to original timer vector      }
    {end JumpToInterrupt}

[Back to INTERRUP SWAG index] [Back to Main SWAG index] [Original]