{GetIntVc.PAS} { Пример программы для процедур GetIntVec и SetIntVec } { Обращайтесь с системными прерываниями с максимальной осторожностью } { Неверное использование прерываний может повредить информацию и/или } { сам компьютер на аппаратном уровне ! } { Еще один пример использования обработчиков прерываний можно } { посмотреть в программе для процедуры Keep } Uses WinDos, 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.