home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / spezial / 13 / tsr / makeint.inc < prev    next >
Encoding:
Text File  |  1988-03-18  |  2.7 KB  |  94 lines

  1. (* ------------------------------------------------------ *)
  2. (*                     MAKEINT.INC                        *)
  3. (*          Prozeduren zur Interrupt-Handhabung.          *)
  4. (*                 Fuer TSR "abgespeckt"                  *)
  5. (* ------------------------------------------------------ *)
  6.  
  7. TYPE
  8.   IntEntry_ = RECORD
  9.                 Offset, Segment : INTEGER;
  10.               END;
  11.  
  12. (* ------------------------------------------------------ *)
  13. (*               die Interrupt-Vektoren:                  *)
  14. CONST
  15.   IntPrintScreen       = $05;  IntHardwareTimer     = $08;
  16.   IntHardwareKeyboard  = $09;  IntCassette          = $0A;
  17.   IntCom2              = $0B;  IntBscReceive        = $0B;
  18.   IntCom1              = $0C;  IntBscSend           = $0C;
  19.   IntHardwareDisk      = $0D;  IntHardwareDiskette  = $0E;
  20.   IntCentronics        = $0F;  IntKeyBoard          = $16;
  21.   IntPrinter           = $17;  IntBootstrap         = $19;
  22.   IntTimeOfDay         = $1A;  IntCtrlBreak         = $1B;
  23.   IntTimer             = $1C;
  24.  
  25. (* ------------------------------------------------------ *)
  26. (*               Interrupt-Vektor holen:                  *)
  27. PROCEDURE IntGet (IntNr: BYTE;
  28.                   VAR Segment, Offset : INTEGER);
  29.  
  30. VAR Regs8088 : Regs8088_;
  31.  
  32. BEGIN
  33.   WITH Regs8088 DO BEGIN
  34.     Ah:= $35;
  35.     Al:= IntNr;
  36.     MsDos (Regs8088);
  37.     Segment:= Es;
  38.     Offset:= Bx;
  39.   END;
  40. END;
  41.  
  42. (* ------------------------------------------------------ *)
  43. (*                Interrupt-Vektor setzen:                *)
  44. PROCEDURE IntSet (IntNr: BYTE;
  45.                   Segment, Offset : INTEGER);
  46.  
  47. VAR Regs8088 : Regs8088_;
  48.     SaveDs  : INTEGER ABSOLUTE Cseg:$00A0;
  49.  
  50. BEGIN
  51.   SaveDs:= Dseg;
  52.   WITH Regs8088 DO BEGIN
  53.     Ah:= $25;
  54.     Al:= IntNr;
  55.     Ds:= Segment;
  56.     DX:= Offset;
  57.     MsDos (Regs8088);
  58.   END;
  59. END;
  60.  
  61. (* ------------------------------------------------------ *)
  62. (*          Interrupt-Routine resident machen:            *)
  63. (*               Modifiziert fuer TSR                     *)
  64. PROCEDURE MakeResident;
  65.  
  66. VAR Regs8088 : Regs8088_;
  67.  
  68. BEGIN
  69.   WITH Regs8088 DO BEGIN
  70.     Ah:= $31;
  71.     DX:= Memw[Cseg-1:0003];
  72.     MsDos (Regs8088);
  73.   END;
  74. END;
  75.  
  76. (* ------------------------------------------------------ *)
  77. (* Speicherbereich freigeben. Aus PASCAL 4/87, Seite 74.  *)
  78. (*                 Fuer TSR modifiziert!                  *)
  79. FUNCTION MFree(Block_Segment: INTEGER): INTEGER;
  80.  
  81. VAR Regs8088 : Regs8088_;
  82.  
  83. BEGIN
  84.   Regs8088.Es := Block_Segment;
  85.   Regs8088.AX := $4900;
  86.   MsDos(Regs8088);
  87.   IF Odd(Regs8088.Flags) THEN
  88.     MFree := Regs8088.Al
  89.   ELSE
  90.     MFree := 0;
  91. END;
  92. (* ------------------------------------------------------ *)
  93. (*                 Ende von MAKEINT.INC                   *)
  94.