Пишу свою ОС (загрузка через UEFI, переход в Long Mode, вывод графики через GOP). Столкнулся со следующей проблемой при настройке прерываний (IDT).
Симптомы:
При старте экран черный (так и задумано на этом этапе), но клавиатура реагирует на клавишу ESC — код отрабатывает корректно. Однако, если нажать любую другую клавишу, экран переключается в графический режим, но после этого клавиатура полностью перестает реагировать на любые нажатия (включая ESC). Прерывания будто блокируются после первого-второго вызова.
Что я уже проверил:
1. Базовый обработчик IDT вызывается.
2. Стек при выходе из прерывания (iretq) восстанавливается (по крайней мере, явных Triple Fault нет).
Предположение:
Подозреваю, что я либо некорректно отправляю EOI (End of Interrupt) в PIC/APIC, из-за чего контроллер ждет завершения и блокирует линию, либо где-то затираются регистры общего назначения при обработке прерывания.
Ссылка на репозиторий с кодом обработки IDT:
https://github.com/larcenkokirill91-max/AnalOS.git
Подскажите, пожалуйста, на что обратить внимание в коде ISR-заглушек и инициализации контроллера прерываний, чтобы ввод не блокировался?