пожалуста можете сказать как устоновлевать IRQ на нужное приривание (всьо ето на уровне портов), я нашел инфу там описано как включать и выключать IRQ - используються порты: 0x21, 0xa1. Может ктото дать инфу и сказать что куда положыть чтобы устоновить IRQ на нужное приривание? Зарание благодарен
если есть поддержка I/O APIC (а она в принципе должна быть), лучше пользоваться им как пример, маскирование линий IRQ с 0 по 23 и установка IRQ0 на вектор 0x20 Код (Text): mask_IRQ: mov ecx, 24 ; count of IRQ lines @@: lea eax, [0xE + ecx * 2] mov dword [0xFEC00000], eax ; choose redirection table entry or dword [0xFEC00010], 0x10000 ; mask IRQ line with number ECX - 1 dec ecx jnz @B mov dword [0xFEC00000], 0x10 ; 0x10-0x11 conform to IRQ0, 0x12-0x13 - to IRQ1, ... mov dword [0xFEC00010], 0x8020 ; set trigger mode, delivery mode, priority, vector number да, адреса отображенных на память регистров I/O APIC не фиксированы (можно менять, модифицируя регистры в конфигурационном пространстве PCI I/O APIC)
rei3er Спасибо, а как узнать есть поддержка I/O APIC или нет? (хочу чтобы всьо роботало на все 100% и без глюков, понимаю что на новых машынах он есть, но на старых может ищо нету) и какой клас APIC, чтобы я мог зделать поиск и найти конфигурационное пространство PCI I/O APIC ???
CPUID (eax = 1), присутствует, если после CPUID в edx 9-ый бит установлен вроде как D0:F0 можно просто попытаться найти устройство с device id = 0x1161, vendor id = 0x8086, что и будет I/O APIC-ом