home *** CD-ROM | disk | FTP | other *** search
- (* ---------------------------------------------------------- *)
- (* SHOWINTS.PAS *)
- (* Das Programm zeigt BIOS und DOS-Interrupts am Bildschirm *)
- (* Autor : H. Weber *)
- (* System: Turbo Pascal 3.0 & MS-DOS *)
- (* folgendes ist aus PASCAL 6/87, Seite 57 ff.: *)
- (* Include-Files: BEGININT.INC, EXITINT.INC *)
- (* Prozeduren : INTGET, INTSET, MAKERESIDENT *)
- (* ---------------------------------------------------------- *)
- PROGRAM ShowInts;
-
- (*$K-*) (* diese Optionen muessen unbedingt deaktiviert sein *)
- (*$U-*)
- (*$C-*)
- (*$V-*)
- (*$I-*)
- (*$R-*)
-
- TYPE
- IntEntry_ = RECORD (* EIntrag in Interr.-Vektor-Tabelle *)
- Offset, Segment : INTEGER;
- END;
- Regs8088_ = RECORD (* Registersatz der Intel CPU *)
- CASE INTEGER OF
- 1 : (AX, BX, CX, DX, BP,
- SI, DI, DS, ES, Flags : INTEGER);
- 2 : (Al, Ah, Bl, Bh, Cl, Ch,
- Dl, Dh : BYTE);
- END;
- zeile = RECORD (* fuer Anzeige *)
- filler : ARRAY [1..140] OF BYTE;
- aus : ARRAY [1..10] OF
- RECORD
- c : CHAR;
- a : BYTE;
- END
- END;
-
- CONST (* die MS-DOS System-Interrupts *)
- BIOS_zero_division : BYTE = $00;
- BIOS_non_mask_Int : BYTE = $02;
- BIOS_overflow : BYTE = $04;
- BIOS_print_screen : BYTE = $05;
- BIOS_system_timer : BYTE = $08;
- BIOS_keyboard : BYTE = $09;
- BIOS_diskette : BYTE = $0E;
- BIOS_screen_io : BYTE = $10;
- BIOS_equipment : BYTE = $11;
- BIOS_memory_size : BYTE = $12;
- BIOS_disk_io : BYTE = $13;
- BIOS_comm_io : BYTE = $14;
- BIOS_keyboard_io : BYTE = $16;
- BIOS_printer_io : BYTE = $17;
- BIOS_boot_strap : BYTE = $19;
- BIOS_time : BYTE = $1A;
- terminate_program : BYTE = $20;
- dos_function_call : BYTE = $21;
- terminate_address : BYTE = $22;
- ctrl_c_address : BYTE = $23;
- critical_error : BYTE = $24;
- absolute_disk_read : BYTE = $25;
- absolute_disk_write : BYTE = $26;
- terminate_resident : BYTE = $27;
-
- OldInt : IntEntry_ = (Offset : 0; Segment : 0);
-
- VideoSeg = $B800; (* fuer CGA. Fuer MGA: VideoSeg = $B000 *)
- DelTime = 2; (* Zur Verzoegerung der Bildschirman- *)
- (* zeige z.B. "DelTime = 5" *)
-
- VAR
- anz : zeile ABSOLUTE VideoSeg:$0000; (* Anzeige *)
- Value, Code : INTEGER;
- (* ---------------------------------------------------------- *)
- 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;
- (* ---------------------------------------------------------- *)
- 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;
- (* ---------------------------------------------------------- *)
- 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;
- (* ---------------------------------------------------------- *)
- (* Interrupt Service-Routinen: *)
- (* ---------------------------------------------------------- *)
- PROCEDURE Int00;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '0';
- anz.aus[5].c := '0';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int02;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '0';
- anz.aus[5].c := '2';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int04;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '0';
- anz.aus[5].c := '4';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int05;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '0';
- anz.aus[5].c := '5';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int08;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '0';
- anz.aus[5].c := '8';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int09;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '0';
- anz.aus[5].c := '9';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int0E;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '0';
- anz.aus[5].c := 'E';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int10;
- CONST j : INTEGER = 0;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '1';
- anz.aus[5].c := '0';
- anz.aus[6].c := ' ';
- anz.aus[7].c := 'F';
- anz.aus[8].c := Chr(PgmAh DIV 16 + Ord('0'));
- j := PgmAh MOD 16;
- IF j < 9 THEN anz.aus[9].c := Chr(j + Ord('0'))
- ELSE CASE j OF
- 10 : anz.aus[9].c := 'A';
- 11 : anz.aus[9].c := 'B';
- 12 : anz.aus[9].c := 'C';
- 13 : anz.aus[9].c := 'D';
- 14 : anz.aus[9].c := 'E';
- 15 : anz.aus[9].c := 'F';
- END;
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int11;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '1';
- anz.aus[5].c := '1';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int12;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '1';
- anz.aus[5].c := '2';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int13;
- CONST j : INTEGER = 0;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '1';
- anz.aus[5].c := '3';
- anz.aus[6].c := ' ';
- anz.aus[7].c := 'F';
- anz.aus[8].c := Chr(PgmAh DIV 16 + Ord('0'));
- j := PgmAh MOD 16;
- IF j < 9 THEN anz.aus[9].c := Chr(j + Ord('0'))
- ELSE CASE j OF
- 10 : anz.aus[9].c := 'A';
- 11 : anz.aus[9].c := 'B';
- 12 : anz.aus[9].c := 'C';
- 13 : anz.aus[9].c := 'D';
- 14 : anz.aus[9].c := 'E';
- 15 : anz.aus[9].c := 'F';
- END;
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int14;
- CONST j : INTEGER = 0;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '1';
- anz.aus[5].c := '4';
- anz.aus[6].c := ' ';
- anz.aus[7].c := 'F';
- anz.aus[8].c := Chr(PgmAh DIV 16 + Ord('0'));
- j := PgmAh MOD 16;
- IF j < 9 THEN anz.aus[9].c := Chr(j + Ord('0'))
- ELSE CASE j OF
- 10 : anz.aus[9].c := 'A';
- 11 : anz.aus[9].c := 'B';
- 12 : anz.aus[9].c := 'C';
- 13 : anz.aus[9].c := 'D';
- 14 : anz.aus[9].c := 'E';
- 15 : anz.aus[9].c := 'F';
- END;
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int16;
- CONST j : INTEGER = 0;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '1';
- anz.aus[5].c := '6';
- anz.aus[6].c := ' ';
- anz.aus[7].c := 'F';
- anz.aus[8].c := Chr(PgmAh + Ord('0'));
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int17;
- CONST j : INTEGER = 0;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '1';
- anz.aus[5].c := '7';
- anz.aus[6].c := ' ';
- anz.aus[7].c := 'F';
- anz.aus[8].c := Chr(PgmAh + Ord('0'));
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int19;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '1';
- anz.aus[5].c := '9';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int1A;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '1';
- anz.aus[5].c := 'A';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int20;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '2';
- anz.aus[5].c := '0';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int21;
- CONST j : INTEGER = 0;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '2';
- anz.aus[5].c := '1';
- anz.aus[6].c := ' ';
- anz.aus[7].c := 'F';
- anz.aus[8].c := Chr (PgmAh DIV 16 + Ord('0'));
- j := PgmAh MOD 16;
- IF j < 9 THEN anz.aus[9].c := Chr(j + Ord('0'))
- ELSE CASE j OF
- 10 : anz.aus[9].c := 'A';
- 11 : anz.aus[9].c := 'B';
- 12 : anz.aus[9].c := 'C';
- 13 : anz.aus[9].c := 'D';
- 14 : anz.aus[9].c := 'E';
- 15 : anz.aus[9].c := 'F';
- END;
- Delay(DelTime);
- END;
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int22;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '2';
- anz.aus[5].c := '2';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int23;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '2';
- anz.aus[5].c := '3';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int24;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '2';
- anz.aus[5].c := '4';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int25;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '2';
- anz.aus[5].c := '5';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int26;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '2';
- anz.aus[5].c := '6';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
-
- PROCEDURE Int27;
- (*$I BEGININT.INC *)
- WITH PgmRegs DO BEGIN
- anz.aus[1].c := 'I';
- anz.aus[2].c := 'N';
- anz.aus[3].c := 'T';
- anz.aus[4].c := '2';
- anz.aus[5].c := '7';
- anz.aus[6].c := ' ';
- anz.aus[7].c := ' ';
- anz.aus[8].c := ' ';
- anz.aus[9].c := ' ';
- END;
- Delay(DelTime);
- (*$I EXITINT.INC*)
- OldInt);
- END;
- (* ---------------------------------------------------------- *)
- PROCEDURE Parameter;
- BEGIN
- IF ParamCount = 0 THEN
- BEGIN
- WriteLn('Kein Interrupt spezifiziert...'); Halt;
- END;
- IF ParamCount > 1 THEN
- BEGIN
- WriteLn ('Zu viel Parameter...'); Halt;
- END;
- Val(ParamStr(1), Value, Code);
- IF Code <> 0 THEN
- BEGIN
- WriteLn('ungueltiger Parameter.'); Halt;
- END
- END;
- (* ---------------------------------------------------------- *)
- BEGIN (* ShowInts *)
- Parameter;
- CASE Value OF
- $00 : BEGIN
- WITH OldInt DO
- IntGet(BIOS_zero_division, Segment, Offset);
- IntSet(BIOS_zero_division, CSeg, Ofs(Int00));
- END;
- $02 : BEGIN
- WITH OldInt DO
- IntGet(BIOS_non_mask_Int, Segment, Offset);
- IntSet(BIOS_non_mask_Int, CSeg, Ofs(Int02));
- END;
- $04 : BEGIN
- WITH OldInt DO
- IntGet(BIOS_overflow, Segment, Offset);
- IntSet(BIOS_overflow, CSeg, Ofs(Int04));
- END;
- $05 : BEGIN
- WITH OldInt DO
- IntGet(BIOS_print_screen, Segment, Offset);
- IntSet(BIOS_print_screen, CSeg, Ofs(Int05));
- END;
- $08 : BEGIN
- WITH OldInt DO
- IntGet(BIOS_system_timer, Segment, Offset);
- IntSet(BIOS_system_timer, CSeg, Ofs(Int08));
- END;
- $09 : BEGIN
- WITH OldInt DO
- IntGet(BIOS_keyboard, Segment, Offset);
- IntSet(BIOS_keyboard, CSeg, Ofs(Int09));
- END;
- $0E : BEGIN
- WITH OldInt DO
- IntGet(BIOS_diskette, Segment, Offset);
- IntSet(BIOS_diskette, CSeg, Ofs(Int0E));
- END;
- $10 : BEGIN
- WITH OldInt DO
- IntGet(BIOS_screen_io, Segment, Offset);
- IntSet(BIOS_screen_io, CSeg, Ofs(Int10));
- END;
- $11 : BEGIN
- WITH OldInt DO
- IntGet(BIOS_equipment, Segment, Offset);
- IntSet(BIOS_equipment, CSeg, Ofs(Int11));
- END;
- $12 : BEGIN
- WITH OldInt DO
- IntGet(BIOS_memory_size, Segment, Offset);
- IntSet(BIOS_memory_size, CSeg, Ofs(Int12));
- END;
- $13 : BEGIN
- WITH OldInt DO
- IntGet(BIOS_disk_io, Segment, Offset);
- IntSet(BIOS_disk_io, CSeg, Ofs(Int13));
- END;
- $14 : BEGIN
- WITH OldInt DO
- IntGet(BIOS_comm_io, Segment, Offset);
- IntSet(BIOS_comm_io, CSeg, Ofs(Int14));
- END;
- $16 : BEGIN
- WITH OldInt DO
- IntGet(BIOS_keyboard_io, Segment, Offset);
- IntSet(BIOS_keyboard_io, CSeg, Ofs(Int16));
- END;
- $17 : BEGIN
- WITH OldInt DO
- IntGet(BIOS_printer_io, Segment, Offset);
- IntSet(BIOS_printer_io, CSeg, Ofs(Int17));
- END;
- $19 : BEGIN
- WITH OldInt DO
- IntGet(BIOS_boot_strap, Segment, Offset);
- IntSet(BIOS_boot_strap, CSeg, Ofs(Int19));
- END;
- $1A : BEGIN
- WITH OldInt DO
- IntGet(BIOS_time, Segment, Offset);
- IntSet(BIOS_time, CSeg, Ofs(Int1A));
- END;
- $20 : BEGIN
- WITH OldInt DO
- IntGet(terminate_program, Segment, Offset);
- IntSet(terminate_program, CSeg, Ofs(Int20));
- END;
- $21 : BEGIN
- WITH OldInt DO
- IntGet(dos_function_call, Segment, Offset);
- IntSet(dos_function_call, CSeg, Ofs(Int21));
- END;
- $22 : BEGIN
- WITH OldInt DO
- IntGet(terminate_address, Segment, Offset);
- IntSet(terminate_address, CSeg, Ofs(Int22));
- END;
- $23 : BEGIN
- WITH OldInt DO
- IntGet(ctrl_c_address, Segment, Offset);
- IntSet(ctrl_c_address, CSeg, Ofs(Int23))
- END;
- $24 : BEGIN
- WITH OldInt DO
- IntGet(critical_error, Segment, Offset);
- IntSet(critical_error, CSeg, Ofs(Int24));
- END;
- $25 : BEGIN
- WITH OldInt DO
- IntGet(absolute_disk_read, Segment, Offset);
- IntSet(absolute_disk_read, CSeg, Ofs(Int25));
- END;
- $26 : BEGIN
- WITH OldInt DO
- IntGet(absolute_disk_write, Segment, Offset);
- IntSet(absolute_disk_write, CSeg, Ofs(Int26));
- END;
- $27 : BEGIN
- WITH OldInt DO
- IntGet(terminate_resident, Segment, Offset);
- IntSet(terminate_resident, CSeg, Ofs(Int27));
- END;
- ELSE BEGIN
- WriteLn('Interrupt nicht implementiert...');
- Halt
- END;
- END; (* case *)
- MakeResident;
- END. (* ShowInts *)