· Начало · Отвђтить · Статистика · Поиск · FAQ · Правила · Установки · Язык · Выход · WASM.RU · Noir.Ru ·

 WASM Phorum —› WASM.ZEN —› Контроллер прерываний

Посл.отвђт Сообщенiе


Дата: Янв 23, 2004 07:56:55

Контроллер прерываний


Дата: Янв 23, 2004 07:59:41

Народ !!! Такое дело. Надо узнать на какие int отображает базовые irq контроллер прерываний? можно ли эту информацию получить непосредственно от контроллера?? Если можно, то как?? ПАМАГИТЕ !!!!!!!!!!!


Дата: Янв 23, 2004 11:36:34

Есть косвенный метод, который для первого контроллера будет выглядеть примерно так:
Маскируем все IRQ кроме IRQ0(таймер).
На все вектора вида 8*n ставим свои обработчики и смотрим который из них первым вызовется.
Но вот со вторым контроллером сложнее, так как самым подходящим кандидатом для генерации прерывания является жесткий диск.
Хотя может у меня хелпы старые, и есть прямой метод.


Дата: Янв 23, 2004 12:22:03

Вообще-то надо бы уточнить о каком контроллере идет речь PIC или APIC?

Насчет PIC-a точно не скажу, но там совсем все просто..
А с APIC-ом в принципе, особых проблем тоже нет. У него вся инфа сохраняется в специальных регистрах. Для каждого аппаратного прерывания есть инфа о том, какой вектор ему соответствуем, замаскировано оно сейчас или нет, тип срабатывания (по фронту или по уровню) и много чего еще.

SoftICE, к примеру, умеет читать напрямую эти регистры.


Дата: Янв 23, 2004 12:37:30

Скорее всего SoftICE не читает эти регистры, а запоминает их изменение, фильтруя обращение к портам 20h/21h/A0h/A1h.


Дата: Янв 23, 2004 15:39:17

SoftICE читает напрямую регистры I/O APIC, которые мапяться в память. Если в системе есть APIC, то к портам 20h/21h etc. вообще никто не обращается.

Про PIC я ничего и не говорил.


Дата: Янв 23, 2004 16:43:53

Вообще, первоначально вопрос звучит так. Необходимо установить свой обработчик прерывания от клавиатуры под Windows. Всё бы хорошо, но вот как быть с векторами. Опытным путём я узнал что вектора отображены на int 50h и т.д. Соответственно, irq1 отображается на int 51h/ Вопрос. Будет ли всегда так, или значение базы непостоянно от версии к версии ядра. И , есть ли способ узнать базовый адрес вообще, из реестра там или винда где хранит его?


Powered by miniBB 1.6 © 2001-2002
Время загрузки страницы (сек.): 0.064