Язык:
Русский
English
{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.
{ Эта программа включает встроенный динамик
на короткое время каждый раз, при нажатии клавиши }
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.