Важная информация
RSS лента

Raider

Нелинейная адресация видеопамяти ZX Spectrum

Оценить эту запись
v.1.0. черновая.

Почему экран ZX Spectrum устроен так необычно? Казалось бы, линейный экран намного проще?

Для ответа рассмотрим ZX Spectrum 16K. Контроллеру дисплея требуется считывать сразу два байта подряд (На самом деле он считывает в burst’е 2+2 байт, но для объяснения это несущественно). Сначала считывается байт атрибутов, затем байт пиксельных данных . Адрес приходится выставлять дважды: адрес атрибутов и адрес пикселей.

Объем DRAM 4116 составляет 16кбит или 14 бит. 14 битный адрес мультиплексирован по 7+7 бит и выставляется во времени раздельно, двумя частями. Сначала выставляются младшие 7 бит адреса, сопровождаемые сигналом RAS (row address strobe), при этом микросхема запоминает эту часть адреса внутри. Затем выставляются старшие 7 бит адреса, сопровождаемые сигналом CAS (column address strobe). При этом передача первой и второй части адреса в цикле RAS-CAS требует определённого времени, это важно.

Микросхема DRAM 4116 является одной из первых микросхем PM (page mode) со страничной адресацией. Она позволяет выставлять только одну часть (7 bit) мультиплексированного адреса, оставляя предшествующую часть (выставленную RAS) неизменной. Это работает быстрее, так как не требуется каждый раз посылать обе части адреса. Вместо двух циклов RAS-CAS для передачи полного 7+7 бит адреса остаётся только один цикл CAS. В терминологии PM микросхем DRAM такая ситуация называется страничный доступ.

Теперь вспомним, Z80 разделяет время с контроллером дисплея, и чем быстрее будет цикл чтения контроллера дисплея, тем меньше времени будет простаивать Z80. Ситуация на самом деле хуже, так как если бы чтение выполнялось 4мя циклами RAS-CAS-RAS-CAS, Z80 пришлось бы остановить на всё время чтения строки дисплея. Поэтому Ричарду Альтвассеру пришла мысль использовать страничный доступ 4116 и пере-использовать часть адреса контроллера дисплея. В этом заключается ещё одна маленькая хитрость устройства ZX Spectrum.

Когда контроллер дисплея считывает два байта, адрес байта атрибутов выставляется полный, 14 бит двумя циклами по 7 бит RAS-CAS. Чтение байта пикселей выполняется сразу вслед за этим в страничном режиме, одним циклом CAS. При этом выставляются только старшие 7 бит адреса, младшие 7 бит используются от атрибутов. Тем самым вместо долгого цикла из RAS-CAS-RAS-CAS происходит более короткий цикл RAS-CAS-CAS.
Это и есть ответ на загадку дисплея ZX Spectrum. Из-за ускорения чтения циклом RAS-CAS-CAS по 7+7+7 бит адреса, и из-за того что адрес пикселей использует часть адреса атрибутов, биты адреса пришлось разделить, перегруппировать и отсылать частями.

Рассмотрим, как именно.
Счётчик контроллера экрана условно представлен битами:
v7,v6,v5,v4,v3,v2,v1,v0,c4,c3,c2,c1,c0
где v – 8 битов vertical, пересчитывающих 0..191, c- 5 битов column, пересчитывающих 0..31. С column-частью адреса всё в порядке, перемешивание идёт с v-битами.

В микросхемы DRAM адрес отсылается по 7 бит, сначала сопровождаемые RAS-стробом идут 7 младших бит адреса атрибутов: [v4,v3,c4,c3,c2,c1,c0] – при этом биты v2,v1,v0 счётчика пиксельной строки пропущены.

Затем, по CAS-стробу передаются оставшиеся старшие биты адреса:
[0,1,1,0,v7,v6,v5] – 7 старших бит адреса атрибутов.
Отметим, что биты счётчика v7-v5 следуют за битами v4-v3, продолжая их, т.е. адрес атрибутов линейный. Биты 0,1,1,0 заданы аппаратно. После этого будет прочитан байт атрибутов.

Затем, по CAS-стробу в страничном режиме должны быть переданы 7 бит старшей части пиксельного адреса.
[0,v7,v6,v2,v1,v0,v5] – какова логика такой расстановки битов? Младшая часть пиксельного адреса используется от адреса атрибутов, переданного по RAS. Биты счётчика адреса v4-v3 мы уже передали, значит, следующий бит v5. Далее следуют биты v2,v1,v0, v7,v6 и аппаратный бит 0.

Выставим обе части 7+7 бит пиксельного адреса в ряд:
0,v7,v6,v2,v1,v0,v5,v4,v3,c4,c3,c2,c1,c0.

Разобъём на две группы по 8 бит, также как биты сгруппированы в регистрах микропроцессора z80:
[0,1,0,v7,v6,v2,v1,v0] [v5,v4,v3,c4,c3,c2,c1,c0]

Наблюдаем знакомую картину экранного адреса. Остаётся открытым вопрос – единственный ли это способ группировки бит? Для видеоконтроллера адресация байт в памяти не особо важна. Однако логическая группировка бит адреса для конкретного микропроцессора может либо хорошо совпадать с его архитектурой, либо вызывать затруднения. При проектировании ZX Spectrum (рабочее название ZX82) учитывался опыт предыдущих продуктов Sinclair ZX81, ZX80, имевших дисплей 32 символа по 24 строки. В итоге остановились на наиболее удобной аранжировке бит для программного отображения одного символа, когда для того чтобы переходить к следующей строке достаточно инкрементировать старшую половину адреса. Заметим, что в продуктах ZX80, ZX81 дисплей отображался программно, при помощи Z80, поэтому вопрос производительности был, конечно, понятен. Вот почему, в конечном итоге, ZX Spectrum имеет такую организацию экрана. Исходная причина перестановки бит вызвана требованиями hardware. Но сама аранжировка бит, такая, а не иначе – задана требования software. Замечательная работа инженеров!

Использованная литература: Chris Smith "The ZX Spectrum ULA: How To Design A Microcomputer".
Метки: display, dram, ula, zx spectrum Добавить / редактировать метки
Категории
Без категории

Комментарии

Трекбэков