mirror of
https://github.com/MikhaelKaa/zx_cartridge.git
synced 2026-03-16 14:37:57 +03:00
49 lines
2.8 KiB
Markdown
49 lines
2.8 KiB
Markdown
# 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`:
|
||
|
||
| Биты 7–6 | Биты 5–0 |
|
||
|----------|---------------------|
|
||
| Выбор микросхемы (0–3) | Номер страницы внутри микросхемы (0–63) |
|
||
|
||
Таким образом, полный номер страницы = `(chip << 6) | page`.
|
||
После сброса регистр равен 0 (микросхема 0, страница 0).
|
||
|
||
### Порт `control` (адрес **0xBF7F**)
|
||
|
||
- **Запись** (`OUT (0xBF7F), A`) — запись в управляющий регистр.
|
||
- **Чтение** (`IN A, (0xBF7F)`) — чтение текущего значения.
|
||
|
||
Формат байта `control`:
|
||
|
||
| Биты 7 | Биты 6–0 |
|
||
|----------|---------------------|
|
||
| Отключение картриджа | Можно использовать по своему усмотрению |
|
||
|
||
- **Бит 7 = 0** — картридж включён (обычный режим).
|
||
- **Бит 7 = 1** — картридж отключён. Выходы ПЗУ переводятся в высокоимпедансное состояние, внутреннее ПЗУ Spectrum работает штатно.
|
||
|
||
После сброса бит 7 = 0 (картридж включён).
|