home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------------------------ *)
- (* MAKEINT.INC *)
- (* Prozeduren zur Interrupt-Handhabung. *)
- TYPE IntEntry_ = RECORD Offset, Segment : INTEGER; END;
- CONST IntKeyBoard = $16;
- (* Interrupt-Vektor holen: *)
- PROCEDURE IntGet (IntNr: Byte; VAR Segment, Offset : Integer);
- VAR Regs8088 : Regs8088_;
- BEGIN
- WITH Regs8088 DO BEGIN
- Ah:= $35; Al:= IntNr; MsDos (Regs8088); Segment:= Es; Offset:= Bx;
- END;
- END;
- (* Interrupt-Vektor setzen: *)
- PROCEDURE IntSet (IntNr: Byte; Segment, Offset : INTEGER);
- VAR Regs8088 : Regs8088_; SaveDs : INTEGER ABSOLUTE Cseg:$00A0;
- BEGIN
- SaveDs:= Dseg;
- WITH Regs8088 DO BEGIN
- Ah:= $25; Al:= IntNr; Ds:= Segment; DX:= Offset; MsDos (Regs8088);
- END;
- END;
- (* Interrupt-Routine resident machen: *)
- PROCEDURE MakeResident;
- VAR Regs8088 : Regs8088_;
- BEGIN
- WITH Regs8088 DO BEGIN
- Ah := $31; Dx := Memw[Cseg-1:0003]; MsDos (Regs8088);
- END;
- END;
- (* Speicherbereich freigeben. Aus PASCAL 4/87, S. 74. Fuer TSR modifiziert! *)
- FUNCTION MFree (Block_Segment: INTEGER): INTEGER;
- VAR Regs8088 : Regs8088_;
- BEGIN
- Regs8088.ES := Block_Segment; Regs8088.AX := $4900; MsDos(Regs8088);
- IF Odd(Regs8088.Flags) THEN MFree := Regs8088.Al
- ELSE MFree := 0;
- END;
- (* ------------------------------------------------------------------------ *)
- (* Ende von MAKEINT.INC *)