zx_cartridge/FW/readme.md
2026-02-23 02:16:02 +03:00

49 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# ZX Spectrum Cartridge Controller — программисту
## Общая информация
Модуль `zx_cartridge` управляет четырьмя микросхемами ПЗУ типа AM29F040 (512 КБ каждая), что даёт **2 МБ** памяти.
Память организована в виде **256 страниц по 8 КБ**. Страницы нумеруются от 0 до 255.
В адресном пространстве ZX Spectrum под картридж отведена область **0x0000…0x3FFF** (16 КБ, первые 16 КБ памяти).
Эта область разделена на два 8КБ окна:
- **Нижнее окно** `0x0000…0x1FFF` (A13 = 0) — всегда **страница 0**.
Здесь должен располагаться код BIOS картриджа.
- **Верхнее окно** `0x2000…0x3FFF` (A13 = 1) — страница, номер которой задаётся программно через регистр `bank`.
## Регистры управления
Доступ к регистрам осуществляется через порты ввода‑вывода.
### Порт `bank` (адрес **0xDF7F**)
- **Запись** (`OUT (0xDF7F), A`) — устанавливает номер страницы для верхнего окна.
- **Чтение** (`IN A, (0xDF7F)`) — возвращает текущее значение регистра.
Формат байта `bank`:
| Биты 76 | Биты 50 |
|----------|---------------------|
| Выбор микросхемы (03) | Номер страницы внутри микросхемы (063) |
Таким образом, полный номер страницы = `(chip << 6) | page`.
После сброса регистр равен 0 (микросхема 0, страница 0).
### Порт `control` (адрес **0xBF7F**)
- **Запись** (`OUT (0xBF7F), A`) — запись в управляющий регистр.
- **Чтение** (`IN A, (0xBF7F)`) — чтение текущего значения.
Формат байта `control`:
| Биты 7 | Биты 60 |
|----------|---------------------|
| Отключение картриджа | Можно использовать по своему усмотрению |
- **Бит 7 = 0** — картридж включён (обычный режим).
- **Бит 7 = 1** — картридж отключён. Выходы ПЗУ переводятся в высокоимпедансное состояние, внутреннее ПЗУ Spectrum работает штатно.
После сброса бит 7 = 0 (картридж включён).