# 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`
