- docs/new/ — сводные справочники (архитектура, BIOS, DSS, память, графика, акселератор, IRQ, порты, ввод, звук, известные баги); - docs/Original/ — первоисточники, из которых они собраны (BIOS, Estex DSS, мануалы, описание акселератора), + Форум.doc/.docx в reference; - libbgi/common/gfx_scroll_h.c — обход бага скролла при ширине >256 (правка автора: шаг банды 255 и продвижение указателей на cw; старый вариант с 256 оставлен закомментированным с TODO); - удалён applications/PoP/roomtest/hang_variants.png — рабочая раскладка из разбора позы виса, в репозитории ей не место. Большие архивы (docs/extra ~568 МБ, docs/sources с вложенными git-репо ~68 МБ) в коммит НЕ включены — см. обсуждение. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
5.7 KiB
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 требуется:
- Таблица векторов в резиденте (W3)
- Регистр I = старший байт адреса таблицы
- Каждый вектор — адрес обработчика (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