256x192 — различия между версиями
Zxdn (обсуждение | вклад) |
Zxdn (обсуждение | вклад) (статья написана заново) |
||
Строка 1: | Строка 1: | ||
− | '''256x192''' - условное название стандартного видеорежима [[ZX Spectrum]] | + | '''256x192''' - условное название стандартного видеорежима [[ZX Spectrum]], позволяющего отображать графику с разрешением 256 на 192 точек в 15 цветах. |
− | + | == Организация экрана == | |
+ | Экран делится на блоки размером 8x8 точек. Каждый блок содержит монохромное изображение, цвета включенных и выключенных точек которого определяются атрибутом блока. Блоки называются [[знакоместо|знакоместами]], в связи с тем, что обычно при выводе символов в одном блоке располагается один символ. | ||
− | + | Отображаемый экран занимает не весь телевизионный растр, оставляя свободное пространство по краям. Оно называется [[бордюр]]ом. В области бордюра невозможен вывод графики, только изменение его цвета. В отличии от основной области экрана, на бордюре не может использоваться повышенная яркость. | |
− | + | В памяти экран состоит из двух частей, имеющих различную организацию - собственно экранной области, содержащей монохромное изображение, и области атрибутов знакомест. | |
− | + | === Экранная область === | |
− | + | Каждой точке изображения в экранной области соответствует один бит. Экранная область расположена в ОЗУ компьютера по адресу #4000 (16384) и имеет размер 256*192 бит, то есть 6144 байт. Данные в экранной области имеют нелинейную организацию. | |
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | + | ||
− | * | + | |
− | + | Каждый байт изображения содержит горизонтальную линию из 8 следующих друг за другом точек. Старший бит содержит состояние крайней левой точки. Строка изображения представлена последовательностью из 32 байт (слева направо). Экран делится на три одинаковых области размером 256x64 точки (2048 байт) - так называемые ''трети''. Они имеют одинаковую организацию и расположены в памяти друг за другом. В пределах одной трети в памяти сначала хранится самая верхняя строка точек каждого из рядов знакомест, потом следующая, и так далее. | |
− | + | Биты адреса в экранной области имеют следующее значение: | |
− | + | {| class="standard" | |
− | + | |- | |
− | + | |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). | |
− | + | Для перехода между третями требуется коррекция адреса. Часто используемая в программах процедура перехода к следующей строке точек, с учётом переходов между строками знакомест и третями экрана, получила название [http://zxdn.narod.ru/coding/zg1etud1.txt|DOWN HL]. | |
− | + | === Область атрибутов === | |
+ | Область атрибутов начинается сразу после экранной области, по адресу #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=#c00000| | ||
+ | |bgcolor=#ff0000| | ||
+ | |1 | ||
+ | |001 | ||
+ | |Синий | ||
+ | |Blue | ||
+ | |- | ||
+ | |bgcolor=#0000c0| | ||
+ | |bgcolor=#0000ff| | ||
+ | |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]] === | ||
+ | *Тактов в строке: 224 | ||
+ | *Строк в кадре: 320 | ||
+ | *Строк перед началом растра: 64 | ||
+ | === [[Scorpion]] === | ||
+ | *Тактов в строке: 224 | ||
+ | *Строк в кадре: 312 | ||
+ | *Строк перед началом растра: 64 | ||
[[Категория:Видеорежимы]] | [[Категория:Видеорежимы]] |
Версия 05:30, 27 января 2008
256x192 - условное название стандартного видеорежима ZX Spectrum, позволяющего отображать графику с разрешением 256 на 192 точек в 15 цветах.
Содержание
Организация экрана
Экран делится на блоки размером 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).
Для перехода между третями требуется коррекция адреса. Часто используемая в программах процедура перехода к следующей строке точек, с учётом переходов между строками знакомест и третями экрана, получила название 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
- Тактов в строке: 224
- Строк в кадре: 320
- Строк перед началом растра: 64
Scorpion
- Тактов в строке: 224
- Строк в кадре: 312
- Строк перед началом растра: 64