home *** CD-ROM | disk | FTP | other *** search
-
-
- type
- longlink = record
- ofs: integer;
- seg: integer;
- end;
-
- procedure DISABLE_INT;
- inline($FA);
- (* disable further processor interrupts *)
-
- procedure ENABLE_INT;
- inline($FB);
- (* enable processor interrupts *)
-
- procedure ENTER_INTERRUPT;
- (* prologue for interrupt handlers *)
- inline($90);
-
- procedure LINK_CALL(vec: longlink);
- (* call the old handler through the *)
- (* specified link variable *)
- inline($2E/$FF/$1E{/>vec}); (* call far cs:oldvec *)
-
- procedure LINK_JMP(vec: longlink);
- (* epilogue for interrupt handlers *)
- (* jumping to the old handler through *)
- (* the specified link variable *)
- inline($1F/ (* pop ds *)
- $07/ (* pop es *)
- $5E/ (* pop si *)
- $5F/ (* pop di *)
- $5A/ (* pop dx *)
- $59/ (* pop cx *)
- $5B/ (* pop bx *)
- $58/ (* pop ax *)
- $89/$EC/ (* mov sp,bp *)
- $5D/ (* pop bp *)
- $2E/$FF/$2E{/>vec}); (* jmp far cs:oldvec *)
-
- procedure EXIT_INTERRUPT;
- (* epilogue for interrupt handlers *)
- (* does not call old handler at all *)
- inline($90);
-
- procedure get_handler(vector: integer; {vector number}
- var link: longlink); {cseg link to old handler}
-
- (* get a pointer to the current handler for an interrupt vector *)
-
- procedure attach_handler(vector: integer; {vector number}
- handler: integer; {cseg ofs of new handler}
- var link: longlink); {cseg link to old handler}
-
- (* attach an interrupt handler to the specified vector number;
- handler is the cseg offset of the new handler; link will
- contain a long pointer to the previous handler *)
-
- procedure remove_handler(vector: integer; {vector number}
- var link: longlink); {cseg link to old handler}
-
- (* remove an interrupt handler and replace the old handler *)
-
-