Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

Avdeev

.pdf
Скачиваний:
158
Добавлен:
01.06.2015
Размер:
1.99 Mб
Скачать

233

Рис. 9.8. Матрично-пикселное изображение символа

Видеобуфер адаптеров EGA и VGA содержит четыре параллельных банка памяти (0 – 3), начальный адрес которых B800:0000h или A000:0000h, причем отображаемые на экране данные хранятся в банках 0 и 1, а в банке 2 – таблицы шрифтов знакогенератора. Байты символов с четными адресами размещаются в банке 0, а байты атрибутов с нечетными адресами – в банке 1. Управление обращением к банкам 0 и 1 управляет контроллер ЭЛТ.

9.6. Графический режим

Графический режим – это режим с адресацией всех точек экрана, позволяющий получать сложные, цветные и движущиеся изображенияи связанный с обработкой процессором больших массивов информации. В этом режиме каждый байт видеобуфера хранит цветные значения одного или нескольких пикселов. Если пиксел кодируется n битами видеобуфера, то на экране одновременно можно наблюдать 2n цветов. В адаптере CGA графический режим 320 200 использует 2 бита для кодирования цвета пиксела, т.е. на экране одновременно можно наблюдать 4 цвета из 16 цветов палитры. В каждом байте видеобуфера CGA хранятся значения четырех пикселов, причем левый младший пиксел в байте соответствует старшим байтам D7 и D6. В адаптере CGA реализуется прямое соответствие (без преобразования) между битами видеобуфера и пикселами экрана, а адаптерах EGA и VGA – косвенное отображение с использованием 16 регистров палитры, как и в текстовом режиме. На рис. 9.9 показаны схемы отображения содержимого видеобуферов CGA, EGA и VGA на экраны мониторов.

видеобуфер экран CGA

видеобуфер регистры палитры экран EGA

видеобуфер регистры палитры регистры ЦАП экран VGA

Рис. 9.9. Схемы отображения видеобуферов на экраны CGA, EGA, VGA

234

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

Хранение значений пикселов в видеобуферах CGA, EGA и VGA выполняется следующим образом (рис. 9.10).

B800:

CGA

Экран

 

0000h

 

 

 

 

 

Стр. 0

100 четных

 

 

 

 

 

строк

 

 

 

 

Стр. 1

 

 

 

 

 

 

 

 

 

 

Стр. 2

 

8000 байт

 

 

 

 

2000h

 

 

 

 

Стр. 3

 

 

 

 

 

 

 

 

 

.

100 нечетных

 

 

 

 

 

 

 

 

 

 

 

.

 

строк

 

 

 

 

 

 

.

 

8000 байт

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Видеобуфер

 

 

 

 

 

EGA, VGA

 

7

i

0

3

 

3

2

 

2

1

 

1

0

 

0

Регистры-защелки

Видеобуфер

0-3

 

 

 

Рис. 9.10. Представление видеобуферов CGA, EGA и VGA в графическом режиме

В CGA графические данные хранятся в двух блоках видеобуфера. Первый блок с начальным адресом B800:0000h предназначен для хранения значений пикселов 100 четных строк, а второй блок с начальным адресом B800:2000h – 100 нечетных строк. Видеобуфер VGA и EGA, как уже отмечалось, в текстовом режиме состоит из четырех блоков или двоичных плоскостей 0 – 3, адресуемых параллельно, т.е. адрес относится к четырем байтам соответственно четырех плоскостей. Если в CGA возможен прямой доступ к видеобуферу, то в EGA и VGA непосредственное обращение к видеобуферу исключено. При чтении содержимого видеобуфера VGA (EGA), связанного с выполнением команд MOV, CMP, LODS и т.д., происходит параллельная выборка четырех байтов, которые загружаются в соответствующие ре- гистры-защелки, т.е. байт из двоичной плоскости 0 загружается в регистр-защелку 0 и т.д. Каждый байтовый срез четырех регистров хранит 4-разрядные значения пиксела. В EGA используется 4 бита для хранения значения пиксела, а в VGA – 8 бит. Регистры-защелки содержат 8 4-разрядных значений пикселов.

