Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lektsia_8-11_Massivy-struktury.doc
Скачиваний:
11
Добавлен:
21.12.2018
Размер:
1.47 Mб
Скачать

Организация памяти в графическом режиме 12h

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

– Во-первых, начало видеобуфера находится по адресу 0A0000h.

– Во-вторых, память организована в виде битовых матриц.

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

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

Вычисление адреса Пикселя по экранным координатам.

Нетрудно догадаться, что адрес отдельного пикселя состоит из двух значений: смещения байта относительно начала видеобуфера, в котором находится пиксель и индекса бита внутри этого байта. Для практического применения индекс бита должен быть представлен в виде операнда к командам SHL, SHR или маски к логическим командам and, or, xor, not. Так как это задача чисто математическая и не имеет отношения к тематике статьи позволю себе оставить ее решение на совести программиста, который возьмется за программирования регистровой графики :).

Рисование с помощью регистров Графического Контроллера

Запись видеопамяти с использованием регистров Графического Контроллера позволяет выполнять большинство операций рисования и вывода символов на экран.

Регистры Графического Контроллера доступны только косвенно через порты 3CEh, 3CFh (Другие регистра Графического Контроллера 3CAh и 3CCh не представляют интереса для прикладного программиста) . Для выбора требуемого регистра следует запись его индекс в регистр Адрес Графики 1 и 2, порт 3CEh. Для быстроты установки требуемого регистра Графического контроллера может быть использован словный вариант команды OUT - out DX, AX, при этом DX должен содержать 3CEh, AL - индекс требуемого регистра, а AH - значение, записываемое в регистр.

Установка цвета отдельных пикселей.

Пример основан на комбинированном использовании регистров Режим (индекс 5) и Битовая Маска (индекс 8). Выбирается режим записи 2 регистра Режим. В этом режиме записанный в видеопамять байт будет интерпретироваться как значение цвета пикселей, разрешенных в регистре Битовая Маска. Пиксели, запрещенные в регистре Битовая Маска не изменяются. Чтобы разрешить пиксель для изменения достаточно установить соответствующий ему бит регистра Битовой Маски в 1.

; На входе: ah - битовая маска устанавливаемых пикселей

; al - значение цвета

; * Для простоты записывается первая 8-ми пиксельная ячейка видеопамяти.

SetPixels PROC

push ES

push DI

push 0A000h

pop ES

xor DI, DI

mov DX, 3CEh

push AX

mov AX, 0205h

out DX, AX ; Выбор регистра Режим и одновременная установка режима 2

mov AX, [SP]

mov AL, 8

out DX, AX ; Выбор регистра Битовая Маска и одновременная запись маски разрешенных икселей.

pop AX

mov AH, ES:[DI] ; *

mov ES:[DI], AL

pop DI

pop ES

ret

SetPixels ENDP

* Команда mov AH, ES:[DI] служит для сохранения текущего цвета запрещенных, неизменяемых пикселей и связана с функционированием видеоадаптера: Значение цвета всех пикселей ячейки в распределении по битовым матрицам не может быть считано из памяти непосредственно. При чтении центральным процессором видеопамяти 4 байта из всех матриц автоматически помещаются процессором адаптера в так называемые регистры-защелки. При записи видеопамяти данные, передаваемые центральным процессором комбинируются со значениями этих регистров-защелок по правилам, определяемым установками регистров Графического Контроллера. таким образом, если перед записью по некоторому адресу видеопамяти не выполнить чтение по этому же адресу, то неизменяемые пиксели примут цвет пикселей последней считанной кем-либо 8-ми пиксельной ячейки.

Приведенный выше пример удобен для выполнения одноцветной заливки областей экрана, рисования линий, вывода символов с прозрачным фоном.

Другой регистр Графического Контроллера - регистр Циклический Сдвиг Данных (индекс 3) позволяется, например выводить символы в курсивном начертании, а также использовать при выводе логические операции над текущими экранными цветами и записываемым цветом. Значения битов при установке этого регистра следующие:

0..2 - Количество позиций циклического сдвига вправо

3..4 - Логические операции

00b - Запись данных без изменения

01b – And

10b – Or

11b - Xor

5..7 - Не используются

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