home *** CD-ROM | disk | FTP | other *** search
- (* ------------------------------------------------------ *)
- (* MAKEINT.INC *)
- (* Prozeduren zur Interrupt-Handhabung. *)
- (* ------------------------------------------------------ *)
-
- 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: *)
- PROCEDURE MakeResident;
- VAR Regs8088 : Regs8088_;
- BEGIN
- WITH Regs8088 DO BEGIN
- Ah:= $31;
- Dx:= MemW[Cseg-1:0003];
- MsDos (Regs8088);
- END;
- END;
- (* Speicherbereich freigeben *)
- FUNCTION MFree(BlockSegment: INTEGER): INTEGER;
- VAR Regs : Regs8088_;
- BEGIN
- Regs.Es := BlockSegment;
- Regs.Ax := $4900;
- MsDos(Regs);
- IF ODD(Regs.Flags) THEN MFree := Regs.Al
- ELSE MFree := 0;
- END;
- (* ------------------------------------------------------ *)
- (* Ende von MAKEINT.INC *)