вывода языков высокого уровня (Паскаль и другие) обладают явными
преимуществами.
В случае использования средств вывода языков высокого уровня (Паскаль
и другие) возникает одна особенность. Вывод информации всегда
осуществляется с учетом положения курсора. Поэтому, если производится
манипулирование курсором с помощью функций обслуживания BIOS-ПЗУ,
описываемых в параграфе 8.11, то это вполне согласится со спецификой
работы средств вывода языков высокого уровня.
Таким образом, всегда следует придерживаться разумного сочетания двух
основополагающих принципов работы: использование средств вывода базового
языка программирования и достижения на этой основе высокого уровня
контроля отображаемых данных и отказ от непосредственного использования
кодированного образа экрана в памяти дисплея.
Придерживаясь этих концепций, можно достичь высокого уровня контроля
за отображаемой информацией (в первую очередь это относится к атрибутам
отображения); это может служить хорошей основой для построения
высокомобильных систем программного обеспечения для персональных
компьютеров.
8.10. Псевдографический режим
Символьная графика, или псевдографика представляет собой интересную и
эффективную альтернативу использованию полномасштабных графических
возможностей цветного графического дисплея.Программы, написанные в расчете
на использование псевдографических возможностей имеют важное преимущество,
они не зависят от типа используемого дисплея (черно-белый или цветной
графический).
Под псевдографическими изображениями понимаются такие изображения,
которые создаются на базе расширенного символьного набора кода ASCII.
Следом за стандартными символами ASCII (первые 128 символов) расположены
еще 128 символов, имеющих особую конфигурацию. Примерно половина этих
символов предназначена для представления чертежей и рисунков.
Прежде всего речь идет о прямых. В ASCII предусмотрен полный набор
символов, позволяющих вычерчивать контуры прямоугольников, диаграмм и схем
одиночными и двойными линиями. Многие программы для IBM/PC, включая
демонстрационные программы, написанные на Бейсике и поставляемые в составе
DOS, используют символы прямых, поэтому многим они знакомы.
8.11 Средства управления видеотерминалом уровня BIOS-ПЗУ
Ниже описываются функции обслуживания видеомонитора, реализуемые
средствами BIOS-ПЗУ. Ряд этих функций относится к графическим режимам,
которые будут детально рассмотрены в следующей главе; здесь мы опишем их
лишь вкратце.
Существует категория читателей, которые непосредственно не будет
использовать функции обслуживания, им важно понимать принципы и
возможности системы.
BIOS-ПЗУ предлагает пользователю шестнадцать различных функций
обслуживания для видеомониторов. Доступ к этим функциям осуществляется
через прерывание с номером 16(10/16). В данном параграфе мы рассмотрим все
эти прерывания и осмыслим их назначение. Программы 8.101 и 8.102,
расположенные на дискете, прилагаемой к данной книге, представляют собой
процедуры, написанные на языке ассемблера (процедуры первого уровня), для
обращения к функциям обслуживания видеодисплея, реализуемым с помощью
BIOS-ПЗУ; кроме того, они содержат определения Паскаля и процедуры второго
уровня, предназначенные для облегчения использования первых.
Первая процедура обслуживания видеомонитора имеет код обслуживания 0,
она используется для фиксации режима работы видеомонитора. Возможны восемь
различных режимов работы видеомонитора, причем семь режимов ориентированы
на цветной графический дисплей, а один на монохромный. Ниже приводится
список режимов работы (в дальнейшем мы прокомментируем позиции этого
списка).
____________________________________________________________
Код Режим
____________________________________________________________
0 Текстовый, 40-позиционный, черно-белый (цвет
подавлен) режим для цветного графического дисплея
1 Текстовый, 40-позиционный, цветной режим для
цветного графического дисплея
2 Текстовый, 80-позиционный, черно-белый (цвет
подавлен) режим для цветного графического дисплея
3 Текстовый, 80-позиционный, цветной режим для
цветного графического дисплея
4 Графический, 320 х 200 пикселей, цветной режим
для цветного графического дисплея
6 Графический, 640 х 200 пикселей, черно-белый режим
для цветного графического дисплея
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 = конечная строка развертки курсора