235

При выполнении команд MOV, CMP, LODS и т.д., П осуществляет

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

Как уже отмечалось, графический режим называют режимом АРА (All Points Addressable) с адресацией всех точек. В этом режиме видеопамять хранит битовый образ пикселного представления изображения на экране. Каждый байт видеопамяти хранит значение одного или значения нескольких пикселов, причём нумерация битов и пикселов противоположная, т.е. самому левому, младшему, пикселу соответствуют старшие биты байта. Число одновременно наблюдаемых цветов на экране определяется числом битов, соответствующих каждому пикселу. Так, например, в 16-ти цветном графическом режиме под любой пиксел отводится четыре бита. Если разрешающая способность цветного режима АРА 640 480, то необходимый объем страницы видеопамяти равен

(640 480 4) 18=153600 байтов.

Характеристики графических режимов адаптера VCA приведены в табл. 9.5. Таблица 9.5

 

Разре-

Нач

Ч

 

Те

Раз-

омер

шающая спо-

альный ад-

исло бай-

Ц

кстовый

мер мат-

ре-

собность

рес видеопа-

тов в

вета

формат

рицы сим-

жима

 

мяти

странице

 

 

вола

 

 

 

 

 

 

 

 

320 x

B80

2

4

40

8 x

,5

200

00

000

 

x 25

8

 

 

 

 

 

 

 

 

640 x

B80

1

2

80

8 x

 

200

00

6000

 

x 25

8

 

 

 

 

 

 

 

 

236

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

 

 

320 x

A00

 

3

 

40

8 x

 

200

00

2000

6

 

x 25

8

 

 

 

 

 

 

1

 

 

 

640 x

A00

 

6

 

80

8 x

 

200

00

4000

6

 

x 25

8

 

 

 

 

 

 

М

 

 

 

640 x

A00

 

5

 

80

8 x

 

350

00

6000

 

оно

 

x 25

14

 

 

 

 

 

 

1

 

 

 

640 x

A00

 

1

 

80

8 x

0

350

00

12000

6

 

x 25

14

 

 

 

 

 

 

2

 

 

 

640 x

A00

 

3

 

80

8 x

1

480

00

8000

 

 

 

x 30

16

 

 

 

 

 

 

1

 

 

 

640 x

A00

 

1

 

80

8 x

2

480

00

53600

6

 

x 30

16

 

 

 

 

 

 

2

 

 

 

320 x

A00

 

6

 

40

8 x

3

200

00

4000

56

 

x 25

8

Из табл. 9.5 видно, что на рост емкости страницы видеопамяти влияют увеличение разрешающей способности и количество одновременно наблюдаемых цветов.

Режимы 4, 5 и 6 необходимы для реализации стандартов CGA, а режимы D, G, F и 10 – для поддержания стандарта EGA. Стандарту VGА принадлежат режимы 11, 12, 13, из которых наиболее употребительным является режим 12.

Видеопамять в зависимости от режима может иметь одну, две или четыре битовых плоскостей. Битовые плоскости иначе ещё называют банками. На рис. 9.11 показана организация видеопамяти в виде четырёх битовых плоскостей (0–3) для режимов D, E, 10, 12 (рис. 9.11, а), двух плоскостей, например, 0 и 2 для режимов 4 и 5 (рис. 9.11, б) и одной плоскости для режимов 6 и 11 (рис. 9.11, в).

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

237

 

 

Битовый срез 4-х байтов

 

 

 

Битовый срез 2-х байтов

 

 

 

 

Байт

 

 

 

(значение одного пиксела)

 

 

 

(значение одного пиксела)

 

 

(значения восьми пикселов)

 

 

0

 

1

 

0

 

1

 

 

 

0

 

1

 

 

 

 

 

 

0

1

 

. . .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

 

. . .

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

.

. .

 

 

 

 

3

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

.

. .

 

 

 

 

 

 

2

 

 

 

 

 

 

1

. . .

 

 

 

A000h

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

.

. .

 

 

 

 

 

 

 

 

 

 

 

 

 

0

.

. .

 

 

 

 

 

