home *** CD-ROM | disk | FTP | other *** search
- Program Critical_Error_Handler;
- Type
- RegisterSet=Record 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;
- Const
- Interupt_41 = $41;
- Interupt_42 = $42;
- Var
- Interupt_Number : Integer;
- Int41,Dos_Function : RegisterSet;
- C : Char;
- Begin (* Sample Interupt Caller *)
- WriteLn('This program calls interupt 65 or 66');
- WriteLn('Segment registers are: CSeg=',CSeg);
- WriteLn(' SSeg=',SSeg);
- WriteLn(' DSeg=',DSeg);
- WriteLn('Do you want to examine the interupt vectors?');
- Read(Kbd,C);
- While C = 'y' Do With Dos_Function Do Begin
- Write('Interupt to query ? ');
- Read (Interupt_Number);WriteLn;
- AH := $35; {Get interupt vectors}
- AL := Interupt_Number; {for test interupt}
- MsDos (Dos_Function);
- WriteLn('Interupt ',AL,': segment = ',ES,': offset = ',BX);
- WriteLn('More?');
- Read(kbd,C);
- End;
- Write('Interupt to activate ? ');
- Read (Interupt_Number);
- WriteLn;
- While Interupt_Number in [$41,$42] do begin
- WriteLn('Do you want to set registers?');
- Read(Kbd,C);
- If C = 'y' Then Begin
- WriteLn('Enter Values for AX, BX, and DI registers...');
- With Int41 do read(AX,BX,DI); WriteLn;
- End;
- WriteLn(' Preparing to activate Software Interupt ',Interupt_Number);
- WriteLn(' --------------------------------------------------------------');
- IF Interupt_Number = $41 then INTR(Interupt_41,Int41);
- IF Interupt_Number = $42 then INTR(Interupt_42,Int41);
- WriteLn(' --------------------------------------------------------------');
- WriteLn(' Returned from interupt ',Interupt_Number);
- With Int41 Do Begin
- WriteLn('Registers are:');
- WriteLn('AX = ',AX,': BX = ',BX,': CX = ',CX);
- WriteLn('DX = ',DX,': SI = ',SI,': DI = ',DI); End;
- Write('Interupt to activate ? ');
- Read (Interupt_Number);
- WriteLn; End;
- End.