home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Turbo Toolbox
/
Turbo_Toolbox.iso
/
sonderh1
/
makeint.inc
< prev
next >
Wrap
Text File
|
1987-05-18
|
3KB
|
127 lines
(* ---------------------------------- *)
(* MAKEINT.INC *)
(* Prozeduren zur Interrupt-Hand- *)
(* habung. *)
(* ---------------------------------- *)
TYPE
IntEntry_ =
RECORD
Offset, Segment : INTEGER;
END;
(* Interrupts vom Interrupt-Chip wieder
zulassen. *)
PROCEDURE IntChipRestart;
BEGIN
Port[$20] := $20;
END;
(* Werte der aktivier- und passivier-
baren Hardware-Interrupts: *)
CONST
IntChipMaskPort = $21;
IntChipTimerMask = $01;
IntChipKeyboardMask = $02;
IntChipCassetteMask = $03;
IntChipCom2Mask = $08;
IntChipCom1Mask = $10;
IntChipBscMask = $18;
IntChipDiskMask = $20;
IntChipFloppyMask = $40;
IntChipPrinterMask = $80;
(* Unterbrechung zulassen: *)
PROCEDURE IntChipEnable (Mask: Byte);
VAR Section : CriticalSection_;
BEGIN
CriticalBegin (Section);
Port [IntChipMaskPort]:=
Port [IntChipMaskPort]
AND NOT Mask;
CriticalEnd (Section);
END;
(* Unterbrechung unterbinden: *)
PROCEDURE IntChipDisable (Mask: Byte);
VAR Section : CriticalSection_;
BEGIN
CriticalBegin (Section);
Port [IntChipMaskPort]:=
Port [IntChipMaskPort]
OR Mask;
CriticalEnd (Section);
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:= Seg (HeapPtr^)
- Cseg
+ ((Ofs (HeapPtr^)+15)
SHR 4);
MsDos (Regs8088);
END;
END;
(* ---------------------------------- *)
(* Ende von MAKEINT.INC *)