256x192 — различия между версиями

Материал из SpeccyWiki
Перейти к: навигация, поиск
м (Палитра: Исправлены перепутанные синий и красный)
 
(не показано 14 промежуточных версии 4 участников)
Строка 1: Строка 1:
'''256x192''' - условное название стандартного видеорежима [[ZX Spectrum]]. Разрешение в этом видеорежиме - 256 на 192 точек. Изображение в памяти хранится как монохромное, но возможно задание двух цветов (фона и изображения) для каждого из блоков 8x8 точек.
+
'''256x192''' условное название стандартного видеорежима [[ZX Spectrum]], позволяющего отображать графику с разрешением 256 на 192 пикселей в 15 цветах. Так как на оригинальном ZX Spectrum был только один видеорежим, он не имел названия. Обозначение ''256x192'' используется в SpeccyWiki в связи с наличием у некоторых зарубежных и отечественных клонов ZX Spectrum дополнительных видеорежимов.
  
Блок 8x8 точек принято называть знакоместом, в связи с тем, что обычно такая область связана с одним из символов. По ширине в экран умещается 32 знакоместа, по высоте - 24. В [[Sinclair BASIC]] отсчёт принято проводить сверху вниз, слева направо: самое верхнее левое знакоместо имеет координаты (x=0; y=0), самое верхнее правое - (x=31; y=0), самое нижнее левое - (x=0; y=23).
+
== Организация экрана ==
 +
Экран делится на блоки размером 8x8 пикселей. Блоки называются [[знакоместо|знакоместами]], в связи с тем, что обычно при выводе символов в одном блоке располагается один символ. Каждое знакоместо содержит монохромное изображение, цвета включенных и выключенных пикселей которого определяются атрибутом блока. Такое ограничение на использование цвета не только уменьшает объём памяти, требуемой для хранения экранной области, но также ускоряет работу с графикой за счёт меньшего объёма обрабатываемых данных. Недостатком подобной реализации цветной графики является артефакт, называемый [[клэшинг]]ом.
  
Каждая точка экрана описывается одним битом в экранной области. Восемь соседних по горизонтали точек хранятся в одном байте, при этом старший бит в байте соответствует левой точке знакоместа, младший бит - правой. Одна полная строка (256 точек) использует 32 байта экранной области. Суммарно монохромная часть занимает 6144 байт.
+
Отображаемый экран занимает не весь телевизионный растр, оставляя свободное пространство по краям. Оно называется [[бордюр]]ом. В области бордюра невозможен вывод графики, только изменение его цвета (можно получать несложные рисунки изменением цвета бордюра много раз за кадр). В отличие от основной области экрана, на бордюре не может использоваться повышенная яркость (Исключение - [[ATM Turbo|ATM-turbo]] всех версий, где для установки повышенной яркости бордюра существует отдельный порт).
  
Атрибутная часть содержит 768 байт и определяет цвета фона и изображения для каждого из знакомест. Байт атрибутов содержит в себе следующую информацию (побитово):
+
В памяти экран состоит из двух частей, имеющих различную организацию — собственно экранной области, содержащей монохромное изображение, и области атрибутов знакомест.
  
*'''D0'''..'''D2''' - три бита цвета "чернил" (INK) - установленных бит в области монохромного изображения. Возможны следующие значения:
+
=== Экранная область ===
**000 - чёрный
+
Каждому пикселю изображения в экранной области соответствует один бит. Экранная область расположена в ОЗУ компьютера по адресу #4000 (16384) и имеет размер 256*192 бит, то есть 6144 байт. Данные в экранной области имеют нелинейную организацию.
**001 - синий
+
**010 - красный
+
**011 - бордовый
+
**100 - зелёный
+
**101 - бирюзовый
+
**110 - жёлтый
+
**111 - белый
+
*'''D3'''..'''D5''' - три бита цвета "фона" (PAPER). - сброшенных бит в области монохромного изображения. Цвета кодируются аналогично INK.
+
*'''D6''' - бит яркости. При включении этого бита яркость цветов в знакоместе повышается (одновременно для INK и PAPER), кроме чёрного цвета.
+
*'''D7''' - бит мерцания (FLASH). При его включении с периодичностью раз в секунду отображаемые цвета INK и PAPER меняются местами.
+
  
