- 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>
16 KiB
1. Архитектура компьютера Sprinter Sp2000
1.1 Общие сведения
ZX Sprinter — универсальный компьютер на базе 8-битного процессора Z80. Основой является перепрограммируемая логическая матрица (ППЛМ/CPLD/FPGA), что обеспечивает гибкую изменяемую архитектуру — конфигурация схемы может меняться непосредственно во время работы.
Материнская плата — Sp2000 (разработана в конце 2000 г.).
| Параметр | Значение |
|---|---|
| Процессор | Z84C15 (Z80-совместимый, внутренние PIO/SIO/CTC) |
| Тактовая частота | 21 МГц (turbo) / 3.5 МГц (slow) |
| ОЗУ (main) | 4 МБ (72-pin SIMM) |
| Быстрое ОЗУ (КЭШ-ОЗУ) | 64 КБ (SRAM, без wait states) |
| ПЗУ | 256 КБ (8 страниц по 32 КБ) |
| Видео-ОЗУ | 256 КБ |
| Контроллер дисков | КР1818ВГ93 (аналог WD1793) |
| Поддержка НЖМД | IDE/AT |
| Контроллер клавиатуры | AT-совместимая (101 key), PS/2 |
| Контроллер мыши | Serial MS-Mouse (RS-232 через Z84C15 SIO) |
| Слоты расширения | 2 × ISA-8 |
| Звук | AY-3-8910 (в ППЛМ), 16-бит ЦАП TDA1543 (COVOX + AY) |
| COVOX-Blaster (CBL) | 16-bit с буферным ОЗУ 256 байт, 15/22 кГц |
| CMOS-часы | Dallas DS12887A (опционально, эмулируется при отсутствии) |
| Видеовыход | Аналоговый CGA-монитор, RGB, TV (SCART) |
1.2 Системная архитектура
Упрощённая структура:
┌─────────────┐
┌──────────┐ │ ISA-8 │
│ Принтер │ │ слот 1..2 │
│ Мышь │ └──────┬──────┘
│ Джойстик │ │
└─────┬────┘ ┌─────┴──────┐
│ │ Буферы и │
┌─────┴──────┐ │ дешифраторы│
│ Z84C15 │ └──────┬─────┘
│ (CPU + │◄─────────┤
│ PIO/SIO/ ├──────────┤
│ CTC) ├──────────┤
└─────┬──────┘ │
│ ┌────┴──────────┐
┌─────┴──────┐ │ EP1K30QC208 │
│ ROM 256K │◄───►│ (CPLD/FPGA) │◄───► VRAM 256K
│ Cache 64K │ │ │◄───► Main RAM
└────────────┘ │ │
│ AY-3-8910 │
│ COVOX/CBL │
│ Accel. │
└──────┬────────┘
┌───┴───┐
│TDA1543│
│ ЦАП │
└───────┘
Периферия (FDD, HDD, Kempston, клавиатура AT) подключается через ППЛМ. Вспомогательная ППЛМ (EPM7064 на Sp2000) обеспечивает синхронизацию и начальный запуск. Дешифрация адресов портов выполняется через ППЛМ, что позволяет перепрограммировать адреса портов.
1.3 ППЛМ и загрузка конфигураций
Механизм конфигурирования
При включении или RESET информация в ППЛМ стирается. ППЛМ переходит в режим ожидания загрузки блока данных конфигурации. Процессор отключён от периферии, в его адресное пространство включено ПЗУ и возможно КЭШ-ОЗУ. Любая запись процессора в адресное пространство в этот момент записывает данные в ППЛМ.
Программа загрузчика в ПЗУ:
- Проверяет флаг в КЭШ-ОЗУ по смещению
#80(последняя страница КЭШа) - Если флаг (строка
ACEX_30K_LOADING) установлен → загружает конфигурацию из КЭШ-ОЗУ (смещение#100) - Если флаг сброшен → загружает конфигурацию из ПЗУ
Смена конфигурации программно
- Загрузить файл прошивки в последнюю страницу КЭШ-ОЗУ (смещение
#100) - Записать флаг
ACEX_30K_LOADINGпо смещению#80 - Выполнить программный сброс записью в страницу RESET_PAGE (
#A0), - После сброса загрузчик находит флаг, загружает прошивку в ППЛМ и стирает флаг
При аппаратном RESET флаг отсутствует — загружается начальная конфигурация из ПЗУ.
Ограничения
- Внутренний формат данных ППЛМ — закрытая информация Altera
- Программа разводки схем — MAX+Plus II — не работает на ZX-Spectrum/Sprinter (требуется PC)
1.4 Конфигурации ППЛМ
Sprinter-1
Максимально совместима с ZX-Spectrum. Включает:
- Режимы Spectrum-128/Scorpion-256/Pentagon-512
- Расширенная память до 4 МБ
- Расширенный экран: Spectrum, Text-80×32, Graf-320×256×256
- Контроллер дисковода (ВГ93), контроллер IDE
- AT-клавиатура, подключённая как ZX-Keyboard (через порт
#FE) - COVOX 8-bit
- AY-3-8910 (доступен)
Sprinter-2
Требования к совместимости жёстче. Добавляет:
- Акселератор операций с ОЗУ (fill, copy, AND, OR, XOR)
- AT-клавиатура через внутренний последовательный порт Z84C15 (сканкоды, не ZX-матрица)
ZX-Spectrum+AY
Максимальное приближение к ZX-Spectrum-128/256. AY-3-8910 (3-я версия, в ППЛМ): 3 голоса, шум, амплитуда, огибающая (обнаружена ошибка в формирователе огибающей [IvanMak.txt:224–229]).
Game-1
На базе Sprinter-2. Акселератор без логических функций. COVOX-Blaster (15 кГц).
DooM
Развитие Game-1. Акселератор с аппаратным растяжением/сжатием вертикальных и горизонтальных линий.
Video
Похожа на Game-1, добавлена возможность передачи данных с HDD прямо в видео-память. Режим GR-256-4×4 — 160×128 с аппаратным удвоением пикселя.
Плата Sp2000
Конфигурации Sprinter-1, Sprinter-2 и ZX+AY объединены в одну прошивку. Переключение — через системный порт. Game-1, DooM, Video также планируется свести в одну.
1.5 Система памяти (обзор)
Адресное пространство Z80 (64 КБ) разделено на 4 окна по 16 КБ:
| Окно | Адреса | Название | Назначение (по умолчанию) |
|---|---|---|---|
| W0 | #0000..#3FFF |
PAGE0 | ПЗУ (системное) |
| W1 | #4000..#7FFF |
PAGE1 | ОЗУ, страница 5 |
| W2 | #8000..#BFFF |
PAGE2 | ОЗУ, страница 2 |
| W3 | #C000..#FFFF |
PAGE3 | ОЗУ, любая страница (0..N) |
Основная память — 4..64 МБ — делится на блоки по 16 КБ. Управление через порты страниц (#82, #A2, #C2, #E2 для окон 0..3). ПЗУ: #E0..#EF. КЭШ-ОЗУ: #F0..#FF.
Детально — 04-memory.md.
1.6 Видеосистема (обзор)
Основа — ППЛМ + 256 КБ видео-ОЗУ. Два режима адресации VRAM:
- Спектрумовский — экран 32 блока по 8 КБ, адрес через RGADR
- Графический — 256 строк × 1024 байта, линейная адресация; страницы
#50..#5F
Режимы вывода (задаются для каждого квадратика 8×8):
- ZX-40 — текстовый 40×32 (Spectrum-совместимый)
- ZX-80 — текстовый 80×32, до 36 знакогенераторов
- GR-256-8 — графический 320×256×256 цветов
- GR-16-16 — графический 640×256×16 цветов
Палитра: 8 палитр по 256 цветов из 16 млн. Цвет: 3 байта RGB (BGR) на цвет.
четыре из этих восьми палитр используются для графических режимов и оставшиеся четыре для текстовой палитры — 4 текстовые палитры (paper, ink, flash-paper, flash-ink) по адресам #03F0..#03FE.
Детально — 05-graphics.md.
1.7 Акселератор (обзор)
Акселератор — быстрое внутреннее ОЗУ в ППЛМ. Присутствует в Sprinter-2 и выше. Управляется через NOP-команды процессора (LD D,D, LD L,L, LD C,C и др.), которые ППЛМ распознаёт как инструкции акселератора.
Операции: fill, copy, AND, OR, XOR.
время копирования полного экрана. - «~1.2 инта» (~24 мс при 50 Гц)
формула скорости. «Время работы акселератора = число пересылаемых байт / 7000000 (секунд)»
акселератор и прерывания. требуется DI/EI (акселератор сильно меняет систему команд).
Детально — 06-accel.md.
1.8 Быстрое ОЗУ (КЭШ-ОЗУ)
64 КБ SRAM с доступом без wait states на частоте 21 МГц. Физические страницы #F0..#FF, реально 4 страницы по 16 КБ.
Подключается через порт #FB (стандартный Pentagon-овский), чтение IN A,(#FB) — включает, IN A,(#7B) — выключает.
Ограничения:
- Несовместимо с акселератором
- Не сохраняется между процессами
- Конфликт с COVOX по порту
#FB - На Sp2000 используется для загрузки прошивок ППЛМ и как временное хранилище
Детально — 04-memory.md.
1.9 ISA-слоты
Два 8-битных ISA-слота.
Возможны два способа доступа к ISA — вероятно, разные конфигурации ППЛМ:
- Через страницы памяти
#D0..#DF[IvanMak.txt:855–858]: «Бит 1 номера означает выбор доступа к порту или памяти ISA, а бит 2 определяет к какому из двух слотов осуществляется доступ.» - Через управляющие порты [Parinov.txt:798–857]: (1) запись
#10в порт1FFDh, (2) запись управляющего байта в порт0E2h(бит D2=слот, D1=порт/память), (3) использование порта9FBDhдля старших адресов.
1.10 Звук (обзор)
COVOX: ЦАП TDA1543 — 16-битный стерео, COVOX — 8-битный, реально используется 10 бит для одновременного вывода COVOX и AY.
порт CBL.
«Порт управления: 004Eh (16-bit port!!!, писать только через OUT (C),reg)» — 16-бит, требуется OUT (C),A.
Компоненты звукового тракта:
- 16-битный ЦАП TDA1543 (реально 10 бит) — подключён к ППЛМ
- AY-3-8910 — эмуляция в ППЛМ (3-я версия: 3 голоса + шум + огибающая)
- COVOX 8-bit — порты
#FB/#4F, через TDA1543 - Бипер — бит 3 порта
#FE - COVOX-Blaster (CBL) — COVOX с буферным ОЗУ 256 байт, 15/22 кГц. Управление порт
#4E
Детально — 08-io.md.
1.11 Клавиатура (обзор)
В Sprinter-1 — ZX-клавиатурная матрица через порт #FE. В Sprinter-2 и выше — AT-клавиатура через внутренний SIO Z84C15 (порты #18/#19). Сканкоды напрямую, FIFO на 3 байта.
Детально — 08-io.md.
1.12 Мышь
Microsoft Mouse (2 кнопки) через последовательный порт Z84C15. Порт команд: #1B, порт данных: #1A.
Детально — 08-io.md.
1.13 Дисковая подсистема
- FDD: КР1818ВГ93 (WD1793). Порт
#1Fперенаправляется на#0Fв ПЗУ. Поддержка 720 КБ / 1.44 МБ. - HDD: IDE/AT. Порты
#XX50..#XX55, регистры#20..#29. - CMOS Dallas DS12887A: порты
#FFBD(read),#BFBD(write),#DFBD(address).
Детально — 08-io.md.
1.14 Система прерываний (обзор)
Поддерживаются IM1 и IM2. Генерация INT — через бит 0 порта #FE. CTC Z84C15 — таймер, SIO — клавиатура. ISA-слоты — IRQ через PIO порт B (#1F).
Детально — 07-irq.md.
1.15 Сброс и старт машины
Программный сброс (без перезагрузки ППЛМ) [IvanMak.txt:1385–1394]:
DI
LD A, 16
LD BC, 1FFDh
OUT (C), A
LD A, 0A0h
OUT (PAGE3), A ; PAGE3 = #E2
LD (0C000h), A ; в этот момент происходит RESET
DI
HALT
Сброс с перезагрузкой ППЛМ — через функции BIOS (02-bios.md). Аппаратный RESET — начальная конфигурация из ПЗУ.
1.16 Плата Sp2000 — особенности
- Конфигурации объединены в две прошивки ППЛМ (Sprinter-1+Sprinter-2+ZX+AY — одна; Game-1+DooM+Video — другая)
- AY-сопроцессор доступен и в Sprinter-1, и в Sprinter-2
- ОЗУ: 72-pin SIMM, от 4 до 64 МБ
- Внутренние порты Z84C15:
#10..#1F,#EE,#EF,#F0,#F1,#F4— их адреса вне ППЛМ - Обнаружена ошибка в формирователе огибающей AY (3-я версия)
1.17 Кросс-ссылки
- BIOS:
02-bios.md - DSS/ESTEX:
03-dss.md - Память, режимы, банки:
04-memory.md - Видео, палитра:
05-graphics.md - Акселератор:
06-accel.md - Прерывания:
07-irq.md - Диски, джойстик, принтер, ISA:
08-io.md - Клавиатура, мышь:
09-input.md - Звук:
10-sound.md - Карта портов:
11-ports.md - Баги:
12-bugs.md