home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / sonderh1 / makeint.inc < prev    next >
Text File  |  1987-05-18  |  3KB  |  127 lines

  1. (* ---------------------------------- *)
  2. (*             MAKEINT.INC            *)
  3. (* Prozeduren zur Interrupt-Hand-     *)
  4. (*                habung.             *)
  5. (* ---------------------------------- *)
  6.  
  7. TYPE
  8.   IntEntry_ =
  9.     RECORD
  10.       Offset, Segment : INTEGER;
  11.     END;
  12.  
  13. (* Interrupts vom Interrupt-Chip wieder
  14.    zulassen.                          *)
  15. PROCEDURE IntChipRestart;
  16.     BEGIN
  17.       Port[$20] := $20;
  18.     END;
  19.  
  20. (* Werte der aktivier- und passivier-
  21.    baren Hardware-Interrupts:         *)
  22. CONST
  23.    IntChipMaskPort     = $21;
  24.    IntChipTimerMask    = $01;
  25.    IntChipKeyboardMask = $02;
  26.    IntChipCassetteMask = $03;
  27.    IntChipCom2Mask     = $08;
  28.    IntChipCom1Mask     = $10;
  29.    IntChipBscMask      = $18;
  30.    IntChipDiskMask     = $20;
  31.    IntChipFloppyMask   = $40;
  32.    IntChipPrinterMask  = $80;
  33.  
  34. (* Unterbrechung zulassen:            *)
  35. PROCEDURE IntChipEnable (Mask: Byte);
  36.     VAR Section : CriticalSection_;
  37.     BEGIN
  38.       CriticalBegin (Section);
  39.         Port [IntChipMaskPort]:=
  40.           Port [IntChipMaskPort]
  41.             AND NOT Mask;
  42.       CriticalEnd (Section);
  43.     END;
  44.  
  45. (* Unterbrechung unterbinden:         *)
  46. PROCEDURE IntChipDisable (Mask: Byte);
  47.     VAR Section : CriticalSection_;
  48.     BEGIN
  49.       CriticalBegin (Section);
  50.         Port [IntChipMaskPort]:=
  51.           Port [IntChipMaskPort]
  52.             OR Mask;
  53.       CriticalEnd (Section);
  54.     END;
  55.  
  56. (* die Interrupt-Vektoren:            *)
  57. CONST
  58.   IntPrintScreen       = $05;
  59.   IntHardwareTimer     = $08;
  60.   IntHardwareKeyboard  = $09;
  61.   IntCassette          = $0A;
  62.   IntCom2              = $0B;
  63.   IntBscReceive        = $0B;
  64.   IntCom1              = $0C;
  65.   IntBscSend           = $0C;
  66.   IntHardwareDisk      = $0D;
  67.   IntHardwareDiskette  = $0E;
  68.   IntCentronics        = $0F;
  69.   IntKeyBoard          = $16;
  70.   IntPrinter           = $17;
  71.   IntBootstrap         = $19;
  72.   IntTimeOfDay         = $1A;
  73.   IntCtrlBreak         = $1B;
  74.   IntTimer             = $1C;
  75.  
  76. (* Interrupt-Vektor holen:            *)
  77. PROCEDURE
  78.  IntGet (IntNr: Byte;
  79.          VAR Segment, Offset : Integer);
  80.     VAR Regs8088 : Regs8088_;
  81.     BEGIN
  82.       WITH Regs8088 DO
  83.         BEGIN
  84.           Ah:= $35;
  85.           Al:= IntNr;
  86.           MsDos (Regs8088);
  87.           Segment:= Es;
  88.           Offset:= Bx;
  89.         END;
  90.     END;
  91.  
  92. (* Interrupt-Vektor setzen:           *)
  93. PROCEDURE
  94.   IntSet (IntNr: Byte;
  95.           Segment, Offset : INTEGER);
  96.     VAR Regs8088 : Regs8088_;
  97.         SaveDs : INTEGER
  98.                  ABSOLUTE Cseg:$00A0;
  99.     BEGIN
  100.       SaveDs:= Dseg;
  101.       WITH Regs8088 DO
  102.         BEGIN
  103.           Ah:= $25;
  104.           Al:= IntNr;
  105.           Ds:= Segment;
  106.           DX:= Offset;
  107.           MsDos (Regs8088);
  108.         END;
  109.     END;
  110.  
  111. (* Interrupt-Routine resident machen: *)
  112. PROCEDURE MakeResident;
  113.     VAR Regs8088 : Regs8088_;
  114.     BEGIN
  115.       WITH Regs8088 DO
  116.         BEGIN
  117.           Ah:= $31;
  118.           Dx:= Seg (HeapPtr^)
  119.                - Cseg
  120.                + ((Ofs (HeapPtr^)+15)
  121.                    SHR 4);
  122.               MsDos (Regs8088);
  123.             END;
  124.         END;
  125.  
  126. (* ---------------------------------- *)
  127. (*        Ende von MAKEINT.INC        *)