TSconf: Memory

Рассмотрим расположение памяти в системе.

ZX Evolution имеет 4Мб памяти.
Организация этой памяти подобна zx spectrum 128 — используется страничная организация.
В переложении на страницы памяти, мы имеем 256 страниц по 16 кб каждая.

Приведённая выше картинка описывает, как организована память спектрума. В TSconf использована подобная система, но несколько расширена — мы имеем возможность размещать страницы не только с адреса #c000:

Page0 (порт #10af) - адрес #0000
Page1 (порт #11af) - адрес #4000
Page2 (порт #12af) - адрес #8000
Page3 (порт #13af) - адрес #c000

Запись в порт переключает страницу в нужном нам окне.

Для использования страничной системы с адреса #0000 нужно использовать порт MemConfig (#21af):
Порт MemConfig, #21af:
MemConfig LCK128[1:0] — - W0_RAM !W0_MAP W0_WE ROM128
биты 7,6 — LCK128 — режим памяти: 00- 512k, 01 — 128k, 10 — Auto, 11 — 1024 k. По умолчанию — данные из BIOS.
бит 3 — W0_RAM, 2 — W0_MAP, 1 — W0_WE, бит 0 — ROM128 (то же что и бит 4 в #7FFD)

W0_RAM 0 — ROM / 1 — RAM
!W0_MAP 0 — mapped / 1 — Page0
W0_WE 0 — WP / 1 — WE (for ROM and RAM)
С его помощью возможно произвести переключение 0го окна памяти в режим read/write (обычное состояние — read only, там жеж ПЗУ спека лежит), и включить маппинг — возможность размещения других страниц памяти, а не только стандартной страницы 0.

В окне #0000 можно включить ОЗУ вместо ПЗУ с опциональным запрещением записи в этой окне.
W0_RAM = 0 — включено ПЗУ
W0_RAM = 1 — включено ОЗУ

Бит W0_WE разрешает запись для ОЗУ и программирование (сигнал WE для ПЗУ):

W0_WE = 0
W0_RAM = 0 — прошивка ПЗУ запрещена
W0_RAM = 1 — запись в ОЗУ по адресам #0000-3FFF запрещена
W0_WE = 1
W0_RAM = 0 — прошивка ПЗУ разрешена
W0_RAM = 1 — запись в ОЗУ по адресам #0000-3FFF разрешена

Бит W0_MAP задает метод выбора страницы для окна #0000.

W0_MAP = 0 — номер страницы выбирается в зависимости от текущего режима ZX (Basic 48, Basic 128, TR-DOS).
Расположение страниц: 0 — системная, 1 — TR-DOS, 2 — Бейсик 128, 3 — Бейсик 48.
Однако, при этом регистр Page0 выбирает банк из 4-х страниц, которые будут использоваться:

W0_RAM = 0 — для окна #0000 выбрано ПЗУ
Page0 = 0bxxx000xx — используются страницы 0-3,
Page0 = 0bxxx001xx — используются страницы 4-7,

Page0 = 0bxxx111xx — используются страницы 28-31.

W0_RAM = 1 — для окна #0000 выбрано ОЗУ — этот режим можно использовать для отладки прошивок без перепрограммирования ПЗУ либо тестирования нестандартных пзушек.
Page0 = 0b000000xx — используются страницы 0-3,
Page0 = 0b000001xx — используются страницы 4-7,

Page0 = 0b111111xx — используются страницы 252-255.

W0_MAP = 1 — номер страницы берется напрямую из регистра Page0 — линейный режим
W0_RAM = 0 — страницы 0-31 ПЗУ
W0_RAM = 1 — страницы 0-255 ОЗУ

Пример:
Включаем страницу #80 с адреса #8000

		ld a,#80
		ld bc,PAGE2
		out (c),a


Включаем возможность работать в странице 0

		ld bc,MemConfig
		ld a,%00001110
		out (c),a

Вуаля, пиши, размещай с 0000.

2 комментария

avatar
это касаться только tsconf или всего эво в целом?
avatar
Только тсконф. Архитектура евы по большей части обусловлена конфигурацией в ФПГА.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.