256x192

Материал из SpeccyWiki
Версия от 23:07, 19 апреля 2017; Ungzd (обсуждение | вклад)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

256x192 — условное название стандартного видеорежима ZX Spectrum, позволяющего отображать графику с разрешением 256 на 192 пикселей в 15 цветах. Так как на оригинальном ZX Spectrum был только один видеорежим, он не имел названия. Обозначение 256x192 используется в SpeccyWiki в связи с наличием у некоторых зарубежных и отечественных клонов ZX Spectrum дополнительных видеорежимов.

Организация экрана

Экран делится на блоки размером 8x8 пикселей. Блоки называются знакоместами, в связи с тем, что обычно при выводе символов в одном блоке располагается один символ. Каждое знакоместо содержит монохромное изображение, цвета включенных и выключенных пикселей которого определяются атрибутом блока. Такое ограничение на использование цвета не только уменьшает объём памяти, требуемой для хранения экранной области, но также ускоряет работу с графикой за счёт меньшего объёма обрабатываемых данных. Недостатком подобной реализации цветной графики является артефакт, называемый клэшингом.

Отображаемый экран занимает не весь телевизионный растр, оставляя свободное пространство по краям. Оно называется бордюром. В области бордюра невозможен вывод графики, только изменение его цвета (можно получать несложные рисунки изменением цвета бордюра много раз за кадр). В отличие от основной области экрана, на бордюре не может использоваться повышенная яркость (Исключение - ATM-turbo всех версий, где для установки повышенной яркости бордюра существует отдельный порт).

В памяти экран состоит из двух частей, имеющих различную организацию — собственно экранной области, содержащей монохромное изображение, и области атрибутов знакомест.

Экранная область

Каждому пикселю изображения в экранной области соответствует один бит. Экранная область расположена в ОЗУ компьютера по адресу #4000 (16384) и имеет размер 256*192 бит, то есть 6144 байт. Данные в экранной области имеют нелинейную организацию.

Каждый байт изображения содержит горизонтальную линию из 8 следующих друг за другом пикселей. Старший бит содержит состояние крайнего левого пикселя. Строка изображения представлена последовательностью из 32 байт (слева направо). Экран делится на три одинаковых области размером 256x64 пикселя (2048 байт) — так называемые трети. Они имеют одинаковую организацию и расположены в памяти друг за другом. В пределах одной трети в памяти хранятся сначала верхние линии всех знакомест (слева направо, сверху вниз), потом вторые сверху линии, и так далее.

Биты адреса в экранной области имеют следующее значение:

A15 A14 A13 A12 A11 A10 A9 A8 A7 A6 A5 A4 A3 A2 A1 A0
0 1 0 T T S S S C C C H H H H H
  • 010 — адрес #4000, начало экранной области
  • TT — номер трети (0..2)
  • SSS — номер строки знакомест
  • CCC — номер линии внутри знакоместа

Подобная организация экрана, несмотря на кажущуюся неоптимальность, имеет ряд преимуществ по сравнению с линейной. Так, для перехода к предыдущей или следующей строке пикселей в пределах знакоместа достаточно изменить старший байт адреса, а для перехода к предыдущему или следующему знакоместу — изменить младший байт адреса. Эти операции могут быть выполнены быстрыми командами инкремента или декремента регистра, занимающими 4 такта процессора (минимально возможная длительность команды). Переход к предыдущей или следующей строке знакомест в пределах трети может быть выполнен прибавлением или вычитанием значения #20 (32).

Для перехода между третями требуется коррекция адреса. Часто используемая в программах процедура перехода к следующей пиксельной строке, с учётом переходов между строками знакомест и третями экрана, получила название DOWN HL. Также существует аналогичная процедура для перехода к предыдущей строке, UP HL.

Область атрибутов

