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

Цветной графический адаптер имеет два режима отображения, в которых можно управлять отдельными точками экрана. Эти режимы называются режимами Полной Адресации точек (APA: All Points Addressable), поскольку с помощью этих режимов можно адресовать и изменять все точки. В действительности цветная плата допускает более двух режимов APA, но мы рассмотрим только те два, которые поддерживаются системой программирования. Используя информацию из технического описания, вы можете попробовать и другие режимы.

Графический режим среднего разрешения обеспечивает вывод изображения из 320 точек и 200 строк растра. Каждая из этих точек может иметь один из четырех цветов. Это означает, что для каждой точки требуется для представления цвета 2 бита. В каждом байте графической памяти помещается четыре точки или пиксела (от англ. picture element - графический элемент, которые называют также "пелами"). Если вы умножите горизонтальный размер на вертикальный, а затем разделите на 4 - число точек в байте, то увидите, что в режиме среднего разрешения требуется 16000 байт. Именно поэтому цветная плата имеет память объемом 16K.

На Фиг. 8.13 показано расположение элементов в каждом байте. Пара бит с номерами 6 и 7 отображается первой точкой (0), а биты 0 и 1 представляют последнюю точку (3), отображаемую из этого байта. В первых 80 байтах графической памяти содержится 320 точек строки растра 0, т.е. первой строки экрана.

7 6 5 4 3 2 1 0
точка 0 точка 1 точка 2 точка 3

Фиг. 8.13 Битовая структура для графики 320*200

Но байт 80 уже не содержит первые четыре точки строки 1. По причинам, которые объясняются конструкцией аппаратуры, четные и нечетные строки хранятся в разных концах графической памяти. Все нечетные строки имеют смещение 2000H байт от соответствующих четных строк. Поэтому строка 1 лежит в байтах от 2000H до 204FH. Строка 2 - четная и находится по адресам от байта 50H до 9FH; строка 3 находится по адресам от 2050H до 209FH, и так далее.

На Фиг. 8.12в изображена программа, которая иллюстрирует структуру графической памяти. Эта программа рисует диагональную линию на дисплее 320*200. Линия начинается в точке (0, 0), верхнем левом углу, и идет до точки (199, 199), в самый низ и слегка правее центра. Первая часть программы вводит дисплей в режим APA среднего разрешения с помощью вызова программы BIOS. В следующей главе рассматривается, как это делается. В программе регистр DI используется в качестве указателя нужного байта в буфере дисплея. В целом программа выводит 200 точек. В регистр BL загружается число 50, так как внутренний цикл пишет по четыре точки за одну итерацию. В регистр CL заносится 2 - значение счетчика переключений. Цикл заносит в регистр AL код 0C0H, что устанавливает старшие два бита на цвет 3; остальные три точки байта имеют цвет 0, т.е. цвет фона. После записи этого байта регистр AL сдвигается вправо на 2 бита, и теперь активизируется вторая точка байта. Прибавление значения 2000H к содержимому регистра DI смещает указатель на нечетную строку. Третья точка снова получается сдвигом регистра AL и вычитанием числа (2000H - 80) из содержимого регистра DI. Это возвращает регистр DI назад в четную строку, но уже на следующие 80 байт. Наконец, после записи четвертого байта, регистр DI снова возвращается в четное поле, но еще и увеличивается, смещаясь тем самым на следующий байт строки растра. В примере цикл работает с четырьмя байтами, так как на каждый байт приходится четыре элемента.