keep.pas
Пример программы для процедуры Keep.
Код примера
{Keep.PAS}
{ Пример программы для процедуры Keep }
{ В данном примере используются процедуры GetIntVec и SetIntVec }
{ Посмотрите их описание и пример программы ! }
{$M $800, 0, 0 } { 2кб стек, без кучи }
{ Эта программа включает встроенный динамик
на короткое время каждый раз, при нажатии клавиши }
Uses Crt, Dos;
Var KbdIntVec : Procedure;
{$F+} { Включаем дальний (FAR) тип вызова }
Procedure Keyclick;
Interrupt;
Begin
{ Порт $60 - порт клавиатуры (также $64 ) }
If Port[$60] < $80 Then
{ Щелкаем при нажатии клавиши }
Begin
Sound(5000);
Delay(1);
NoSound;
End;
InLine($9C); { PUSHF -- запоминаем флаги в стеке }
{ Теперь нужно вернуть событие клавиатуры в цепь обработки. }
{ Вызываем старый ISR с использованием сохраненного вектора }
KbdIntVec;
End;
{$F-}
Begin
{ Устанавливаем новый обработчик событий клавиатуры }
{ $9 - прерывание клавиатуры }
GetIntVec($9, @KbdIntVec);
{ Переназначаем стандартный обработчик на нашу процедуру }
SetIntVec($9, Addr(KeyClick));
{ Оставляем программу в памяти }
Keep(0);
End.
Скачать keep.pas