home *** CD-ROM | disk | FTP | other *** search
/ Programmer 7500 / MAX_PROGRAMMERS.iso / PASCAL / TOOL_INC.ZIP / ATTACH.INT < prev    next >
Encoding:
Text File  |  1988-01-29  |  2.2 KB  |  65 lines

  1.  
  2.  
  3. type
  4.    longlink = record
  5.       ofs:  integer;
  6.       seg:  integer;
  7.    end;
  8.  
  9. procedure DISABLE_INT;
  10.    inline($FA);
  11.    (* disable further processor interrupts *)
  12.  
  13. procedure ENABLE_INT;
  14.    inline($FB);
  15.    (* enable processor interrupts *)
  16.  
  17. procedure ENTER_INTERRUPT;
  18.    (* prologue for interrupt handlers *)
  19.    inline($90);
  20.  
  21. procedure LINK_CALL(vec: longlink);
  22.    (* call the old handler through the *)      
  23.    (* specified link variable *)               
  24.    inline($2E/$FF/$1E{/>vec});       (* call far cs:oldvec *)
  25.  
  26. procedure LINK_JMP(vec: longlink);
  27.    (* epilogue for interrupt handlers *)       
  28.    (* jumping to the old handler through *)    
  29.    (* the specified link variable *)           
  30.    inline($1F/          (* pop ds *)           
  31.           $07/          (* pop es *)           
  32.           $5E/          (* pop si *)           
  33.           $5F/          (* pop di *)           
  34.           $5A/          (* pop dx *)           
  35.           $59/          (* pop cx *)           
  36.           $5B/          (* pop bx *)           
  37.           $58/          (* pop ax *)           
  38.           $89/$EC/      (* mov sp,bp *)        
  39.           $5D/          (* pop bp *)           
  40.           $2E/$FF/$2E{/>vec});     (* jmp far cs:oldvec *)
  41.  
  42. procedure EXIT_INTERRUPT;
  43.    (* epilogue for interrupt handlers *)       
  44.    (* does not call old handler at all *)      
  45.    inline($90);
  46.  
  47. procedure get_handler(vector:      integer;     {vector number}
  48.                       var link:    longlink);   {cseg link to old handler}
  49.  
  50.    (* get a pointer to the current handler for an interrupt vector *)
  51.  
  52. procedure attach_handler(vector:      integer;     {vector number}
  53.                          handler:     integer;     {cseg ofs of new handler}
  54.                          var link:    longlink);   {cseg link to old handler}
  55.  
  56.    (* attach an interrupt handler to the specified vector number;
  57.       handler is the cseg offset of the new handler; link will
  58.       contain a long pointer to the previous handler *)
  59.  
  60. procedure remove_handler(vector:      integer;     {vector number}
  61.                          var link:    longlink);   {cseg link to old handler}
  62.  
  63.    (* remove an interrupt handler and replace the old handler *)
  64.  
  65.