TSconf: Memory
Рассмотрим расположение памяти в системе.
ZX Evolution имеет 4Мб памяти.
Организация этой памяти подобна zx spectrum 128 — используется страничная организация.
В переложении на страницы памяти, мы имеем 256 страниц по 16 кб каждая.
Приведённая выше картинка описывает, как организована память спектрума. В TSconf использована подобная система, но несколько расширена — мы имеем возможность размещать страницы не только с адреса #c000:
Запись в порт переключает страницу в нужном нам окне.
Для использования страничной системы с адреса #0000 нужно использовать порт MemConfig (#21af):
В окне #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
Включаем возможность работать в странице 0
Вуаля, пиши, размещай с 0000.
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:С его помощью возможно произвести переключение 0го окна памяти в режим read/write (обычное состояние — read only, там жеж ПЗУ спека лежит), и включить маппинг — возможность размещения других страниц памяти, а не только стандартной страницы 0.
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)
В окне #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 комментария