0

1

 

. . .

 

A000h

 

 

 

 

 

 

1

 

 

 

 

 

 

2

(B800h)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

B800h

 

 

 

 

 

 

 

 

 

 

 

 

 

Видеопамять

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

0

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

16-ти цветные режимы D, E, 10, 12

 

 

 

4-х цветные режимы 4 и 5

 

 

2-х цветные режимы 6 и 11

 

 

 

 

 

 

 

 

а)

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

б)

 

 

 

 

 

 

в)

Рис. 9.11. Организация видеопамяти для режимов D, E, 10 и 12 а), режимов 4, 5 б) и режимов 6 и 11 в)

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

На рис. 9.12 для 16-цветного режима изображена схема связи битовых плоскостей с соответствующими 8-битовыми режимами-защелками R0-R3.

Рис. 9.12. Схема связи двоичных плоскостей 0-3 видеопамяти с регистрами-защелками R0-R3

238

Байт (значение восьми пикселов)

70

. . .

Битовый срез (значение пиксела)

R3

3

R2

 

R1

 

R0

0

Регистры-защелки

3

2

1

0

Считанный из битовых плоскостей битовый срез байтов определяет количество одновременно наблюдаемых цветов. Таким образом, цвет пиксела на экране обуславливается четырьмя битами (рис. 9.11, а), двумя битами (рис. 9.11, б) или одним битом (рис. 9.11, в) с учетом шестнадцати 6-битовых регистров палитры атрибутного контроллера, т.е. указанные 4, 2 или 1 бит задают номер цвета в соответствующем регистре палитры. Для двухили четырехцветного режимов используются первые 2 или 4 регистра палитры. Затем 6-битовое значение выбранного регистра палитры преобразуется в 8-битовый индекс (адрес) для доступа к одному из двухсот пятидесяти шести 18-битовых регистров ЦАП. Каждый 18-битовый регистр хранит определенный цвет и содержит три 6-битовых части, соответствующие красному, зеленому и синему цветам. В регистры ЦАП записывается таблица цветов, которую можно программно изменить.

Врежиме13атрибутныйконтроллернеучаствует.Вэтомслучаекаждыйбайт видеопамяти поступает непосредственно в ЦАП для выбора желаемого цвета пиксела с помощью таблицы цветов.

Вадаптере VGA обработку данных, передаваемых между процессором и видеопамятью, выполняет графический контроллер, содержащий 9 регистров, доступ

ккоторым осуществляется через регистр данных (3CFh) и регистр индекса (3CEh),

239

выбирающего желаемый регистр. К числу регистров графического контроллера относятся: регистр установки/сброса (индекс 0), индекс разрешения установки/сброса (индекс 1), регистр сдвига данных (индекс 3), регистр режима (индекс 5) и регистр маски битов (индекс 8).

Адаптер реализует 3 режима записи и 2 режима чтения из видеопамяти. По умолчанию BIOS устанавливает режим записи 0 и режим чтения 0. При осуществлении режима записи необходимо предварительно в регистры-защелки загрузить те- кущеесодержимоебайтоввидеопамяти.Врегистрережимабиты0-1задаютрежимы записи (00 – режим записи 0, …, 11 – режим записи 3), бит 3 указывает на режим чтения (0 – режим чтения 0, 1 – режим чтения 1).

Рассмотримвыполнениенаиболеесложногорежимазаписи0.Дляреализации этого режима секвенсер адаптера содержит регистр маски карты (индекс 2). Секвенсер координирует передачу данных из видеопамяти или графического контроллера в атрибутный контроллер и имеет 5 программно-доступных регистров, обращение к которым выполняется с помощью регистра данных (3C5h) и регистра индекса (3С4h), предназначенного для выбора конкретного регистра по его индексу.

Регистр маски битов (индекс 8) графического контроллера используется для защиты соответствующих битов регистров-защелок от воздействия содержимогорегистра данных процессора, например AL. Если в регистре маске битов разряды D0=D1=D3=0, то в регистрах-защелках запрещается изменение битов D0, D1 и D3. Единичное значение какого-либо бита регистра маски битов разрешает модификацию соответствующих битов в регистрах-защелках.

