Язык:
Русский
English
GetIntVec (процедура) (модуль WinDos)
Возвращает адрес, сохраненный в указанном векторе прерывания.
Объявление
Procedure GetIntVec(IntNo : Byte; Var Vector : Pointer);
Режим
Windows, Real, Protected
Замечания
Параметр IntNo определяет номер вектора прерывания (0..255), А его адрес возвращается в переменной Vector.
Смотри также
Пример
Язык:
Русский
English
{ Обращайтесь с системными прерываниями с максимальной осторожностью }
{ Неверное использование прерываний может повредить информацию и/или }
{ сам компьютер на аппаратном уровне ! }
{ Ещё один пример использования обработчиков прерываний можно }
{ посмотреть в программе для процедуры Keep }
uses Dos, Crt;
var
Int1CSave : Pointer;
Fl : Boolean;
{$F+}
procedure TimerHandler; Interrupt;
begin
{ ISR на события таймера }
{*** Обратитесь к документации по DDK или
DPMI для информации по созданию ISR *** }
{ ISR на события таймера вызываются 18 раз в секунду }
{ Данный пример включает внутренний динамик 9 раз в
секунду с частотой 1000 }
if Fl then
NoSound
else
Sound(1000);
Fl := not Fl;
end;
{$F-}
begin
{ Получаем старый вектор прерывания $1C - (системный таймер) }
{ и сохраняем его в переменной Int1CSave }
GetIntVec($1C, Int1CSave);
{ Переназначаем его на нашу процедуру обработки прерывания }
SetIntVec($1C, @TimerHandler);
WriteLn('Нажмите любую клавишу для снятия обработчика...');
repeat
until KeyPressed;
{ Возвращаем обработчик прерывания в исходное состояние }
SetIntVec($1C, Int1CSave);
end.
{ Неверное использование прерываний может повредить информацию и/или }
{ сам компьютер на аппаратном уровне ! }
{ Ещё один пример использования обработчиков прерываний можно }
{ посмотреть в программе для процедуры Keep }
uses Dos, Crt;
var
Int1CSave : Pointer;
Fl : Boolean;
{$F+}
procedure TimerHandler; Interrupt;
begin
{ ISR на события таймера }
{*** Обратитесь к документации по DDK или
DPMI для информации по созданию ISR *** }
{ ISR на события таймера вызываются 18 раз в секунду }
{ Данный пример включает внутренний динамик 9 раз в
секунду с частотой 1000 }
if Fl then
NoSound
else
Sound(1000);
Fl := not Fl;
end;
{$F-}
begin
{ Получаем старый вектор прерывания $1C - (системный таймер) }
{ и сохраняем его в переменной Int1CSave }
GetIntVec($1C, Int1CSave);
{ Переназначаем его на нашу процедуру обработки прерывания }
SetIntVec($1C, @TimerHandler);
WriteLn('Нажмите любую клавишу для снятия обработчика...');
repeat
until KeyPressed;
{ Возвращаем обработчик прерывания в исходное состояние }
SetIntVec($1C, Int1CSave);
end.