Видеорежимы ZX Spectrum
Домашний компьютер ZX Spectrum имеет более ограниченные графические возможности, по сравнению с другими микрокомпьютерами того же времени (такими как Commodore 64), в основном, по причине отсутствия у него отдельного графического чипа. Тем не менее, за несколько лет выпуска коммерческих игр и затем активности демосцены, было разработано несколько способов улучшить графические возможности ZX Spectrum.
Палитра
Графические режимы ZX Spectrum и совместимых с ним компьютеров опираются на концепцию 4-битной RGBI-палитры. Её можно рассматривать как 3-битную палитру плюс бит градации яркости. Яркость черного цвета присутствовала не во всех моделях ZX Spectrum и эмуляторах ZX Spectrum (например в некоторых эмуляторах (EmuZWin, ZX Fuse) возможно настроить желательный уровень обычного и яркого цветов, в том числе и черного (также не во всех эмуляторах присутствует яркий синий цвет)). Также на различных моделях было два типа палитры: привязанная к чёрному и белому цветам и не привязанная к ним.
Яркость 0 | Яркость 1 | Номер | Двоичный код | Русское название | Английское название |
---|---|---|---|---|---|
0 | 000 | Чёрный | Black | ||
1 | 001 | Синий | Blue | ||
2 | 010 | Красный | Red | ||
3 | 011 | Пурпурный | Magenta | ||
4 | 100 | Зелёный | Green | ||
5 | 101 | Голубой | Cyan | ||
6 | 110 | Жёлтый | Yellow | ||
7 | 111 | Белый | White |
Стандартный режим
Единственным штатным видеорежимом оригинального ZX Spectrum является графический режим разрешением 256×192 точки, ограниченные возможности задания цвета и бордюр. Доступна только одна видеостраница, расположенная в основной памяти компьютера по фиксированному адресу. Информация о цвете задаётся атрибутами, по одному байту атрибутов на знакоместо 8×8 пикселей. Из-за такого способа задания цвета, часто проявлял себя такой эффект как конфликт атрибутов.
Отображаемый экран занимает не весь телевизионный растр, оставляя свободное пространство по краям — бордюр. В области бордюра невозможен вывод графики, только изменение его цвета (можно получать несложные рисунки изменением цвета бордюра много раз за кадр). В отличие от основной области экрана, на бордюре не может использоваться повышенная яркость.
Область пикселей занимает адресное пространство #4000 - #57FF, а область атрибутов #5800 - #5AFF. В свою очередь, область пикселей разбита на 3 части по 64 строки. Строение каждой трети одинаковое:
Строки выводятся в следующем порядке (отсчёт от нуля):
0, 8, 16, 24, 32, 40, 48, 56,
1, 9, 17, 25, 33, 41, 49, 57,
...
7, 15, 23, 31, 39, 47, 55, 63
Каждая строка состоит из 32 последовательных байт, каждый бит которого представляет одну точку на экране.
Такое строение экрана сделано специально для удобства вычисления адреса цветного атрибута для выбранного знакоместа, т.к. один атрибут занимает целое знакоместо, все 8 строк в нём.
В ZX Spectrum 128K стандартный видеорежим был дополнен возможностью использования второй экранной области — так называемого теневого экрана. Основная область находится в 5 банке ОЗУ, дополнительная — в 7 банке.
Мультиколор
Мультиколор (англ. multicolor) — программный трюк, позволяющий обойти ограничение стандартного видеорежима ZX Spectrum на количество одновременно отображаемых в одном знакоместе цветов. Условно говоря, мультиколор позволяет уменьшить высоту знакоместа, вплоть до одной точки (свой атрибут для блоков пикселей 8×1, 8×2, 8×4 и т. п.).
Логика работы видеоконтроллера такова, что при проходе луча развёртки по каждой строке растра в основной области экрана происходит чтение атрибутов знакомест. То есть, при построении растра атрибут каждого знакоместа экрана читается видеоконтроллером восемь раз — по числу строк пикселей в знакоместе. Если атрибуты будут изменены между проходами луча, это приведёт к использованию для текущей отображаемой строки новых значений. Таким образом, вовремя изменяя содержимое атрибутной области экрана, можно задавать цвета для полосок 8×1 точек вместо обычных блоков 8×8.
Мультиколор 8×4 также может быть реализован с помощью теневого экрана ZX Spectrum 128K — все атрибуты обычного и теневого экрана могут быть установлены в начале кадра, далее в процессе прохода луча по растру каждые 4 строки нужно переключать видимый экран.
Аппаратный мультиколор
Аппаратный мультиколор (англ. hardware multicolor либо Hicolour) — условное название дополнительного видеорежима для ZX Spectrum. Его возможности аналогичны программному мультиколору 8×1, но реализованы аппаратно, что позволяет использовать ресурсы процессора для других задач.
В этом видеорежиме область атрибутов переносится в адресное пространство #6000 - #77FF параллельное экранной области, находящемся в адресах #4000 - #57FF.
Видеорежим штатно присутствует в компьютерах Timex Computer 2048 и Timex Sinclair 2068, а также реализован в виде доработок для Pentagon и других отечественных компьютеров.
GigaScreen
GigaScreen — режим, при котором два специально подготовленных изображения часто сменяют друг друга на экране. За счёт инертности восприятия изображения глазом, два изображения сливаются, и тем самым, за счёт наложения цветов, палитра увеличивается до 102 цветов.
Для ZX Spectrum 48K использование полноэкранного Gigasreen возможно за счёт обновления атрибутной части экранной области памяти. На ZX Spectrum 128K для тех же целей задействуют теневой экран. Аппаратно режим не реализован.
Аппаратный GigaScreen
Аппаратный GigaScreen - аппаратная реализация видеорежима, призванная уменьшить мерцание результирующего изображения на экране, вызванное тем, что оба изображения сменяют друг друга по кадрам.
Существует как минимум две модификации видеорежима:
- Оба изображения сменяют друг друга по строкам. При этом от кадра к кадру изменяется фаза переключения изображений. На практике мерцание изображения действительно значительно меньше, но появляется полосатость изображения;
- Оба изображения сменяют друг друга по знакоместам (через каждые 8 точек). При этом фаза переключения меняется от строки к строке и от кадра к кадру.
MultiGigaScreen
MultiGigaScreen — режим, объединяющий в себе возможности GigaScreen и мультиколор. Таким образом для атрибутов 8×1, 8×2, 8×4 и т. п. появляется возможность задать до 4 цветов из палитры в 102 цвета.
Триколор
Триколор — программно реализуемый видеорежим, при котором каждой точке можно назначить один из 8 цветов, яркость задаётся по знакоместам. Идея аналогична Gigascreen, но используется ресурсоёмкий переброс кадров из памяти, совместимый с 48kB моделью спекки. Три перебрасываемых по очереди кадра — для красного, зелёного и синего цвета RGB Частота мерцания составляет 16,6 Гц, что уже очень заметно визуально.
Flash-color
Флэш-колор — режим, основанный на подачу частоты 7 МГц скважностью 75% вместо 1,5 Гц на сигнал мерцания flash. При этом при выводе каждого пикселя на экран подается цвет ink, затем цвет paper. Действует в знакоместах, для которых установлен бит мерцания в байте атрибутов. Путём аппаратной доработки фон делается чёрным, а для цвета чернил используются оставшиеся 7 бит, предоставляющие 128 цветов. Скважность 75% для сигнала 7 МГц нужна для того, чтобы получить дополнительные цветовые оттенки путём перемены цвета ink и paper местами.
512×192
Монохромный режим высокого разрешения, реализованный в компьютерах Timex Sinclair 2068, Байт, Pentagon, и некоторых других клонах. В основном используется для текстовых режимов 64×24 и 80×24, в частности, для работы в операционной системе CP/M.
В этом видеорежиме каждый первый байт экранной области выводится из своего старого адресного пространства #4000 – #57FF, а каждый второй байт — из параллельной области #6000 – #77FF.
В компьютере SAM Coupé реализован режим Mode 3, 512×192 точек, 4 цвета на точку из палитры в 128 цветов. В этом режиме используются символы шириной 6 пикселей для получения 85 символов в строке.
Существует ещё одна разработка цветного варианта видеорежима 512×192 для отечественных ZX-Spectrum-компьютеров с турбированным ОЗУ. В этом варианте, аналогично как для пикселей, стандартный цветной атрибут для каждого первого знакоместа 8×8 находится в своём старом адресном пространстве #5800 – #5AFF, а для каждого второго — в параллельной области #7800 – #7AFF. Кроме этого, данная разработка включает мультиколорный вариант видеорежима 512×192, при котором атрибуты цвета задаются для блока 8×1 пикселей. В этом варианте обе области атрибутов переносятся в 4-ю страницу ОЗУ и занимают адреса #C000 – #D7FF для чётных знакомест, и адреса #E000 – #F7FF для нечётных.
384×304
Аппаратная доработка для Pentagon, реализующая дополнительный видеорежим с разрешением 384×304 точки[1]. При этом масштаб изображения не изменяется, дополнительная информация выводится в той области, где в штатном видеорежиме отображается бордюр. Ограничения на использование цвета аналогичны стандартному видеорежиму.
16Colors
Аппаратная доработка, при которой каждая точка отображается своим цветом. В этом видеорежиме один байт описывает два соседних пикселя следующим образом:
0-й – 2-й биты — B,R и G цвета первого пикселя;
3-й – 5-й биты — B,R и G цвета второго пикселя;
6-й бит — яркость первого пикселя;
7-й бит — яркость второго пикселя.
Соответственно, для вывода 8 пикселей на экран, видеоконтроллер ZX-Spectrum должен прочитать из памяти 4 байта из 4 разных экранных областей ОЗУ. Т.к. стандартная тактовая частота ОЗУ в ZX-Spectrum равна тактовой частоте процессора 3,5 МГц, то за время вывода 8 пикселей ОЗУ предоставляет всего 4 цикла доступа. Таким образом, для процессора уже не остаётся свободных циклов, поэтому он полностью останавливается на время вывода экранной области, и продолжает свою работу только во время вывода бордюрной области и обратного хода развёрток.
Итак, каждые 8 пикселей выводятся из следующих 4 экранных областей в следующем порядке:
1) - адреса #C000 - #D7FF 4-й страницы;
2) - адреса #C000 - #D7FF 5-й страницы (#4000 - #57FF);
3) - адреса #E000 - #F7FF 4-й страницы;
4) - адреса #E000 - #F7FF 5-й страницы (#6000 - #77FF).
Существует модификация видеорежима ''16Colors'' для компьютеров ZX-Spectrum с турбированной памятью, работающей на частоте 7 МГц. В таких компьютерах за то же время ОЗУ предоставляет 8 циклов доступа, чего хватает и для видеорежима и для турбированного процессора. В этом варианте процессор не останавливается во время вывода экранной области.
ULAplus
ULAplus, ULA64 — проект замены оригинального чипа ULA ZX Spectrum 48K. Новый чип, повыводно совместимый с оригиналом, позволяет использовать на экране до 64 цветов из палитры в 256 цветов. Идея состоит в том, чтобы биты яркости и мерцания выбирали одну из четырёх палитр, содержащих по 8 цветов INK и PAPER, задаваемых программно[2][3]. Чип так и не был выпущен, но поддержка соответствующего режима присутствует в нескольких эмуляторах.
Примечания
- Contact v2.06 — схема доработки 384×304 и программирование, статья из газеты AlCo News #32 (2004)
- ZX Spectrum 64 Colour Mode — Scratchpad Wiki Labs
- ULAplus
Ссылки
- ZX-Spectrum graphics modes (англ.)
- ZX Spectrum extra graphics modes (англ.)
- Видеорежимы (рус.) на SpeccyWiki
- Коллекция графики ZX-Spectrum (рус.)
- архив пиксельной графики и восьмибитной музыки ZX Spectrum