На главную
Подписка
Новости










Главная / MS-DOS / MS-DOS. РУКОВОДСТВО РАЗРАБОТЧИКА / Глава 9 / Использование регистра установки/сброса Сделать домашней страницей Добавить в избранное Написать писмо

НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Использование регистра установки/сброса

В программе, представленной в листинге 9-4, функция line() использует другой метод определения цвета точек на дисплее, нежели подпрограмма fastdot(). Подпрограмма fastdot() применяет для определения цвета регистр маски бита. Но так как определение маски для регистра маски матрицы не очищает предыдущую точку, то эта точка должна быть сначала сброшена при помощи установки регистра маски бита в 0xF с последующей установкой цвета для новой точки. Другими словами, для установки определенного цвета точки доступ и к маске матрицы, и к памяти EGA должен быть осуществлен дважды.


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


Чтобы использовать регистр установки/сброса, Вы сначала должны разрешить его с помощью регистра разрешения установки/сброса. Регистр установки/сброса и регистр разрешения установки/сброса являются частью графического контроллера EGA. Состояние BIOS по умолчанию для регистра разрешения установки/сброса 0, это означает, что регистр установки/сброса выключен. Каждый бит из четырехбитового значения, направляемого регистру разрешения установки/сброса, соответствует битовой матрице EGA. Если бит в регистре разрешения установки/сброса 0, соответствующая битовая матрица защищена от изменения регистром установки/сброса.


Регистр установки/сброса доступен направлениям индекса 0 в порт 0х3CЕ и последующим направлением четырехбитового кода цвета в порт 0x3CF. Регистр установки/сброса оказывает влияние только на битовые матрицы, разрешенные регистром разрешения установки/сброса. Регистр разрешения установки/сброса доступен направлением индекса 1 в порт 0х3СЕ с последующим направлением четырехбитовой маски матрицы в порт 0x3CF.


Обратите внимание на оператор rgen[((x1 >> 3) + (y1 * bytes_ per_line))]+@ 0x1 ; в программе 9-4. Поскольку дисплейный буфер EGA линейный, к нему легко обратиться как к матрице. Выражение внутри скобок вычисляет смещение буфера изменяемого байта. Похоже, что правая сторона оператора прибавляет 1 к байту, что центральный процессор и пытается проделать. Тем не менее, действительной целью является предохранение смежных элементов изображения, содержащихся в байте. Когда используется регистр маски бита, необходимо сначала считать дисплейный буфер для заполнения регистров-защелок таким образом, чтобы другие биты в этом байте были защищены. В отличие от метода установки цвета с помощью регистра маски бита, при использовании регистра установки /сброса байт, посылаемый центральным процессором, служит только для установки адреса изменяемого байта.


Таким образом, выражение +=1 выполняет две функции: оно считывает дисплейный буфер в целях установки регистров-защелок, а также возвращает байт, который включает регистр установки/сброса. В процессе трансляции компилятором языка Си операции в команду процессора 80х86 1 может принимать любое значение, которое сначала считывает, а затем сохраняет байт в дисплейной памяти EGA.


НАЗАД СОДЕРЖАНИЕ ВПЕРЁД

Hosted by uCoz