Когда надо запрещать все прерывания, когда изменяем таблицу прерываний, или уже когда наш обработчик что-то выполняет?
Наверно программно через Пас, никак, может ошибаюсь.
Но если теретически, то необходимо просто перехватить запрос на прерывание, и... Что нить с ним сделать, отклонить как нибудь.
Через пас можно - ASM CLI END;
Только когда делать это,
Вот скелет резидента:
{...}
{$F+}
procedure zamena_prerivania;
begin
{...}
end;
{$F-}
{...}
begin
{...}
end.
Так вот, где в нем надо обрамить в запрет и разрешение прерываний?
А каким образом ОБРАМИТЬ?
Я имею ввиду какой кусок кода должен выполняться С ЗАПРЕЩЕНИЕМ ВСЕХ ПРЕРЫВАНИЙ.
обрамить - CLI (запрет прерываний) и еще есть команда разрешения их.
Менять вектор можно без CLI, если он один. Если ты меняешь стадо векторов, а твоя прога рассчитанана то, что замена происходит "в один такт", то лучше обрамить и этот момент. А внутри своего обработчика аппаратного прерывания это просто необходимо.
Угу, все спасибо.
Команда разрешения прерываний - STI
Я бы лучше и когда один изменял бы - устанавливал запрет...
Замена происходит в 1 операцию (если делать грамотно). Во время выполнения операции INT'ы явно не генеряться.