Лабораторная работа №4 видеоподсистема теоретическая часть

Вид материалаЛабораторная работа

Содержание


Программирование видеоадаптеров
Функция 0: установка режима.
Функция 2: установка позиции курсора.
Функция 3: чтение позиции курсора.
Функция 5: установка активной экранной страницы.
Функция 8: чтение атрибута/символа в текущей позиции курсора.
Функция 9: запись атрибута/символа в текущую позицию курсора.
Функция 0Сh: запись точки.
Функция 0Dh: считывание точки
Функция 0Fh: определение текущего видеорежима.
Непосредственный доступ к памяти
Программирование регистров видеоадаптера
Примеры программирования видеоподсистемы
Пример 2. Прямая запись в видеопамять
Подобный материал:


ЛАБОРАТОРНАЯ РАБОТА №4


ВИДЕОПОДСИСТЕМА



ТЕОРЕТИЧЕСКАЯ ЧАСТЬ


Введение в видеоадаптеры


Видеоподсистема современных персональных компьютеров, основанных на архитектуре Intel x86, представлена в основном монитором и видеоадаптером, а также, в ряде случаев, некоторыми дополнительными устройствами (например, 3D-ускорителями или платами видеозахвата). При этом основная нагрузка по формированию и обработке изображения, выводимого на монитор компьютера, ложится на видеоадаптер, и по этой причине именно видеоадаптер следует считать главной и самой существенной частью видеоподсистемы персонального компьютера.

Основными узлами современного видеоадаптера являются:
  • микросхема видеоконтроллера;
  • Video-BIOS;
  • видеопамять;
  • цифро-аналоговый преобразователь (RAMDAC);


Все узлы видеоадаптера представлены соответствующими микросхемами, расположенными на общей плате, которая вставляется в PCI- либо AGP-разъем материнской платы (за исключением случаев, когда видеоадаптер интегрирован в состав чипсета материнской платы). Каждый из узлов видеоадаптера выполняет собственные функции в составе видеоподсистемы.

Видеоконтроллер выполняет управление видеоподсистемой, а также занимается формированием и первичной обработкой изображения, выводимого на монитор. Современные видеоадаптеры могут выполнять довольно сложные процедуры преобразования изображений, характерные для работы с 2D- и 3D-графикой.

Видео-ПЗУ (Video-BIOS) хранит в себе подпрограммы, расширяющие возможности стандартных процедур управления видеоподсистемой, находящихся в BIOS компьютера (процедуры прерывания INT 10h). Это дает возможность производителям видеоадаптера улучшать его характеристики и наращивать возможности, сохраняя при этом совместимость со стандартными процедурами управления.

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

Цифро-аналоговый преобразователь выполняет преобразование цифровой информации в аналоговый сигнал для передачи его по кабелю на монитор.


Программирование видеоадаптеров


С точки зрения программиста видеоподсистема интересна прежде всего способами ее программирования. Такими способами являются:

  1. Использование стандартных процедур управления видеоподсистемой, представленных прерыванием INT 10h.
  2. Регистровое программирование, при котором выполняется чтение и запись необходимых значений непосредственно в управляющие регистры видеоадаптера.
  3. Прямая запись в видеопамять.


Каждый из указанных способов имеет свои преимущества и недостатки и требует хорошего знания его особенностей.

Программирование с использованием программ BIOS часто представляет собой самый простой и правильный способ программирования видеоадаптеров. Например, обращения к BIOS, написанные для CGA, будут работать на EGA и VGA, что, однако, нельзя утверждать про все регистровые функции. Для изображения пиксела с помощью BIOS используется один и тот же метод, для которого применяемая комбинация адаптер/разрешение не имеет значения, однако запись в память у CGA и EGA/VGA сильно отличаются.

Программирование с использованием BIOS также позволяет расширить степень совместимости между компьютерами и адаптерами, изготовленными разными фирмами. Некоторые регистры EGA и VGA могут быть изменены только в определенные временные интервалы или должны восстанавливаться в интервалы между записями. Эта задача решается BIOS автоматически. Однако даже использование BIOS не гарантирует полной совместимости между компьютерами и даже простыми модификациями кода, выполненного в различных операционных системах. Простота работы с вызовами BIOS объясняется тем, что для обращения достаточно установить соответствующие значения всех необходимых регистров и выполнить прерывание INT 10h. Загрузка каждого из требующихся регистров со значениями обязательна.

Стандартный BIOS VGA предусматривает 20 основных программ для работы с экраном. Эти функции пронумерованы от 0 до 13h. Для доступа к функции необходимо поместить ее номер в регистр AH, после чего выполнить прерывание INT 10h. Для работы большинства программ требуются дополнительные исходные данные, которые должны быть помещены в регистры AL, BX, CX и/или DX. Ниже приведен краткий обзор некоторых функций прерывания INT 10h:


