zx_cartridge/FW
2026-02-23 20:13:00 +03:00
..
src ext version 2026-02-19 23:33:01 +03:00
readme.md readme.md 2026-02-23 02:16:02 +03:00
zx_cartrige.qpf init 2026-02-17 18:14:59 +03:00
zx_cartrige.qsf fix quartus pin assignment 2026-02-23 20:13:00 +03:00

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 (картридж включён).