Использование бита яркости вместе с битами цвета INK и PAPER позволяет отображать на экране до 15 цветов (так как чёрный цвет не меняет яркость).
+
Каждый байт изображения содержит горизонтальную линию из 8 следующих друг за другом пикселей. Старший бит содержит состояние крайнего левого пикселя. Строка изображения представлена последовательностью из 32 байт (слева направо). Экран делится на три одинаковых области размером 256x64 пикселя (2048 байт) — так называемые ''трети''. Они имеют одинаковую организацию и расположены в памяти друг за другом. В пределах одной трети в памяти хранятся сначала верхние линии всех знакомест (слева направо, сверху вниз), потом вторые сверху линии, и так далее.
  
В памяти экран начинается с адреса #4000 (16384 десятичное)
+
Биты адреса в экранной области имеют следующее значение:
  
Экранная область памяти нелинейна - она описывается черезполосно по третям.
+
{| class="standard"
Первые 32 байта (адреса #4000-#401F) описывают верхние 256 точек экрана - вехние части знакомест (x=0..31; y=0).
+
|-
Следующие 32 байт (адреса #4020-#403F) описывает верхние 256 точек знакомест (x=0..31; y=1)
+
|A15
Адреса #40E0-#40FF описывают верхние 256 точек знакомест (x=0..31; y=7).
+
|A14
Следующие адреса (#4100-41FF)описывают вторые сверху линии точек знакомест (x=0..31; y=0..7)
+
|A13
Полностью верхняя треть экрана описывается в указанном порядке адресами #4000-#47FF (знакоместа x=0..31; y=0..7)
+
|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
 +
|-
 +
|}
  
Вторая (#4800-#4FFF)и третья (#5000-#57FF) треть экрана описываются таким же способом.
+
*010 — адрес #4000, начало экранной области
 +
*TT — номер трети (0..2)
 +
*SSS — номер строки знакомест
 +
*CCC — номер линии внутри знакоместа
  
Следом идёт атрибутная область (#5800-#5AFF) - она имеет линейную структуру - слева направо и сверху вниз.
+
Подобная организация экрана, несмотря на кажущуюся неоптимальность, имеет ряд преимуществ по сравнению с линейной. Так, для перехода к предыдущей или следующей строке пикселей в пределах знакоместа достаточно изменить старший байт адреса, а для перехода к предыдущему или следующему знакоместу — изменить младший байт адреса. Эти операции могут быть выполнены быстрыми командами инкремента или декремента регистра, занимающими 4 такта процессора (минимально возможная длительность команды). Переход к предыдущей или следующей строке знакомест в пределах трети может быть выполнен прибавлением или вычитанием значения #20 (32).
  
Вывод картинки на экран телевизора происходит с частотой в 50 Герц генератором видеоизображения.
+
Для перехода между третями требуется коррекция адреса. Часто используемая в программах процедура перехода к следующей пиксельной строке, с учётом переходов между строками знакомест и третями экрана, получила название [[DOWN HL]]. Также существует аналогичная процедура для перехода к предыдущей строке, [[UP HL]].
  
Каждое знакоместо луч развёртки проходит 8 раз - сверху вниз по пиксельной линии. При каждом проходе содержимое атрибутной области читается заново. После первого прохода луча по знакоместу, содержимое атрибутной части может быть изменено. Это приведёт к тому, что при повторном проходе луча будут использованы другие, нежели в предыдущий раз, цвета. Таким образом, быстро изменяя содержимое атрибутной области, можно получить знакоместо, в котором атрибутами будут задаваться цвета отдельной полоски точек 1x8. Этот эффект получил название [[Multicolor]]. Иногда используется в различных программах, например в [[Demo]], играх и т.д.
+
=== Область атрибутов ===
 +
Область атрибутов начинается сразу после экранной области, по адресу #5800 (22528), и имеет размер 768 байт. В отличии от экранной области, атрибуты хранятся линейно — слева направо и сверху вниз, начиная с верхнего левого знакоместа. Атрибут каждого знакоместа представляет собой один байт, биты которого имеют следующее назначение:
 +
 
 +
*'''D0'''..'''D2''' - цвет "чернил" (INK)
 +
*'''D3'''..'''D5''' - цвет "бумаги" (PAPER)
 +
*'''D6''' - бит яркости (BRIGHT)
 +
*'''D7''' - бит мерцания (FLASH)
 +
 
 +
Установленные биты экранной области отображаются цветом INK, сброшенные — цветом PAPER. При установленном бите яркости INK и PAPER отображаются с повышенной яркостью. В пределах одного знакоместа INK и PAPER не могут иметь разную яркость. При установленном бите мерцания отображаемые цвета меняются с некоторой частотой, приблизительно раз в секунду.
 +
 
 +
Младший байт адреса верхней строки каждого знакоместа в экранной области совпадает с младшим байтом адреса соответствующего атрибута.
 +
 
 +
В процессе генерации изображения видеоконтроллер читает атрибут знакоместа 8 раз, при каждом проходе луча развёртки по строкам, входящим в знакоместо. Если за время между проходами луча атрибут знакоместа будет изменён, следующая строка знакоместа будет отображена с новым атрибутом. Это позволяет программно обойти ограничение на количество используемых цветов в знакоместе. Эффекты, использующие эту идею, называются [[мультиколор]] и применяются в некоторых программах.
 +
 
 +
=== Палитра ===
 +
Возможно отображение 8 разных цветов в двух градациях яркости, при этом чёрный цвет не может иметь повышенную яркость. Таким образом, доступно только 15 цветов. На некоторых отечественных клонах чёрный цвет может отображаться с повышенной яркостью, что приводит к неправильному отображению цвета - появлению серых квадратов в знакоместах с повышенной яркостью и чёрным фоном.
 +
 
 +
{| class="standard"
 +
|B0
 +
|B1
 +
|Номер
 +
|Двоичный код
 +
|Русское название
 +
|Английское название
 +
|-
 +
|bgcolor=#000000|
 +
|bgcolor=#000000|
 +
|0
 +
|000
 +
|Чёрный
 +
|Black
 +
|-
 +
|bgcolor=#0000c0|
 +
|bgcolor=#0000ff|
 +
|1
 +
|001
 +
|Синий
 +
|Blue
 +
|-
 +
|bgcolor=#c00000|
 +
|bgcolor=#ff0000|
 +
|2
 +
|010
 +
|Красный
 +
|Red
 +
|-
 +
|bgcolor=#c000c0|
 +
|bgcolor=#ff00ff|
 +
|3
 +
|011
 +
|Пурпурный
 +
|Magenta
 +
|-
 +
|bgcolor=#00c000|
 +
|bgcolor=#00ff00|
 +
|4
 +
|100
 +
|Зелёный
 +
|Green
 +
|-
 +
|bgcolor=#00c0c0|
 +
|bgcolor=#00ffff|
 +
|5
 +
|101
 +
|Голубой
 +
|Cyan
 +
|-
 +
|bgcolor=#c0c000|
 +
|bgcolor=#ffff00|
 +
|6
 +
|110
 +
|Жёлтый
 +
|Yellow
 +
|-
 +
|bgcolor=#c0c0c0|
 +
|bgcolor=#ffffff|
 +
|7
 +
|111
 +
|Белый
 +
|White
 +
|}
 +
 
 +
== ZX Spectrum 128K ==
 +
В [[ZX Spectrum 128K]] стандартный видеорежим был дополнен возможностью использования второй экранной области - так называемого ''теневого экрана''. Основная область находится в 5 банке ОЗУ, дополнительная - в 7 банке. 5 банк всегда доступен по адресу #4000. С помощью разрядов '''D0'''..'''D2''' порта [[Порт 7FFD|#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|ATM Turbo]] ===
 +
*Тактов в строке: 224
 +
*Строк в кадре: 312
 +
*Строк перед началом растра: 64
  
Экран занимает не весь телевизионный растр, только центральную его часть. Остальная часть называется [[бордюр]]ом, возможно изменение его цвета (без повышенной яркости).
 
  
 
[[Категория:Видеорежимы]]
 
[[Категория:Видеорежимы]]

Текущая версия на 20:07, 19 апреля 2017

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