256x192 — различия между версиями
Zxdn (обсуждение | вклад) |
Zxdn (обсуждение | вклад) (→Экранная область) |
||
Строка 60: | Строка 60: | ||
Подобная организация экрана, несмотря на кажущуюся неоптимальность, имеет ряд преимуществ по сравнению с линейной. Так, для перехода к предыдущей или следующей строке пикселей в пределах знакоместа достаточно изменить старший байт адреса, а для перехода к предыдущему или следующему знакоместу — изменить младший байт адреса. Эти операции могут быть выполнены быстрыми командами инкремента или декремента регистра, занимающими 4 такта процессора (минимально возможная длительность команды). Переход к предыдущей или следующей строке знакомест в пределах трети может быть выполнен прибавлением или вычитанием значения #20 (32). | Подобная организация экрана, несмотря на кажущуюся неоптимальность, имеет ряд преимуществ по сравнению с линейной. Так, для перехода к предыдущей или следующей строке пикселей в пределах знакоместа достаточно изменить старший байт адреса, а для перехода к предыдущему или следующему знакоместу — изменить младший байт адреса. Эти операции могут быть выполнены быстрыми командами инкремента или декремента регистра, занимающими 4 такта процессора (минимально возможная длительность команды). Переход к предыдущей или следующей строке знакомест в пределах трети может быть выполнен прибавлением или вычитанием значения #20 (32). | ||
− | Для перехода между третями требуется коррекция адреса. Часто используемая в программах процедура перехода к следующей пиксельной строке, с учётом переходов между строками знакомест и третями экрана, получила название [ | + | Для перехода между третями требуется коррекция адреса. Часто используемая в программах процедура перехода к следующей пиксельной строке, с учётом переходов между строками знакомест и третями экрана, получила название [[DOWN HL]]. Также существует аналогичная процедура для перехода к предыдущей строке, [[UP HL]]. |
=== Область атрибутов === | === Область атрибутов === |
Версия 12:57, 30 июля 2012
256x192 — условное название стандартного видеорежима ZX Spectrum, позволяющего отображать графику с разрешением 256 на 192 пикселей в 15 цветах. Так как на оригинальном ZX Spectrum был только один видеорежим, он не имел названия. Обозначение 256x192 используется в SpeccyWiki в связи с наличием у некоторых зарубежных и отечественных клонов ZX Spectrum дополнительных видеорежимов.
Содержание
Организация экрана
Экран делится на блоки размером 8x8 пикселей. Блоки называются знакоместами, в связи с тем, что обычно при выводе символов в одном блоке располагается один символ. Каждое знакоместо содержит монохромное изображение, цвета включенных и выключенных пикселей которого определяются атрибутом блока. Такое ограничение на использование цвета не только уменьшает объём памяти, требуемой для хранения экранной области, но также ускоряет работу с графикой за счёт меньшего объёма обрабатываемых данных. Недостатком подобной реализации цветной графики является артефакт, называемый клэшингом.
Отображаемый экран занимает не весь телевизионный растр, оставляя свободное пространство по краям. Оно называется бордюром. В области бордюра невозможен вывод графики, только изменение его цвета (можно получать несложные рисунки изменением цвета бордюра много раз за кадр). В отличие от основной области экрана, на бордюре не может использоваться повышенная яркость.
В памяти экран состоит из двух частей, имеющих различную организацию — собственно экранной области, содержащей монохромное изображение, и области атрибутов знакомест.
Экранная область
Каждому пикселю изображения в экранной области соответствует один бит. Экранная область расположена в ОЗУ компьютера по адресу #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