home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* MAKEINT.INC *)
- (* Prozeduren zur Interrupt-Handhabung. *)
- (* 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 *)
-