4. Работа с основными графическими устройствами Все эти плоскости проектируются на один и тот же участок адресного пространства процессора начиная с адреса 0хА000:0.
При этом все операции чтения и записи видеопамяти опосредуются видеокартой. Поэтому если вы записали байт по адресу 0хА000:0, то это вовсе не означает, что посланный байт в действительности запишется хотя бы в одну из этих плоскостей, точно так же как при операции чтения прочитанный байт не обязательно будет совпадать с одним из 4 байтов в соответствующих плоскостях. Механизм этого опосредования определяется логикой карты, но для программиста существует возможность известного управления этой логикой (при работе одновременно с 8 пикселами).
Для работы с пикселом необходимо определить адрес байта в ви-деопамяти, содержащего данный пиксел, и позицию пиксела внутри байта (поскольку 1 пиксел отображается на і бит в каждой плоскости, то байт соответствует сразу 8 пикселам).
Поскольку видеопамять под пикселы отводится последовательно слева направо и сверху вниз, то одна строка соответствует 80 байтам адреса и каждым 8 последовательным пикселам, начинающимся с позиции, кратной 8, соответствует 1 байт. Тем самым адрес байта задается выражением 80*у + (х»3), а его номер внутри байта - выражением х&7, где (х, у) - координаты пиксела.
Для идентификации позиции пиксела внутри байта часто используется не номер бита, а битовая маска - байт, в котором отличен от нуля только бит, стоящий на позиции пиксела.
Битовая маска задается следующим выражением: 0х80»(х&7).
На видеокарте находится набор специальных 8-битовЫх регистров. Часть из них доступна только для чтения, часть - только для записи, а некоторые вообще недоступны программисту. Доступ к регистрам осуществляется через порты ввода/вывода процессора.
Регистры видеокарты делятся на несколько групп. Каждой группе соответствует пара последовательных портов (порт адреса и порт значения). Для записи значения в регистр видеокарты необходимо сначала записать номер регистра в первый порт (порт адреса), а затем записать значение в следующий порт (порт значения). Для чтения регистра в порт адреса записывается номер регистра, а затем его значение читается из порта значения.