Функция 0: установка режима.


Эта функция используется для выбора режима работы адаптера. Основными режимами работы адаптера EGA являются алфавитно-цифровой (неграфический), графический 320х200, графический 640х200 и графический 640х350. Применение VGA делает доступным графический режим 640х480. Запись символов может быть выполнена с помощью функций 9, 0ah, 0eh и 13h. Построение точек выполняется с помощью функции 0ch.


Регистры (устанавливаются до вызова функции):

---------------------------------------------------------------

AH: устанавливается 0

AL: устанавливается номер режима:

0,1 - 40 столбцов, алфавитно-цифровой, совместим с CGA

2,3 - 80 столбцов, алфавитно-цифровой, совместим с CGA

4,5 - 320х200 4-цветный графический, совместим с CGA

(ограничение: только 2 палитры)

6 - 640х200 2-цветный графический, совместим с CGA

(один из цветов должен быть черный)

7 - алфавитно-цифровой монохромный, совместим с MDA

8-0ch - резерв

0dh - 320х200 16 цветов

0eh - 640х200 16 цветов

0fh - 640х350 монохромный графический

10h - 640х350 цветной графический

(4 цвета для EGA с 64К, 16 цветов для EGA с >64К)

11h - 640х480 монохромный графический, только VGA

12h - 640х480 16-цветный графический, только VGA

13h - 320х200 256-цветный графический, только VGA

---------------------------------------------------------------


Функция 2: установка позиции курсора.


Выдает координаты для позиционировании курсора на экране. Строка 0 является самой верхней строкой экрана, столбец 0 - самым левым столбцом экрана.


Регистры (устанавливаются до вызова функции):

---------------------------------------------

AH: устанавливается 2

DH: номер текстовой строки экрана

DL: номер текстового столбца экрана

BH: номер страницы

---------------------------------------------


Функция 3: чтение позиции курсора.


Возвращает текущие координаты курсора на экране. Также возвращает текущий тип курсора.


Регистры (устанавливаются до вызова функции):

---------------------------------------------

AH: устанавливается 3

BH: номер страницы

---------------------------------------------


Регистры (опрашиваются после вызова функции):

---------------------------------------------

DH: текущая текстовая строка курсора

DL: текущий текстовый столбец курсора

CH: начальная линия в текстовой строке

CL: конечная линия в текстовой строке

---------------------------------------------


Функция 5: установка активной экранной страницы.


Адаптер позволяет использовать несколько страниц (или экранов) информации в видеопамяти. Отображаемой в некоторый момент времени может быть только одна страница, называемая активной. Большинство функций обладают возможностью какой-либо модификации экрана (запись символа, построения точки, перемещение курсора, и т.д.), а также возможностью выбора модифицируемой страницы; следовательно, функции позволяют вно

сить изменения в невидимые экраны. Это позволяет сохранять на экране одно изображение в процессе формирования другого, после чего выполнять быструю замену изображений (наиболее часто такая методика применяется в мультипликации и при демонстрации слайдов). Функция позволяет определить, какой из экранов будет выведен на дисплей. По умолчанию активной является страница 0.


Регистры (устанавливаются до вызова функции):

-------------------------------------------------

AH: устанавливается 5

AL: номер активизируемой страницы:

-------------------------------------------------


Функция 8: чтение атрибута/символа в текущей позиции курсора.


Функция может быть использована для чтения символа с любой страницы. Возвращаемая информация содержит символ, расположенный в текущей позиции курсора указанной страницы. Атрибут представляет собой однобайтовое значение, описывающее символ и фон.

При работе с цветными мониторами три бита цвета фона и символа позволяют получить восемь различных цветов. При использовании монохромных мониторов могут быть установлены следующие значения битов, описывающих цвет фона: все 0 - черный, все 1 - альтернативный цвет. Биты, описывающие цвет символа, могут принимать значения: 000 - черный, 001 - для подчеркивания, 111 - для обычного символа. Байт атрибута имеет смысл только в алфавитно-цифровых (текстовых) режимах.


Регистры (устанавливаются до вызова функции):

---------------------------------------------

AH: устанавливается 8

BH: номер страницы (см. функцию 5)

---------------------------------------------


Регистры (опрашиваются после вызова функции):

-----------------------------------------------

AL: ASCII-код символа в текущей позиции курсора

AH: код атрибута (для текстового режима)

-----------------------------------------------


Функция 9: запись атрибута/символа в текущую позицию курсора.


Функция может быть использована для записи символа (или копий символа) на любую страницу. Символы записываются начиная с текущей позиции курсора, которая определяется с помощью обращения к функции 2.

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

