# 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 информация в ППЛМ стирается. ППЛМ переходит в режим ожидания загрузки блока данных конфигурации. Процессор отключён от периферии, в его адресное пространство включено ПЗУ и возможно КЭШ-ОЗУ. Любая запись процессора в адресное пространство в этот момент записывает данные в ППЛМ.

Программа загрузчика в ПЗУ:
1. Проверяет флаг в КЭШ-ОЗУ по смещению `#80` (последняя страница КЭШа)
2. Если флаг (строка `ACEX_30K_LOADING`) установлен → загружает конфигурацию из КЭШ-ОЗУ (смещение `#100`)
3. Если флаг сброшен → загружает конфигурацию из ПЗУ

### Смена конфигурации программно

1. Загрузить файл прошивки в последнюю страницу КЭШ-ОЗУ (смещение `#100`)
2. Записать флаг `ACEX_30K_LOADING` по смещению `#80`
3. Выполнить программный сброс записью в страницу RESET_PAGE (`#A0`),
4. После сброса загрузчик находит флаг, загружает прошивку в ППЛМ и стирает флаг

При аппаратном 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`