Область атрибутов начинается сразу после экранной области, по адресу #5800 (22528), и имеет размер 768 байт. В отличии от экранной области, атрибуты хранятся линейно — слева направо и сверху вниз, начиная с верхнего левого знакоместа. Атрибут каждого знакоместа представляет собой один байт, биты которого имеют следующее назначение:

  • D0..D2 - цвет "чернил" (INK)
  • D3..D5 - цвет "бумаги" (PAPER)
  • D6 - бит яркости (BRIGHT)
  • D7 - бит мерцания (FLASH)

Установленные биты экранной области отображаются цветом INK, сброшенные — цветом PAPER. При установленном бите яркости INK и PAPER отображаются с повышенной яркостью. В пределах одного знакоместа INK и PAPER не могут иметь разную яркость. При установленном бите мерцания отображаемые цвета меняются с некоторой частотой, приблизительно раз в секунду.

Младший байт адреса верхней строки каждого знакоместа в экранной области совпадает с младшим байтом адреса соответствующего атрибута.

В процессе генерации изображения видеоконтроллер читает атрибут знакоместа 8 раз, при каждом проходе луча развёртки по строкам, входящим в знакоместо. Если за время между проходами луча атрибут знакоместа будет изменён, следующая строка знакоместа будет отображена с новым атрибутом. Это позволяет программно обойти ограничение на количество используемых цветов в знакоместе. Эффекты, использующие эту идею, называются мультиколор и применяются в некоторых программах.

Палитра

Возможно отображение 8 разных цветов в двух градациях яркости, при этом чёрный цвет не может иметь повышенную яркость. Таким образом, доступно только 15 цветов. На некоторых отечественных клонах чёрный цвет может отображаться с повышенной яркостью, что приводит к неправильному отображению цвета - появлению серых квадратов в знакоместах с повышенной яркостью и чёрным фоном.

B0 B1 Номер Двоичный код Русское название Английское название
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 128K

В ZX Spectrum 128K стандартный видеорежим был дополнен возможностью использования второй экранной области - так называемого теневого экрана. Основная область находится в 5 банке ОЗУ, дополнительная - в 7 банке. 5 банк всегда доступен по адресу #4000. С помощью разрядов D0..D2 порта #7FFD любой банк также может быть включён в окно в верхних 16 КБ памяти (с адреса #C000), что позволяет работать с памятью экранных областей в одинаковых адресах. Отображаемая экранная область выбирается разрядом D3 порта #7FFD.

Дополнительная экранная область может быть использована для маскировки процесса перерисовки экрана или для реализации различных видеоэффектов — например, программных видеорежимов.

Тайминги

ZX Spectrum 48K

  • Частота процессора: 3500000 Гц
  • Тактов в строке: 224
  • Строк в кадре: 312
  • Строк перед началом растра: 64
  • Частота кадров: 50.08 Гц

ZX Spectrum 128K

  • Частота процессора: 3546900 Гц
  • Тактов в строке: 228
  • Строк в кадре: 311
  • Строк перед началом растра: 63
  • Частота кадров: 50.01 Гц

Pentagon 48K

  • Частота процессора: 3.5 МГц (при кварце на 14 МГц, указанном на схеме)
  • Тактов в строке: 224
  • Строк в кадре: 320
  • Строк перед началом растра: 80
  • Частота строк: 15.625 кГц
  • Частота кадров: 48.828 Гц

Pentagon 128K

  • Частота процессора: 3.575 МГц (при кварце на 14.3 МГц, указанном на схеме; ближайшие номиналы - 14286 и 14318 кГц)
  • Тактов в строке: 224
  • Строк в кадре: 320
  • Строк перед началом растра: 80
  • Частота строк: 15.96 кГц
  • Частота кадров: 49.87 Гц

Scorpion

  • Тактов в строке: 224
  • Строк в кадре: 312
  • Строк перед началом растра: 64

ATM Turbo

  • Тактов в строке: 224
  • Строк в кадре: 312
  • Строк перед началом растра: 64