Жанр: Учеба
Программно-аппаратная организация компьютера IBM PC
... 7 Режим монохромного дисплея
____________________________________________________________
При наличии цветного графического адаптера с помощью указанных
функций обслуживания довольно просто обеспечивается переключение режима.
Можно было бы предположить, что при наличии двух адаптеров эта сервисная
функция обеспечит переключение одного активного дисплея на другой, но, к
сожалению, это не так. В BIOS-ПЗУ предусмотрен специальный признак,
который отмечает факт наличия монохромного адаптера; если монохромный
адаптер подключен, то BIOS блокирует любой запрос, связанный с
переключением в режим цветного графического дисплея. Система, включающая в
свой состав два видеомонитора может переключаться с одного дисплея на
второй лишь с помощью специальных кодовых комбинаций (эти сведения только
недавно опубликованы фирмой IBM). Что же касается одновременной
активизации обоих дисплеев, то это, насколько мне известно, попросту
невозможно.
Черно-белые текстовые режимы (коды 0 и 2) работают аналогично
соответствующим цветным режимам, но с блокировкой цветности. Смысл,
вкладываемый в термин "пиксель", а также сведения о разрешающей
способности графических режимов будут приведены в следующей главе.
Вторая функция обслуживания (код 1) используется для установки
размера курсора. Как уже указывалось ранее - конфигурация и размер курсора
фиксируются путем определения начальной и конечной строк развертки позиции
курсора. Верхняя строка развертки имеет номер 0, а нижняя строка развертки
- номер 7 (для цветного графического режима) или номер 13 (для
монохромного режима). Если номер начальной строки больше номера конечной
строки, то генерируется (двух)составной курсор. Особенности управления
курсором описаны в параграфе 8.8.
Третья функция обслуживания (код 2) используется для перемещения
курсора. Положение курсора описывается тремя параметрами - строка, позиция
(столбец) и страница. Отсчет строк и позиций начинается с первого
знакоместа (верхний левый угол экрана), имеющего номер 0. Если возникает
необходимость использовать нумерацию от 1 до 25 (вместо нумерации от 0 до
24), то пользовательская программа должна выполнить пересчет номеров;
программы обслуживания на Паскале, приведенные в приложении 8.102,
реализуют именно эту функцию. Номер страницы (памяти дисплея) используется
только в случае текстового режима работы цветного графического адаптера;
при работе с монохромным дисплеем, а также в графических режимах номер
страницы должен быть установлен в 0. Курсор можно вывести вообще за
пределы экрана и, таким образом, сделать его невидимым. Для этого я бы
рекомендовал использовать первую позицию строки, выходящую за пределы
максимально возможной (если, например, нумерация строк и позиций ведется с
1, то следует указать первую позицию 26-й строки).
Положение курсора фиксируется путем занесения номера строки в регистр
DH, а номера позиции (столбца) в регистр DL. Нумерация строк позиций
начинается с нулевых координат (0,0) верхнего левого угла экрана. В
графических режимах положение курсора также описывается в терминах
координат "строка-позиция"; координаты пикселя не используются. Для
нумерации страниц используются числа 0 - 7 (40-позиционный режим) или 0 -
3 (80 позиционный режим). Для графических режимов номер страницы должен
быть равным 0.
Ниже приведены обобщенные сведения о содержимом регистров при
обращении к функции обслуживания 2.
_________________________________________________________
Номер функции Параметры
обслуживания (регистры)
(регистры)
_________________________________________________________
AH= 2 DH = номер строки
DL = номер позиции
BH = номер страницы
(для графических режимов равен 0)
_________________________________________________________
Здесь уместно сделать одно важное замечание, касающееся работы в
цветном графическом многостраничном режиме. Если возникает потребность в
перемещении курсора, то следует специфицировать страницу - таким образом
исключается возможность поместить курсор в текущую активную страницу
дисплея; любая другая страница в этом смысле является доступной. Каждая
страница имеет собственное логическое местоположение курсора. Некоторые
функции обслуживания (из числа перечисляемых ниже), применимые к любой
странице изображения , действуют относительно положения курсора. Положение
курсора фиксируется для каждой страницы изображения.
Четвертая функция обслуживания (имеющая код 3) предназначена для
считывания положения курсора и его размера. В каком-то смысле она
реализует процедуру, обратную процедуре, реализуемой совместным
использованием двух предшествующих функций обслуживания. Здесь также
следует специфицировать страницу изображения; для монохромного дисплея, а
также для графических режимов ее номер должен равняться 0. В результате
выполнения функции пользователь получает номера строки и позиции курсора,
а также номера начальной и конечной строки развертки, формирующие курсор.
Ниже приводятся сведения о составе и содержимом регистров.
1 Номер начальной строки должен быть загружен в регистр CH, а номер
конечной строки - в регистр CL. По умолчанию для монохромного адаптера
устанавливаются следующие значения CH = 12, CL = 13.
Здесь уместно заметить, что для номеров строк отведено только три
байта (0 - 2) в указанных регистрах. Если пятый бит регистра CH установлен
в состояние "1" (т.е. в регистр загружено значение 32), то курсор
исчезает. При переходе в графический режим этот бит автоматически
устанавливается равным 1, с тем чтобы курсор не мешал графическому выводу.
Этот прием также можно использовать для искусственного удаления курсора.
Поскольку в графических режимах операции с курсором аппаратно не
поддерживаются, то речь может идти о его имитации с помощью символа
CH$(223) и изменения атрибутов фона.
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 1 CH = начальная строка курсора
CL = конечная строка курсора
AH = 3 BH = номер страницы (для графических
режимов устанавливается равным 0)
DH = номер строки
DL = номер позиции (столбца)
CH = начальная строка развертки курсора
CL = конечная строка развертки курсора
____________________________________________________________
Пятая функция обслуживания (функция с кодом 4) предназначена для
считывания местоположения, указанного световым пером ( для систем, имеющих
световое перо). В результате выполнения фиксируется факт подключения
светового пера; если световое перо подключено, то фиксируется также
положение указанной точки. Положение задается как в терминах символов, так
и в терминах пикселей (этот вопрос подробно обсуждается в следующей главе,
посвященной графике).
Регистр AH предназначен для индикации подключения светового пера:
если AH=1, то световое перо подключено, в противном случае (AH=0),
световое перо не используется. Положение объекта, вычлененного с помощью
светового пера формируется либо в виде содержимого регистров CH, BX
(положение пикселя). Поскольку величина, соответствующая (горизонтальной)
позиции пикселя может превышать 255, то для нее отводится полное слово
(регистр BX).
Ниже приводятся сведения о составе и содержимом регистров.
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 4 DH = номер строки символов
DL = номер позиции (столбца)символа
CH = номер строки пикселей
(0 - 199)
BX = номер позиции (столбца) пикселя
____________________________________________________________
Световое перо не относится к числу наиболее распространенных
аппаратных средств для IBM/PC. Это своего рода сдерживающий фактор,
поскольку может использоваться только с дисплеями, обладающими очень малым
временем послесвечения люминофора, т.е. такими дисплея, у которых
светимость точки быстро падает после перемещения луча развертки в
следующую точку экрана. Такие дисплеи быстро утомляют оператора. Поэтому
хорошие дисплеи не нуждаются в световом пере. Для монохромного дисплея
фирмы IBM применяется фосфорный дисплей с длительным послесвечением,
облегчающий восприятие изображений. Можно считать, что световое перо
получит ограниченное распространение (в основном для специальных
приложений) в сфере персональных компьютеров.
Шестая функция обслуживания (функция с кодом 5) используется для
установки (подключения) активной страницы в многостраничном текстовом
режиме цветного графического дисплея. Номер страницы задается в регистре
AL. Для 40-позиционных режимов номера страницы лежат в диапазоне 0 - 7, а
для 80 позиционных режимов - в диапазоне 0 - 4. По умолчанию номер
страницы принимается равным 0. Эта страница помещается в самом начале
памяти дисплея, а каждая последующая страница с интервалом в 2К (для 40
позиционных режимов) или через 4К (для 80 позиционных режимов). Большему
номеру страницы соответствуют ячейки памяти с большими адресами.
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 5 AL = номер новой страницы дисплея
(0 - 3 для режимов 2 и 3, 0 -
7 для режимов 0 и 1)
____________________________________________________________
Две следующих функции обслуживания /функции с кодами 6 и 7/
используются для реализации режима "прокрутки" (скроллинга) информации на
экране дисплея. Использование компьютера IBM/PC в режиме "прокрутки"
представляет собой одну из интереснейших возможностей отображения
информации, однако лишь немногие программы, используют эту возможность. В
режиме "прокрутки" можно перемесить содержимое экрана вверх или вниз на
любое число строк. При этом отображаемые символы смещаются за пределы
экрана вверх или вниз, а освободившаяся часть экрана заполняется пустыми
строками. Особенность этого режима отображения состоит в том, что в роли
экрана может выступать произвольная прямоугольная область экрана (окно),
на которую распространяется "прокрутка"; остальные участки экрана остаются
неизменными. Выделив несколько окон, можно организовать в каждом из них
режим "прокрутки". Возможности обработки данных здесь огромные, остается
лишь недоумевать, почему большинство программ их редко используют.
Функция с кодом 6 предназначена для "прокрутки" вверх, а функция с
кодом 7 предназначена для "прокрутки" вниз. И в том, и в другом случае
следует специфицировать два противоположных угла окна - верхний левый и
нижний правый. Спецификация задается в терминах строк и столбцов. Следует
также задать число перемещаемых строк; это число может совпадать с
размером окна. И последний обьект спецификации - атрибут отображения строк
заполнителей. Таким образом, имеется возможность управлять цветом окна.
Если планируется использование техники работы с окнами, то имеет смысл
выделить окно путем приписывания ему атрибута отображения, отличного от
атрибута отображения всего остального экрана. С помощью механизма
прокрутки текст сообщения не может быть помещен в новые строки окна - для
этого следует принять специальные меры.
Число перемещаемых строк указывается в регистре AL. Если AL=0, то все
окно заполняется пустыми строками (то же самое происходит, если число
перемещаемых строк превышает размеры окна). Положение и размер окна
указываются в регистрах CX и DX: в CH указывается верхняя строка, а в DH -
нижняя; в CL указывается левая позиция (столбец, а в DL - правый. Атрибуты
изображения пустых строк указываются в регистре BH. Ниже приводятся общие
сведения о составе и содержимом регистров.
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 6 AL = количество сдвигаемых строк
CH = номер строки верхнего левого
угла окна
CL = номер позиции (столбца) верхнего
левого угла окна
DH = номер строки нижнего правого угла
окна
DL = номер позиции (столбца) нижнего
правого угла окна
BH = атрибуты изображения пустых
строк
____________________________________________________________
"Прокрутка" содержимого окна как правило выполняется в два этапа. Как
только новая строка подготовлена к записи в окно, осуществляется вызов
функции обслуживания с кодом 6 (или 7) для перемещения текущего
содержимого окна. После этого в новую строку заносится нужная информация.
Для этого используются функции обслуживания "установка курсора" и "запись
символа". Ниже приводится пример, иллюстрирующий излагаемые положения.
DEBUG; вызов программы-отладчика DEBUG
A
INT 10; вызов Ассемблера
[Return]; выход из Ассемблера
R AX; извлечение содержимого регистра AX для просмотра
и изменения
06 03; установка функции обслуживания с кодом 6, количество
сдвигаемых строк 3
R CX; извлечение содержимого регистра CX для просмотра
и изменения
050A; установка верхнего левого угла: строка 5, столбец 10
R DX; извлечение содержимого регистра DX для просмотра
и изменения
1020; установка правого нижнего угла: строка 16, столбец 32
D 0 L 180; заполнение экрана
G 100 102; выполнение прерывания 10, стоп.
Следующие три функции обслуживания предназначены для манипулирования
символами. С помощью этих функций осуществляются операции ввода-вывода без
непосредственного обращения из пользовательских программ к области
памяти,в которой хранится закодированный образ экрана дисплея. В связи с
уже упоминавшимся ранее аспектами вывода информации на экран дисплея путем
прямой модификации содержимого памяти, хранящей копию изображения, здесь
следует заметить, что использование этих функций делает программы
пользователя более мобильными и менее зависимыми от особенностей Вашего
компьютера. Рассмотрим эти функции более подробно.
Девятая функция обслуживания (функция обслуживания с кодом 8)
осуществляет считывание символа и атрибута, соответствующих текущей
позиции курсора. Как и в случае некоторых других функций обслуживания,
здесь следует указать номер используемой страницы (несмотря на то, что
страница применяется только к текстовому режиму цветного графического
дисплея). Функция обслуживания 8 работает как в графическом, так и в
текущем режимах; более детальные сведения, касающиеся отображения символов
в графическом режиме приведены в следующей главе. Заметим лишь, что
поскольку в графическом режиме атрибут изображения отсутствует (это
понятие применимо лишь к текстовому режиму, либо к монохромному дисплею),
то его считывание не осуществляется.
Особенность этого режима состоит в том, что одни и те же таблицы
изображения символов, используемые для их записи, используются также и в
случае их распознавания путем сличения. Распознование осуществимо даже в
случае создания своего собственного набора графических символов.
Код символа ASCII заносится в регистр AL. Если символ не
соответствует кодам ASCII, то в графическом режиме в регистр заносится 00.
Атрибуты изображения заносятся в регистр AH. Страница изображения
указывается в регистре BH. Для работы в графическом режиме установку
страницы осуществлять не следует.
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 8 BH = активная страница изображения
(для графического режима не требуется)
AL = символ ASCII, считанный из позиции,
указанной курсором
AH = атрибут текстового символа
____________________________________________________________
Функция обслуживания с кодом 9 предназначена для записи символа (или
нескольких его копий) и атрибута. Символ задается в регистре AL, а атрибут
текстового режима или цвет графического режима заносится в регистр BL.
Количество копий символов помещается в регистр CX.
Для текстовых режимов в регистре BH должна быть указана страница
изображения; графические режимы этого не требуют.
Символ и его атрибуты цвета записываются столько раз, сколько
требуется (начиная с текущей позиции курсора). Курсор при этом не
перемещается, запись производится в последующие позиции экрана. В
текстовом режиме при дублировании символов может быть организован переход
на следующую строку. В графическом режиме такая возможность отсутствует.
Описываемая функция обслуживания весьма полезна как в одиночном так и
групповом режимах. Групповой режим часто используется для оперативного
вывода пробелов или других повторяющихся символов (например,
горизонтальных линий). Если требуется сформировать символ в единственном
экземпляре, то следует установить счетчик в CX равным 1. Если его значение
равно 0, то число повторений есть величина переменная.
Отличия функции обслуживания с кодом 9 от функции обслуживания с
кодом 14 состоит в следующем: имеется возможность управлять атрибутами
цвета, отсутствует автоматическое отображение курсора при записи символа.
В графическом режиме цвет указанный в регистре BL, является цветом
собственно пикселя, входящего в состав рисунка символа. Если седьмой бит
равен 1, то биты в BL, определяющие цвет, объединяются с битами цвета
текущего пикселя при помощи операции "исключающего или" (XOR). Такой
подход гарантирует отличие полученного цвета от прежнего, обеспечивая
четкость изображения. Если 7-й бит в регистре BL равен 0, то цвет в BL
заменяет существующие цвета пикселей. Сказанное справедливо также в
отношении функций обслуживания с кодами 10 и 12.
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 9 AL = символ ASCII, предназначенный
для вывода на экран
BL = атрибуты символа, выводимого на
экран
BH = активная страница изображения (в
графических режимах отсутствует)
CX = число записываемых символов и
атрибутов
____________________________________________________________
Функция обслуживания с кодом 10 ("запись символа") отличается от
предыдущей только тем, что не позволяет в текстовом режиме изменять
существующие атрибуты цвета. Однако для графического режима регистр BL
должен содержать атрибуты цвета. Таким образом название этой функции не
совсем корректно. На функции обслуживания с кодами 9 и 12 распространяются
одни и те же правила работы с цветом в графических режимах: любой цвет
можно использовать либо непосредственно, либо в комбинации с существующим
цветом (операция XOR).
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 10 AL = символ ASCII, выводимый на
экран
BL = атрибуты цвета для
графических режимов
BH = активная страница
CX = число записываемых символов
____________________________________________________________
Функция обслуживания с кодом 11 ("установка палитры") предназначена
для выбора одной из двух графических палитр среднего разрешения. Прежде
чем передать управление этой функции обслуживания следует загрузить в
регистр BH идентификатор палитры, а в регистр BL - значение цвета.
Напомним здесь, что в графических режимах (режимы 4 - 6) каждый
пиксель на экране имеет свой цвет. Цвет устанавливается в основном тем же
способом, что и атрибуты в текстовых режимах, однако имеются некоторые
отличия. Во-первых, пиксели не могут мерцать. Во-вторых, поскольку каждый
пиксель является дискретной цветной точкой, то не существует ни очертания,
ни фона; просто каждый пиксель имеет тот или иной цвет. Когда, в
графическом режиме формируется текст, то один цвет используется для
пикселей, из которых составляется фон, а другой для пикселей, из которых
составляются символы.
Примечание: Специфика использования графического режима в языке
Бейсик дает основание считать, что здесь возможен фоновый цвет. На самом
деле это не так.
Для каждого графического режима существуют заранее определенные
наборы цветов, известные как палитры. Стандартные палитры можно изменять в
компьютере IBM PC/jr или в установленном графическом адаптере; обычный
цветной графический адаптер такой возможности не имеет. Если цвета палитры
для любого графического адаптера определены, то цвет каждого пикселя
выбирается из имеющихся цветов путем установки значений битов,
определяющих цвет пикселя. В 2-х цветном режиме имеется один бит для
каждого пикселя и цвет пикселя задается в виде О или 1. В 4-х цветном
режиме предусмотрены два бита, принимающие значения от О до 3. В 16-ти
цветном режиме цвет задается с помощью 4 битов, хранящих значение от 0 до
15.
Одна из модификаций функции обслуживания с кодом 11 применима к
текстовым режимам, все остальные - только к графическим. Для текстовых
режимов справедливо следующее правило: если BH=0, то BL указывает цвет
окружения текстовой области, выбранной из полной 16-ти цветной палитры.
Для любого графического режима, если BH=0, то BL указывает цвет фона и
цвет окружения. Окружение эквивалентно произвольной области экрана, если
речь идет о цвете фона. Значение BL может быть выбрано из полной 16-ти
цветной палитры.
Если BH=1, то BL определяет палитру. Для цветного графического
адаптера это применимо только к режиму 4 (среднее разрешение 4-х цветная
графика). Для более совершенных графических адаптеров, в том числе и для
PCjr, это положение распространяется и на все остальные режимы. Здесь мы
рассматриваем только стандартные 4-х цветные палитры, которые характерны
для режима 4 (палитры 0 и 1).
Палитра 0:
0 - текущий цвет фона
1 - зеленый (2)
2 - красный (4)
3 - коричневый (6)
Палитра 1:
0 - текущий цвет фона
1 - циан (3)
2 - пурпурный (5)
3 - белый (7)
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 11 BH = указатель палитры (0 или 1 для
среднего разрешения
BL = цвет или палитра использования
с указателем цвета
____________________________________________________________
Функция обслуживания с кодом 12 (C/16) предназначена для записи
пикселя. Поскольку положение курсора, используемое функциями обслуживания
с кодами 9,10,14, рассматривается в контексте символов, то здесь
необходимо указывать строку развертки и позицию (столбец) пикселя.
Координаты пикселя отсчитываются от верхнего левого угла экрана (0,0).
Номер строки развертки, для которого требуется один байт указывается в
регистре DL, для номера столбца одного байта недостаточно - ему отведен
регистр CX.
Цвет задается в регистре AL и может быть использован либо
непосредственно, либо в сочетании с другими цветами (операция XOR).
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 12 AL = код цвета пикселя (0 - 15)
DL = номер строки пикселя
CX = номер столбца пикселя
____________________________________________________________
Функция обслуживания с кодом 13 (D/16) предназначена для чтения
пикселя, точнее для получения информации о его цвете. (Для сравнения
напомним, что процедура обслуживания с кодом 8 формирует на выходе как код
цвета, так и код символа ASCII). Ко
...Поділитися у соцмережах