home *** CD-ROM | disk | FTP | other *** search
/ Turbo Toolbox / Turbo_Toolbox.iso / 1987 / 08 / tsr / makeint.inc < prev    next >
Encoding:
Text File  |  1987-06-03  |  2.4 KB  |  98 lines

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