home *** CD-ROM | disk | FTP | other *** search
- (* ---------------------------------- *)
- (* MAKEINT.INC *)
- (* Prozeduren zur Interrupt-Hand- *)
- (* habung. *)
- (* Fuer TSR "abgespeckt" *)
- (* ---------------------------------- *)
-
- TYPE
- IntEntry_ =
- RECORD
- Offset, Segment : INTEGER;
- END;
-
- (* die Interrupt-Vektoren: *)
- CONST
- IntPrintScreen = $05;
- IntHardwareTimer = $08;
- IntHardwareKeyboard = $09;
- IntCassette = $0A;
- IntCom2 = $0B;
- IntBscReceive = $0B;
- IntCom1 = $0C;
- IntBscSend = $0C;
- IntHardwareDisk = $0D;
- IntHardwareDiskette = $0E;
- IntCentronics = $0F;
- IntKeyBoard = $16;
- IntPrinter = $17;
- IntBootstrap = $19;
- IntTimeOfDay = $1A;
- IntCtrlBreak = $1B;
- IntTimer = $1C;
-
- (* 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: *)
- (* Modifiziert fuer TSR !! *)
- 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, Seite 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 *)