Вывод управляющих символов выполняется так же, как и вывод отображаемых символов. Поэтому управляющие символы "Забой", "Возврат каретки", "Перевод строки" и т.д. должны выполняться путем позиционирования курсора.


Регистры (устанавливаются до вызова функции):

----------------------------------------------------

AH: устанавливается 9

AL: ASCII-код символа

BH: номер страницы (см. функцию 5). В режиме 13h

регистр BH используется для задания цвета фона

BL: атрибут символа

CX: количество отображаемых символов

----------------------------------------------------


Функция 0Сh: запись точки.


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

Если в регистре AL установлен бит 7, то новый пиксел накладывается на текущее содержимое экрана с использованием операции "Исключающее ИЛИ".

Регистр BH (номер страницы) CGA не поддерживается, поскольку в CGA не предусмотрена работа с графическими страницами. Для EGA и VGA в регистре должно быть установлено соответствующее значение.


Регистры (устанавливаются до вызова функции):

-------------------------------------------------------

AH: устанавливается 0Сh

AL: номер цвета

BH: номер страницы (см. функцию 5)

CX: номер столбца пиксела (0 - 319 или 0 - 639)

DX: номер строки пиксела (0 - 199, 0 - 349 или 0 - 479)

-------------------------------------------------------


Функция 0Dh: считывание точки


Обращение к функции применяется для получения цвета точки, расположенной на любой из страниц в графических режимах. Столбец 0 – самый левый, строка 0 - самая верхняя). Регистр BH (номер страницы) CGA не поддерживается.


Регистры (устанавливаются до вызова функции):

-------------------------------------------------------

AH: устанавливается 0Dh

BH: номер страницы (см. функцию 5)

CX: номер столбца пиксела (0 - 319 или 0 - 639)

DX: номер строки пиксела (0 - 199, 0 - 349 или 0 - 479)

-------------------------------------------------------


Регистры (читаются после вызова функции):

-----------------------------------------

AL: значение цвета точки

-----------------------------------------


Функция 0Fh: определение текущего видеорежима.


Функция возвращает информацию о текущем режиме.


Регистры (устанавливаются до вызова функции):

---------------------------------------------

AH: устанавливается 0Fh

---------------------------------------------


Регистры (читаются после вызова функции):

------------------------------------------

AL: номер текущего режима (см. функцию 0)

AH: число выводимых символьных столбцов

BH: число активных страниц (см. функцию 5)

------------------------------------------


Использование обращений к BIOS безусловно просто, однако большое число программ BIOS характеризуется невысоким быстродействием. В связи с этим с целью повышения эффективности работы программ применяются методы прямого доступа к памяти и регистрам. Даже в случае непосредственного обращения к аппаратуре большинство функций сохраняет совместимость между CGA/монохромной и EGA/VGA системами. Некоторые регистры адаптеров значительно отличаются от своих аналогов в других системах. Для эффективного использования регистрового программирования и использования методов прямого доступа к памяти необходимо хорошо разбираться в вопросах организации памяти адаптера.


Непосредственный доступ к памяти


В процессе работы в алфавитно-цифровом режиме имеющаяся память используется для сохранения ASCII-кодов выводимых символов и их атрибутов (цвет, яркость и/или мерцание). Первые два байта памяти адаптера рассматриваются центральным процессором как место расположения символа в левом верхнем углу экрана, а последующими словами (двухбайтовыми) определяются позиции символов в направлении слева направо и сверху вниз по экрану соответственно. Первый байт каждого слова представляет собой ASCII-код каждого символа. Второй байт разделен на группы, состоящие из одного и трех битов, отвечающих за цвет символа (биты 0-2), яркость (бит 3), цвет фона (биты 4-6) и мерцание (бит 7) соответственно. Для графических мониторов адреса начинаются со значения b8000h, а для монохромных (неграфических) мониторов - со значения b0000h.

В графическом режиме память используется для хранения цвета каждой растровой точки (пиксела). Распределение памяти по растровым точкам зависит от вида графического режима и размера памяти, установленной в EGA (для случая работы с VGA используется такое же распределение памяти, как и для EGA с памятью 256К). Во всех режимах пикселы размещаются слева направо и сверху вниз в соответствии с увеличением адресов памяти.


Программирование регистров видеоадаптера




EGA и VGA имеют регистры, предназначенные для реализации управляющих функций адаптера. Регистры адаптера могут быть разделены на 5 основных групп:
  • внешние регистры;
  • регистры указателя последовательности;
  • регистры КЭЛТ (контроллера электронно-лучевой трубки);
  • регистры графического контроллера;
  • регистры атрибута.


