Да уж... с этими векторными прерываниями фантастика)
Код:
3.2. Векторные прерывания
В ПЭВМ отсутствуют векторные прерывания. Однако они
необходимы для правильной эмуляции "стандартных устройств", без
которых не может обойтись ДОС. Поэтому предусмотрены
соответствующие аппаратно-программные средства, позволяющие
эмулировать векторные прерывания. ВПО содержит специальную
таблицу-список, в которой хранится информация о всех векторных
прерываниях, "выставленных" эмуляторами. Эмулятор выставляет
"запрос на прерывание" специальным запросом ВПО - SETINT. Снятие
запроса на прерывание выполняется запросом RESINT.
Эмуляция векторных прерываний происходит только для одного
процесса. Этот единственный процесс должен содержать в слове
P.MASK своего дескриптора установленный в 1 разряда в соответствии
смаской V.VRQ. Этим единственным процессом является процесс
дисковой ОС.
Действительно, у одного из процессов, процесса ОС установлен флаг M.VRQ. И в один прекрасный момент, при загрузке системы USER-процесс загрузчика обращается к регистру 177130 (работа с диском) с установленным младшим битом (т.е. хочет ответ от дисковой системы получить посредством прерывания). Дисковый процесс считывает данные и просит у ВПО SETINT. В этом SETINT в таблице векторов ВПО (которая находится по адресу 100146, устанавливаются какие-то значения, причем, не очень похожие на реальные вектора). Вот тут-то начинается самое интересное. Системой сбрасывается бит VIRQ регистра PPIC (что означает разрешение векторных прерываний), и по идее процессор в USER режиме должен на это прерывание перейти. Все хорошо, только откуда брать вектор - совершенно не понятно. Может быть есть какой-то хитрый аппаратный контроллер, который вынет этот вектор из той таблицы в ОЗУ по адресу 100146 и подаст на шину?