docs: справочники по железу Sprinter + правка gfx_scroll_h
- 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>
This commit is contained in:
@@ -0,0 +1,92 @@
|
||||
# 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`
|
||||
Reference in New Issue
Block a user