Эти группы регистров связаны между собой, хотя и существуют исключения. Посредством указателя последовательности осуществляется управление доступом к памяти, синхронизацией и потоком данных между другими регистрами. КЭЛТ регулирует длительность временного интервала для вывода информации. Основная задача, решаемая графическим контроллером - реализация функций графического режима. Атрибут-контроллер осуществляет управление цветовыми палитрами, a внешние регистры предназначены для работы c различными функциями. При использовании VGA к вышеуказанным группам добавляется группа регистров, называемых регистрами ЦАП (цифро-аналогового преобразователя), предназначенного для преобразования номера цвета в напряжение для аналогового монитора.

Большинство регистров являются доступными косвенно. Каждая группа регистров (за исключением внешних регистров) включает адресный регистр. Адресный регистр используется для выбора модифицируемого регистра. Bce безадресные регистры (кроме внешних peгистров и регистров графической позиции) имеют индекс. Индекс помещается в адресный регистр, после чего выполняется доступ к нужному регистpy.

EGA и VGA также имеют 4 регистра-защелки, используемые во время доступа к памяти процессора. Регистры-защелки применяются для сохранения информации, находящейся в памяти, во время записи памяти процессора, для последующей передачи содержимого памяти в процессе чтения памяти процессора. Работа регистров-защелок в основном незаметна для пользователя и не связана непосредственно c процессором. Однако некоторые регистры графического контроллера непосредственно работают c содержимым регистров-защелок.

Большинство регистров EGA доступны только для записи и не доступны для чтения. Регистры VGA доступны для чтения/записи, за некоторым исключением.


Примеры программирования видеоподсистемы


Пример 1. Работа через BIOS


Приведенная ниже программа "пролистывает" четыре видеостраницы, останавливаясь на каждой из них. С каждым следующим циклом пауза становится короче. На каждой из страниц добавляется одно слово, формируя сообщение "This shows four pages".


data segment


msg1 db ' This'

msg2 db ' shows'

msg3 db ' four'

msg4 db ' pages.'

pse dw 0F000h ;длительность паузы при выводе


data ends


code segment public

assume CS:code


main proc far


start: push DS

sub AX,AX

push AX


mov AX,data ;получить размещение сегмента данных

mov ES,AX ;установить ES для вызова функции

assume ES:data


mov AX,data

mov DS,AX

assume DS:data


mov AX,3 ;режим 3 (алфавитно-цифровой)

int 10h


mov DH,08 ;строка 8

mov DL,0ah ;столбец 10

mov BH,3 ;страница 3

mov BP,offset msg1 ;ES:BP указатель на строку

mov BL,0fh ;белый высокой яркости

mov CX,6 ;длина строки


;загрузка четырех страниц с сообщением


loop: mov AL,1 ;курсор перемещается

;только строка символов

;атрибут в BL

mov AH,13h ;функция 13h - запись строки

int 10h ;вызов видео-BIOS

add BP,6 ;указатель на следующее сообщение

add DL,6 ;перемещение курсора для следующей

;страницы

dec BH ;указатель на следующую страницу

cmp BP,offset msg4

jbe loop


;вывод четырех страниц


dsp: mov CX,4


lp2: mov AL,CX

dec AX

mov AH,5

int 10h

push CX

mov CX,2 ;задержка (2-й множитель

;для увеличения времени)


ps1: push CX

mov CX,pse ;длина паузы


ps2: loop ps2 ;пустой цикл для задержки

pop CX

loop ps1 ;цикл через множитель

pop CX

loop lp2

mov AX,pse

sub AX,1000h

mov pse,AX

cmp AX,0

ja dsp


;переустановка страницы 0 перед возвратом в DOS


mov AL,0

mov AH,5

int 10h


ret


main endp


code ends


end start


Пример 2. Прямая запись в видеопамять


assume cs:code,ds:data

code segment 'code' public byte

main proc

mov ax,data

mov ds,ax

push 0b800h

pop es

mov si,offset msg

mov di,80*2*13+37*2

mov cx,msglen

cld

rep movsb

mov ah,08h

int 21h

mov ah,4ch

int 21h


main endp

code ends

data segment public byte

msg db 10h,0Eh,'T',84h,'e',84h,'s',84h,'t',84h,11h,0Eh

msglen=$-msg

data ends


end main


ПРАКТИЧЕСКАЯ ЧАСТЬ


Задание к лабораторной работе


Цель работы: получить представление об основных приемах программирования видеоадаптера. Изучить работу программ, работающих с видеоподсистемой.

  1. Запустить одну из предлагаемых программ, изучить ее работу, в случае необходимости – исследовать ее работу при помощи отладчика.
  2. Объяснить выполняемые действия и прокомментировать их результаты.