Рассмотрим следующий пример. Пусть необходимо представить пиксел коричневого цвета в строке 0 и столбце 1 экрана в режиме записи 0. На рис. 9.13 изображена схема очистки текущего содержимого регистров-защелок. Рис. 9.13 показывает выбор первых байтов в битовых плоскостях видеопамяти по его начальному адресу. Затем в регистре маске устанавливается код 010…0b, маскирующий все биты, кроме шестого, в регистрах-защелках. После этого необходимо выполнить чтение содержимого видеопамяти в регистры-защелки путем выполнения команды MOV AL,ES:[BX], причем содержимое регистра AL

Рис. 9.13. Схема очистки битового среза регистров-защелок и фрагмент программы

 

240

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

ES:[BX] =

; Установка маски битов

Видеопамять

 

 

3

2

 

 

 

A000:0000

 

 

 

 

 

 

 

 

 

(VRAM)

 

 

 

 

 

 

 

MOV DX,3CEh

;задаем регистр адреса

 

 

 

1

0

 

 

 

 

 

 

 

 

 

 

 

 

MOV AL,8

;посылаем указатель

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

OUT DX,AL

 

Регистр

 

 

 

 

 

 

 

 

INC DX

;устанавливаем регистр

маски битов

 

 

 

 

 

AL

 

 

 

 

 

 

 

 

 

 

данных

0

D7

 

 

 

 

D7

0

D7

 

 

 

 

 

 

 

 

 

1

D6

0

0

0

0

D6

0

D6

 

MOV AL,01000000b ;направляем код маски

0

 

 

 

 

 

 

0

 

 

OUT DX,AL

;очистка битового среза

:

 

 

 

 

 

 

:

 

 

:

 

 

 

 

 

 

:

 

 

MOV AL,ES:[BX]

;чтение VRAM

0

D0

 

 

 

 

D0

0

D0

 

 

 

 

 

 

 

 

 

Регистры-защелки

 

 

D1 D0

MOV AL,0

 

 

 

 

0

0

 

 

 

 

 

 

 

 

 

 

MOV ES:[BX],AL

;запись в VRAM

 

 

 

 

 

 

 

Регистр режима

здесь игнорируется. После этого в регистр AL заносится нулевое значение и выполняется команда MOV ES:[BX],AL, которая очищает шестой битовый срез в регистрах-защелках (шестые биты в первых байтах двоичных плоскостей (3-0) видеопамяти).

Рис. 9.14 показывает вывод пиксела коричневого цвета на экран.

Рис. 9.14. Схема вывода пиксела на экран и фрагмент программы Вначале устанавливается код 0110 в регистре маски карты, задающий корич-

невый цвет выводимой точки. Код в регистре маски карты определяет цвет пиксела

Видеопамять

 

 

3

 

 

 

ES:[BX]

(VRAM)

 

 

 

2

1

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

0

 

 

 

Регистр

 

 

 

 

 

 

 

 

маски битов

 

 

 

 

 

AL

 

 

0

D7

 

 

 

 

D7

1

D7

 

1

D6

0

1

1

0

D6

1

D6

 

0

 

 

 

 

 

 

 

 

 

:

 

 

 

 

 

 

:

 

 

:

 

 

 

 

 

 

:

 

 

0

D0

 

 

 

 

D0

1

D0

 

 

 

 

 

 

 

 

 

D1 D0

 

 

0

1

1

0

 

 

0

0

 

Регистр маски карты

Регистр режима

; Установка маски карты

MOV DX,3C4h

;задаем регистр адреса

MOV AL,2

;посылаем указатель

OUT DX,AL

 

INC DX

;устанавливаем регистр

 

данных

MOV AL,6

;направляем код маски

OUT DX,AL

; изображение точки

MOV AL,0FFh

MOV ES:[BX],AL ;запись в VRAM

241

на экране. После этого любое значение с D6=1 в регистре AL при выпол-

