# 7. Прерывания (IRQ) ## 7.1 Общие сведения Sprinter Sp2000 поддерживает режимы прерываний IM1 и IM2. ### Источники прерываний | Источник | Происхождение | Описание | |----------|---------------|----------| | Кадровые (INT) | Видеоконтроллер | Квадратик экрана в 8-й линии | | CTC | Z84C15 | Таймерные прерывания | | SIO | Z84C15 | AT-клавиатура | | PIO | Z84C15 (бит 0 порта B, `#1F`) | ISA-слоты | | CBL | COVOX-Blaster | Запрос данных | ### Различение источников Кадровые и клавиатурные прерывания приходят с вектором `0FFh` [Parinov.txt:956]. Способ различения: - Клавиатура выставляет бит 0 в порте `19h` — признак приёма байта [Parinov.txt:1049] - Если бит 0 порта `19h` не установлен — прерывание кадровое > **Примечание:** [Parinov.txt:956] описывает альтернативный метод — «отличать по биту приема байта в порте клавиатуры». Оба метода сводятся к проверке бита 0 в порте `19h`. ### Выбор режима прерываний (IM1 vs IM2) | Режим | Контекст | Источник | |-------|----------|----------| | IM2 | Рекомендован для работы с BIOS через RST | IvanMak.txt:1469–1473 | | IM1 | Используется DSS для своих обработчиков | — | | IM1 | Fast-RAM секция предполагает обработчик по `#0038` | Parinov.txt:601 | | IM2 | Рекомендован при выставленных прерываниях от CBL | Parinov.txt:762–763 | > **Примечание:** разные подсистемы рекомендуют разные режимы. IM2 предпочтителен при интенсивной работе с прерываниями (CBL, BIOS). IM1 используется DSS по умолчанию. ## 7.2 Кадровые прерывания (INT) Генерируются в момент прохождения 8-й строки квадратика (настраивается через бит 0 порта `#FE`). Положение INT подстраивается под стандарт Pentagon (320 строк) или Scorpion (312 строк). > **Мышь — есть ли аппаратные прерывания?** [Parinov.txt:956] утверждает: «От мыши прерывания не приходят. Сделать можно, но сейчас их нет.» [ProgrammerManual.txt:1784–1786] описывает драйвер мыши, где «каждое нажатие и отпускание клавиш или перемещение мыши вызывает прерывание», и документирует функцию «80h MOUSE HARDWARE INTERRUPT» [ProgrammerManual.txt:1930–1937]. Parinov (разработчик драйвера) отрицает их наличие — возможно, ProgrammerManual описывает планируемую функциональность. ## 7.3 CTC (Z84C15) Таймер CTC используется для: - Генерации периодических прерываний - Задания частоты CBL (COVOX-Blaster) - Синхронизации звука ## 7.4 SIO (Z84C15) Внутренний SIO Z84C15 обслуживает: - AT-клавиатуру (порты `#18`/`#19`) - RS-232 (для мыши и других последовательных устройств) ## 7.5 IM1 — вектор #0038 Стандартный Z80-режим. Все INT ведут на адрес `#0038`. Используется DSS для своих обработчиков. ## 7.6 IM2 — таблица векторов IM2 использует таблицу векторов (256 байт) в фиксированной странице (обычно W3). Вектор прерывания — `0FFh`. Для работы IM2 требуется: 1. Таблица векторов в резиденте (W3) 2. Регистр I = старший байт адреса таблицы 3. Каждый вектор — адрес обработчика (2 байта) ## 7.7 Акселератор и прерывания При работе акселератора система команд Z80 сильно меняется. | Режим | Описание | Источник | |-------|----------|----------| | Старый | DI обязателен | IvanMak.txt:844–846, Parinov.txt:954 | | Новый | EI/RETI: по INT акселератор отключается, по RETI включается | IvanMak.txt:846–848 | > **Примечание:** IvanMak описывает два режима (старый — DI, новая прошивка — EI/RETI). Parinov знает только старый. Без тестирования на железе неизвестно, какая версия прошивки установлена. ## 7.8 Цепочка обработчиков TODO (проектный `im2_isr_design.md`): цепочка irq_install/remove, FPS-делитель, обработчики клавиатуры. ## 7.9 Кросс-ссылки - Порты прерываний: `11-ports.md` - Проектный документ по IM2/ISR: `im2_isr_design.md` - Клавиатура: `09-input.md §9.1` - CBL (прерывания): `10-sound.md §9.4.6`