нении команды MOV ES:[BX],AL устанавливает требуемую точку коричневого цвета на экран. Если в регистре маски карты поместить код 0001 или 0010, то это будет соответствовать изображению на экране точки синего или зеленого цвета.

При выполнении операции записи пиксела в видеопамять необходимо выполнить следующие действия:

- установить тип графического режима с помощью функции 0 преры-

вания Int 10h;

- задать режим записи 0 в регистре режима графического контроллера. После этого для осуществления режима записи 0 устанавливается адрес нуле-

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

Здесь следует отметить, что при выполнении процессором команд: MOV RG,VRAM, CMP RG,VRAM или AND RG,VRAM из четырех двоичных плоскостей видеопамяти по одному и тому же заданному в команде адресу видеопамяти извлекаются четыре байта, которые затем автоматически помещаются в соответствующие регистры-защелки.

Аналогичным образом при выполнении, например, команды: MOV VRAM,RG производится модификация содержимого регистров-защелок и параллельная запись их в битовые плоскости по заданному в команде адресу видеопамяти.

В режиме записи 0 на формирование данных выводимых из регистров-заще- лок в битовые плоскости видеопамяти в режимах D, E, 10 и 12 влияет содержимое регистра маски битов, регистра маски карты, регистра установки/сброса, регистра разрешения установки/сброса, регистра данных процессора и регистра сдвига дан-

ных (рис. 9.15)

242

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

1

0

Видеопамять

 

 

 

 

 

 

 

 

2

 

(VRAM)

 

 

 

 

ES:[BX]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

3

 

 

 

 

 

 

 

 

A000:0000

 

 

 

 

 

 

 

 

 

 

 

 

Регистр

 

 

 

 

 

 

 

 

AL

 

 

 

 

маски

1

D7

 

0

1

 

1

D7

1

D7

 

 

 

битов

1

 

 

0

0

 

1

 

0

 

 

 

 

(индекс 8)

1

 

 

0

1

 

1

 

1

 

 

 

 

 

1

 

 

0

1

 

1

 

1

 

 

 

 

 

1

 

 

0

0

 

1

 

0

 

 

 

 

 

0

 

 

 

 

 

 

 

1

 

 

 

 

 

0

 

 

 

 

 

 

 

1

 

 

 

 

 

0

D0

 

B3

B2

B1

B0

D0

1

D0

 

 

 

 

 

 

 

 

 

 

 

 

 

D6

D1 D0

 

Регистры-защелки

 

 

 

 

 

 

 

0

0

 

 

 

 

 

 

 

 

 

 

 

Регистр режима

 

 

 

 

 

 

 

 

 

 

 

(индекс 5)

 

 

 

 

 

 

 

 

 

 

 

 

Регистр

B3

 

 

B0

D4 D3

D0

 

B3

 

 

B0

уст/сбр

0

1

1

1

0

0

 

 

1

1

0

0

(индекс 0)

 

 

 

 

Регистр сдвига

 

Регистр маски

 

 

 

 

 

 

 

Регистр

B3

 

 

B0

 

данных

 

 

карты

 

 

 

 

(индекс 3)

 

 

(индекс 2)

 

разрешения

1

0

0

1

 

 

 

 

уст/сбр

 

 

Графический контроллер

 

Секвенсер

(индекс 1)

 

 

 

(индекс 3C4h,

 

 

(индекс 3CEh, код 3CFh)

 

 

 

 

 

 

код 3C5h)

 

 

 

 

 

 

 

 

 

 

Рис. 9.15. Структурная схема реализации режима записи 0

Регистр установки/сброса, содержащий биты В0-В3 по числу регистров-заще- лок, управляет установкой единичных значений или сбросом в нулевое состояние битов выбранных регистров-защелок. Так, если в регистре установки/сброса бит В3=0 и бит В0=1, то все немаскируемые биты третьего регистра-защелки сбрасываются в нулевое состояние, а немаскируемые биты нулевого регистра-защелки устанавливаются в единичное состояние. Работа регистраустановки/сброса координируется регистром разрешения установки/сброса. Если, например, в регистре разрешения установки/сброса бит В3=1, то это соответствует разрешению работы бита В3 регистра установки/сброса.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]