Компьютерные науки - Учебники на русском языке - Скачать бесплатно
прекрасно обходятся без них. Планируя использование персонального
компьютера следует помнить, что большинство дисплеев - текстовые.
Различные аспекты излагаемой проблемы в настоящей и следующих главах
в той или иной степени касаются использования различных типов дисплеев.
Для того, чтобы избежать возможных недоразумений, кратко опишем их
возможности.
Любые сведения, относящиеся к одноцветному адаптеру, касаются только
этого адаптера. Они не распространяются на различные аспекты
воспроизведения цвета, включая использование черно-белого монитора с
цветным графическим адаптером. Черно-белый монитор можно рассматривать в
качестве монохромного; он однако не используется с одноцветным адаптером.
Термин "монохромный" (одноцветный) используется только для монохромного
экрана фирмы IBM.
Специфика работы цветного графического адаптера не применима к
монохромному дисплею. Все цветные дисплеи разрабатываются с учетом этой
специфики. Большинство сигналов цветного графического адаптера
воспринимается черно-белым монитором; исключение составляют сигналы
цветности.
Большинство черно-белых мониторов обрабатывают сигналы цветности
неудовлетворительно. Черно-белые мониторы, формирующие осмысленное
изображение при получении цветных сигналов большая редкость. Поэтому любая
программа, которая может быть использована на компьютере с черно-белым
монитором не должна использовать цвет; в противном случае она должна
обладать способностью преобразовать любой цвет в черно-белую палитру.
Цветные телевизоры, как правило, имеют более низкую разрешаемую
способность по сравнению с обычными цветными мониторами компьютеров.
Поэтому цветные телевизоры могут работать только в режиме самой низкой
разрешающей способности, предусмотренной в IBM/PC, а именно в режиме 40
позиционных строк. В большинстве случаев цветной телевизор не позволяет
использовать всех возможностей IBM/PC; наиболее важные программы не могут
выполняться на компьютере, оборудованном цветным телевизором. Как правило
цветной телевизор используется программами реализации компьютерных игр,
ориентированных на использование интерфейса с накопителем на магнитной
кассете.
8.2. Принципы формирования изображения
Прежде чем перейти к дальнейшему рассмотрению текстового режима
работы дисплея, мы для уяснения сути дела кратко рассмотрим некоторые
принципы представления изображений на экранах видеодисплеев. Существует
два основных способа вывода информации из персонального компьютера на
экран видеотерминала. В первом случае компьютер рассматривает экран
дисплея в качестве обычного устройства ввода/вывода. При таком подходе
компьютер выдает контроллеру дисплея различные команды, включая команды
вывода текстовой информации. Ниже приводится некоторая упрощенная форма
этих команд:
ОЧИСТИТЬ ЭКРАН
ВЫСВЕТИТЬ С 15 ПОЗИЦИИ 10 СТРОКИ СЛЕДУЮЩИЙ ТЕКСТ :
"В случае готовности нажмите клавишу "ввод"" ...
ПЕРЕМЕСТИТЕ КУРСОР В 43 ПОЗИЦИЮ 10-й СТРОКИ
Наиболее существенный аспект взаимодействия такого рода состоит в
том, что в этом случае дисплей рассматривается просто как и любое другое
периферийное устройство. Разумеется, дисплей может выполнять и ряд
специфических команд, таких, которые не может выполнять принтер -
например, команду "ОЧИСТИТЬ КАДР" - и все же принцип взаимодействия с
компьютером остается неизменным.
Преимущество описанного подхода состоит в том, что использование
команд позволяет рассматривать экраны дисплеев в одном ряду с другими
устройствами ввода/вывода. Вследствие этого программное обеспечение
поддержки видеодисплеев становится проще и более унифицированным; это
позволяет универсальным образом использовать множество различных
компьютерных терминалов. Недостаток такого подхода в том, что компьютер
теряет непосредственную связь с экраном дисплея и оказывается не в
состоянии "творить чудеса" на экране. Фирма IBM пошла по пути "сотворения
чудес" и поэтому выбрала другой подход подключения дисплея к IBM/PC.
Этот подход известен как подход, связанный с регенерацией изображения
на основе образа экрана хранящегося в памяти. В этом случае компьютер и
дисплей совместно используют некоторое пространство общей памяти.
Электронные схемы дисплея постоянно производят опрос (считывание) памяти и
сразу же отображают результаты на экране. При таком подходе компьютерная
программа может осуществлять вывод информации на экран путем простого
изменения содержимого памяти. Аналогично, считывание информации с экрана
дисплея может осуществляться путем обычного считывания содержимого общей
памяти. Таким образом, экран дисплея представляется фактически областью
памяти и выборка/занесение информации из(в) память означает считывание или
запись информации с(на) экран дисплея.
В персональном компьютере фирмы IBM фактически используется смешанный
подход. Для отображения данных на экране используется хранимый в памяти
образ экрана (карта), а для управления различными аспектами отображения
используется система команд. В дисплейных системах с жесткой реализацией
механизма отображения содержимого памяти даже управление курсором
осуществляется путем изменения содержимого общей памяти. В компьютере
IBM/PC позиционирование курсора осуществляется с помощью команд, даваемых
схемой управления контроллером. Команды используются в следующих случаях:
установки размера мерцающего курсора, очистки и обновления экрана, а также
для изменения режима работы дисплея (текстовый-графический, 40 позиционный
- 80 позиционный).
Работа в режиме хранимого в памяти образа экрана (карты) связана с
двумя потенциальными неудобствами (однако фирме IBM удалось найти способ
их преодоления). Первое состоит в том, что этот образ требует для
размещения значительных ресурсов оперативной памяти; для восьмиразрядных
компьютеров старого исполнения с малой оперативной памятью это
представляло серьезную проблему. В компьютере IBM/PC эта проблема решается
в два приема. Во-первых, расширением пространства адресуемой памяти до
миллиона байт. Во-вторых, выделением дисплею своей собственной встроенной
памяти, с тем чтобы не использовать обычную память, предназначенную для
хранения программ и данных.
Существуют и более веские основания для обеспечения дисплейного
адаптера своей собственной памятью и следовательно разрешение проблемы
конфликтов при доступе к памяти. Дело в том, что дисплей с хранимой копией
изображения (образа экрана) в памяти должен постоянно осуществлять
операции чтения из памяти и, следовательно, конкурировать за эту память с
микропроцессором. В этом случае образуется очередь за обладание схемными
ресурсами доступа к памяти.
Фирма IBM решила эту проблему путем выделения дисплею своей
собственной памяти и организовав доступ к этой памяти через два порта
ввода-вывода. Такой подход обеспечивает возможность быстрого доступа к
общему полю памяти и со стороны процессора и со стороны дисплея.
Если внимательно присмотреться к экрану в момент генерации кадра
изображения, то можно заметить что большую часть времени экран дисплея
остается совершенно чистым, и только в некоторых случаях возникает нечто
вроде быстро исчезающей помехи, как если бы курсор попытались быстро
переместить через весь экран дисплея. Такой эффект возникает как результат
попыток одновременного доступа к памяти со стороны компьютера и со стороны
дисплея. Опасного в этом ничего нет, любопытен лишь сам эффект и не более.
Взяв за основу дисплей, хранящий копию изображения в памяти, закрепив за
дисплеем свою собственную область памяти и обеспечив двусторонний вход в
память фирма, IBM решила задачу визуализации информации наилучшим образом.
Можно было бы, правда, обеспечить и более высокую разрешающую способность
дисплея в текстовом режиме, а также реализовать пиктографический режим,
хотя бы в том объеме как это было впервые сделано для рабочей станции
"Стар" (STAR) фирмы "Ксерокс" или для компьютера "Лиза" ( Lisa) фирмы
"Apple".
В базовом варианте распределения памяти для IBM/PC под память дисплея
отводилось 128Кбайт. Это верный признак того, что фирма IBM намеривалась
реализовать все эти возможности.
Это все, что следует знать читателю, прежде чем приступать к более
глубокому изучению вопросов отображения информации на экране дисплея. В
следующем параграфе мы изложим наши взгляды на принципы построения
графических систем, а затем рассмотрим детали построения хранимого образа
экрана и обсудим такие понятия как "страницы" и "атрибуты".
Память дисплея физически размещается вместе с другими схемами дисплея
на плате адаптера. Однако логически (для центрального процессора) она
является частью основного адресного пространства компьютера. Для дисплея
отводится 128Кбайт памяти в блоках А и В с адресами А0000(16) - BFFFF(16),
однако оба стандартно поставляемых дисплейных адаптера используют лишь два
небольших фрагмента этой области памяти. Одноцветный адаптер использует 4К
дисплейной памяти, начиная с адреса B800. Оставшаяся память, в частности,
64-килобайтный блок от A000 до B000 отводится для развития возможностей
дисплея, например, для использования дисплейного графического адаптера.
Одноцветный и цветной графические адаптеры используют для вывода
информации на экран дисплея так называемый битовый образ изображения
(экрана) хранящегося в описанной выше памяти. Каждая ячейка области памяти
соответствует определенной позиции экрана, между ними установлено взаимно
однозначное соответствие.
Схемы дисплея периодически считывают информацию из памяти и выводят
ее на экран. Программа может непосредственно изменять содержимое памяти,
тем самым изменяя содержимое экрана. Контроллер экрана служит для связи
памяти дисплея с монитором, преобразуя поток получаемых из памяти битов в
электронные пучки, направляемые в определенные точки экрана. Точки экрана
называть пикселями, пэлами или элементами изображения. Они образуются при
столкновении потока электронов с люминофором поверхности
электронно-лучевой трубки. Поток электронов испускается электронной пушкой
и построчно перемещается сверху вниз. По мере его движения контроллер
электронно-лучевой трубки модулирует его интенсивность в зависимости от
комбинации битов, полученных из памяти дисплея.
Видеосхема обновляет экран 60 раз в секунду, делая меняющееся
изображение отчетливым и ясным. В конце каждого цикла обновления экрана
электронный пучек должен переместиться из нижнего правого угла экрана в
его верхний левый угол. Это перемещение называют вертикальным обратным
ходом. Во время обратного хода луча его подача на поверхность экрана
блокируется.
Время обратного вертикального хода луча составляет 1,25мсек и может
учитываться программистом.
8.3. Структура копии изображения экрана
Выше уже говорилось о том, что дисплеи компьютера IBM/PC относятся к
классу дисплеев, хранящих битовый образ экрана в памяти (карту) памяти. В
связи с этим обстоятельством имеет смысл рассмотреть принципы построения
этого образа.
Описываемый здесь образ экрана в памяти применим как к монохромному,
так и к цветному графическому адаптерам, работающим в текстовом режиме.
Графические режимы будут рассмотрены в следующей главе с учетом
особенностей хранения изображений в памяти (Более подробные сведения о
различных режимах работы цветного графического адаптера и некоторые
интересные возможности описаны в разделе 8.11.).
Поскольку дисплейные адаптеры используют специальную двухвходовую
память, не следует удивляться тому, что она размещается особым образом.
Физически память дисплея размещается на схемной плате и плате расширения
адаптера. Схемная плата содержит также микросхему контроллера дисплея и
все вспомогательные электронные схемы. Эта плата, подобно другим платам
для IBM/PC, вставляется в один из дополнительных разъемов, предназначенных
для подключения вспомогательного оборудования.
Несмотря на то, что память дисплея физически размещается на плате
контроллера дисплея, логически она ничем не отличается от обычной памяти в
том смысле, что допускает считывание и запись информации путем обращения
по адресу. Дисплеям двух различных типов отводятся различные участки
памяти (об этом уже говорилось при обсуждении основ использования памяти
персонального компьютера в главе 3), поэтому они могут быть одновременно
подключены к одному компьютеру. Монохромному дисплею отводится область
памяти, начиная с шестнадцатеричного адреса B000, а цветному графическому
- с адреса B800.
Читателю, знакомому с Бейсиком, напомним, что доступ к памяти
осуществляется с помощью операторов PEEK и POKE после того, как установлен
нужный указатель сегмента
10 DEF SEG = &HB000 (память монохромного дисплея)
20 DEF SEG = &HB800 (память цветного графического дисплея)
После приведенных кратких сведений о принципах работы дисплея с
хранимым образом экрана в памяти имеет смысл еще раз обратиться к
диаграмме на рис. 8.1.
Процесс отображения содержимого экрана в память начинается с
определения позиций отдельных символов экрана. Каждой позиции экрана
соответствует два байта памяти. Совместно эти два байта задают собственно
объект подлежащий, отображению на экране и то, как его следует отобразить.
Первый из двух байтов (имеющий четный адрес) специфицирует собственно
объект (т.е. "что" отображается на экране). Это шестнадцатеричный код
символа ASCII. Второй байт (имеющий нечетный адрес) специфицирует режим
отображения первого байта (т.е. "как" символ отображается на экране). Это
так называемый байт-атрибутов. В случае цветного графического адаптера
байт-атрибутов управляет цветом. В случае монохромного адаптера
байт-атрибутов управляет яркостью и подчеркиванием символа; это своего
рода монохромные эквиваленты цвета. Кроме того байт-атрибутов
устанавливает режим мерцания символа (для адаптеров обоих типов).
Детальное описание байта-атрибутов приводится в разделах 8.5 и 8.6.
Первой позиции экрана (верхний левый угол соответствует таким образом
два байта в памяти дисплея со смещением 0. Следующей позиции (смещенной на
одно знакоместо вправо) соответствуют два байта памяти со смещением 2, Так
продолжается до конца первой строки экрана дисплея. Для монохромного
дисплея, а также для цветного графического дисплея, работающего в 80-ти
позиционном режиме последнему символу строки соответствует пара байтов со
смещением 158 (т.е. 79х2). Для цветного графического дисплея, работающего
в 40-позиционном режиме, последней позиции первой строки соответствует
пара байтов памяти со смещением 78 (т.е. 39х2).
При переходе к новой строке позиции экрана продолжают отображаться
парой смежных байтов таким образом, что первой позиции следующей строки
соответствует пара байтов, расположенных непосредственно вслед за байтами
последней позиции предыдущей строки. Область памяти используется без
промежутков, т.е. какие-либо пробелы между концом одной строки и началом
другой строки - отсутствуют. Разумеется, речь идет о физических
промежутках, поскольку в логическом плане вполне естественно говорить о
вычислении местоположения границы между строками.
Все сказанное выше распространяется как на 80-ти позиционный, так и
на 40-позиционнный режимы. Поэтому при переходе из одного режима в другой
должна измениться структура расположения в памяти позиций и строк.
Монохромный и цветной графический дисплеи в 80-ти позиционном режиме
требуют 4000 байтов: 80 позиций х 2 байта х 25 строк. Цветной графический
адаптер в 40-позиционном режиме требует вдвое меньшей памяти, т.е. порядка
2000 байт.
Следствием такой схемы хранения образа экрана в памяти является то,
что отображаемые символы могут располагаться в любом другом месте памяти.
А это, в свою очередь, создает неудобства при перемещении сообщений в
память дисплея. Сообщения или любые другие строки отображаемых данных не
могут быть перемещены по месту назначения за один шаг, если форма их
хранения в программах не предполагает наличия байтов-атрибутов. Сообщение,
таким образом, должно быть представлено в виде чередующейся
последовательности содержательных и атрибутивных байтов. Поскольку большая
часть данных выводятся на экран в виде строк символов с одними и теми же
атрибутами, то возникает потребность в специальных программах перемещения
данных в нужную область памяти, которые бы попутно дополняли их нужными
атрибутами. Листинг 8.2 содержит тексты некоторых служебных программ на
Паскале, реализующих эти функции; в параграфе 8.7. этот вопрос рассмотрен
более детально.
Поскольку в памяти, отведенной дисплею, отсутствуют физические
границы между строками, то могут быть автоматически перенесены в следующие
строки, путем простого использования очередных адресов. Это довольно
эффективный способ решения проблемы переноса сообщений с минимальными
затратами. В тех случаях, когда важно фиксировать факт достижения
сообщением конца строки, следует предусматривать в программах проверку и
обработку этого условия. Для использования монохромного адаптера требуется
4000 байт памяти. Это приблизительно соответствует 4К (4096). Лишние 96
байтов не используются и остаются свободными. Цветной графический адаптер
требует значительно большего объема памяти, а именно, 16К. Это объясняется
большими потребностями памяти.
Объем памяти, используемой цветным графическим адаптером, составляет
16К байт. Такой значительный объем памяти определяется потребностями
графических режимов, детально описываемых в следующей главе. Персональный
компьютер использует излишки памяти (когда эта память реально не
используется в графических режимах) путем организации (в текстовом режиме)
набора копий кадров экрана. Эти копии принято называть страницами. В
следующем параграфе мы рассмотрим принципы организации и функционирования
страничного механизма.
8.4. Страничный механизм цветного графического дисплея
Материалы настоящего параграфа в первую очередь относятся к
компьютерам IBM/PC, снабженным цветным графическим адаптером. Однако, по
мере изложения станет ясно, что эта концепция может быть распространена и
на систему с монохромным адаптером. Поэтому, если читателя интересуют
только системы второго класса (либо универсальные системы) данный
параграф, несомненно, представляет интерес.
В отличие от монохромного адаптера, объем памяти которого в точности
соответствует размеру заполненного кадра дисплея, цветной графический
адаптер располагает памятью гораздо большего объема, чем это требуется для
работы в текстовом режиме. Это объясняется тем, что для работы в
графическом режиме требуются значительные ресурсы памяти. Фирма IBM пошла
по пути реализации страничного механизма работы с кадрами изображения.
Страница представляет собой образ (копию) содержимого экрана дисплея
в памяти компьютера. В 80-ти позиционном текстовом режиме цветной
графический адаптер требует памяти в 4 раза (а в 40 - позиционном
текстовом режиме в 8 раз ) меньше фактически имеющейся. Поэтому память
этого адаптера может хранить либо 4, либо 8 страниц.
Любая страница изображения представляет собой полную копию
содержимого экрана дисплея, включающую байты данных, байты-атрибутов и
построчно-логическое разбиение символов. Работая в 80-ти позиционном
режиме, цветной графический адаптер может хранить четыре полных копии
одного кадра экрана монохромного адаптера. При работе в 40 - позиционном
режиме число таких кадров увеличивается до 8; при этом каждый кадр
обладает вдвое меньшей информационной емкостью.
Информация, хранящаяся в каждой из четырех или восьми страниц, может
в любой момент времени быть отображена на экране. Остальные страницы в это
время, подобно актерам, ожидающим выхода на сцену, ждут своей очереди.
Получив команду, дисплейный адаптер переключается с одной страницы на
другую, таким образом мгновенно обновляя содержимое экрана.
Пользовательская программа может формировать данные, подлежащие
отображению на дисплее, путем обычной записи по соответствующему адресу,
либо путем использования функций обслуживания BIOS, позволяющих
оперировать с нужной страницей. После того, как актуализация данных
закончена, сформированный в памяти образ экрана может быть мгновенно
отображен на дисплее путем переключения адаптером активной страницы. Такой
подход делает программу более оперативной, поскольку пользователь не
ощущает трудоемкого процесса формирования образа экрана - он видит лишь
быстрое появление результата.
Возможности программ в части использования страничной техники
представляют довольно интересное явление. Если программа использует
несколько стандартных форматов для представления информации, то она может
сформировать каждый формат только один раз и сохранить его в страничной
памяти дисплея. В случае возникновения потребности перехода от одного
формата к другому программа может, сохранив текущую страницу на экране,
форматировать данные другой страницы и завершив этот процесс, переключить
адаптер дисплея на новую страницу. Такого рода техника работы с памятью
дисплея создает впечатление, что программа обладает более высокой
производительностью, поскольку изображение появляется мгновенно. В
выигрыше оказывается и пользователь программы, получая более стабильное
изображение на экране дисплея. Поскольку мелкие изменения не допускаются,
то надежность человеко-машинного интерфейса повышается - в этом случае нет
необходимости каждый раз отыскивать на экране места возможных изменений и
проверять все ли на месте.
Еще одна потенциальная сфера использования страничной техники при
работе с дисплеем состоит в более совершенной передаче динамических
изображений. Если же изменения производятся "за кадром" и представляются
пользователю в виде цельного изображения путем замены активной страницы,
то динамический характер изображения передается более плавно.
Дисплейные страницы пронумерованы от 0 до 3, либо от 0 до 7 в случае
более мелких 40 позиционных страниц. Нулевая страница, как это можно
предположить, располагается в начале области памяти дисплея; вслед за ней
располагаются остальные страницы. Началу каждой страницы соответствует
адрес кратный 1К. Поясним это на примере. Дисплей, работающий в 80-ти
позиционном режиме, требует для каждой страницы 4000 байт памяти (25 строк
х 80 позиций х 2 байта на позицию). Первая страница, то есть страница,
имеющая 0 номер, располагается в памяти цветного графического адаптера с 0
смещением ( это соответствует параграфу с адресом B800). Вторая страница,
то есть страница, имеющая номер 1-й, размещается не вплотную за первой
страницей (с относительного адреса 4000), а с ближайшего адреса кратного
одному килобайту ( относительный адрес 4К или 4096 байт). В 80-ти
позиционном режиме работы дисплея страницы размещаются с интервалом в 4К
байтов, а в 40-позиционном - с интервалом в 2К байта. На рисунке 8.2.
показано размещение страниц в памяти дисплея.
Управление страничным механизмом дисплея можно осуществлять в рамках
Бейсика. Пользователь, работающий на Паскале такой возможности лишен, если
он не выходит за рамки этого языкового процессора; если же связь с
BIOS-ПЗУ осуществляется через программу, написанную на ассемблере, то эта
задача вполне разрешима. В параграфе 8.11 мы покажем как это делается
(готовая программа записана на дискету, прилагаемую к настоящей книге).
Монохромный дисплей не обладает описанными функциональными
возможностями, однако эта концепция может быть реализована (имитирована) в
обычной памяти. Пользовательские программы могут использовать эту память
для хранения полного образа экрана, своего рода эквивалента дисплейных
страниц. Эти пассивные экранные образы можно переместить в память дисплея
используя средства строковой пересылки микропроцессора 8086/8088.
Пользователям, работающим на Паскале, предоставляется встроенная
процедура MOVESL. Я использовал эту процедуру в ряде своих программ и могу
засвидетельствовать, что загрузка экрана происходит совершенно незаметно
для человеческого глаза - смена изображения производится мгновенно, как и
в случае смены страницы в цветном графическом адаптере. Описанный метод
весьма эффективен - настоятельно рекомендую его применять во всех
программах, не предъявляющих особых требований к объему используемой
памяти.
Причина, по которой лишь немногие программы используют страничный
механизм цветного графического адаптера очевидна: большинство программ для
IBM/PC должны работать одинаково хорошо как в случае цветного, так и в
случае монохромного монитора.
Эффективное использование страничного механизма может быть достигнуто
только в том случае, если программа специально написана для применения в
составе системы обработки графических образов, либо когда программа
настолько важна, что можно ожидать подстройку аппаратуры под нужды этой
программы. К числу известных примеров относится программа Context MBA.
Следует также иметь в виду, что имитация описанного выше страничного
дисплейного механизма всегда осуществима для любого компьютера IBM/PC,
имеющего достаточный объем памяти.
8.5. Атрибуты изображений
Следом за байтом символа, расположенного в памяти дисплея по четному
адресу расположен байт атрибутов, описывающий особенности отображения на
экране дисплея этого символа. В данном параграфе мы рассмотрим структуру
байта атрибутов и назначение всех его компонентов.
Программа, написанная на Бейсике, приведенная в приложении (листинг
8.1) демонстрирует все возможные комбинации битов байта атрибутов как для
монохромных, так и для цветных графических дисплеев. В процессе выполнения
этой программы у пользователя формируется представление о функциональных
возможностях и особенностях работы с атрибутами изображения.
Байт атрибутов управляет мерцанием символа и его цветом (или
монохромным аналогом цвета). Этот байт состоит из восьми разрядов, причем
каждому разряду отводится своя роль в процессе построения изображения. На
рисунке 8.3 приведена схема, иллюстрирующая назначение каждого разряда.
Существует множество различных способов идентификации отдельных разрядов
байта. Здесь мы будем придерживаться схемы нумерации этих разрядов
слева-направо (см.рис. 8.3).
Все восемь разрядов байта разбиты на четыре класса и рассматриваются
в контексте этого разбиения. Все, что выводится на экран - в конкретную
его позицию - состоит из двух компонентов: собственно символа (очертания)
и его окружения или фона. Поскольку цветной дисплей имеет три основных
цвета (красный, зеленый и синий), то очертанию и фону соответствуют по три
разряда байта-атрибутов, описывающие их цвета (или монохромные аналоги
цвета). Таким образом: разряды с 6-го по 8-й управляют цветом символа, а
разряды с 2-го по 4-й управляют цветом фона. Они и образуют два класса
признаков (из четырех) байта атрибутов.
Оставшиеся два класса признаков фиксируют интенсивность и мерцание
изображения. Под эти признаки отводится по одному разряду. Первый разряд
каждого байта атрибутов описывает мерцание фоновой составляющей позиции
экрана ( если бит установлен в 1, то имеет место мерцание ). Заметим
здесь, что мерцание распространяется только на фоновую составляющую и не
затрагивает собственно очертания символа.
Последний класс признаков (5-й разряд) байта атрибутов предназначен
для управления интенсивностью фона. Если 5-й разряд установлен в 1, то в
случае монохромного дисплея яркость символа будет повышена; в случае
цветного дисплея будет иметь место более яркий и светлый тон. Некоторые
цветные мониторы не используют бит интенсивности цвета; для этих мониторов
яркие фоновые цвета совпадают с обычными.
Для получения разнообразных цветов соответственно устанавливаются или
сбрасываются разряды тех или иных цветов. Так, для получения красного фона
следует устанавливать в"1" разряд красного цвета (6-й разряд), а два
остальных разряда обнулить. Комбинация двух основных цветов дисплея
позволяет синтезировать дополнительные цвета. Смесь зеленого и синего
цветов дает сине-зеленый цвет, так называемый циан. Если все три разряда
находятся в нулевом состоянии, то в результате будет получен черный цвет.
Смесь всех трех основных цветов дает на выходе белый цвет. При
внимательном рассмотрении символов белого цвета на цветном экране можно
различить все три основных цвета.
____________________________________________________________
Порядковый Значение * Функция
номер разряда
____________________________________________________________
1-й 128 Мерцание
2-й 64 Красная ! Фоновый
составляющая ! цвет
3-й 32 Зеленая !
составляющая !
4-й 16 Синяя !
составляющая !
5-й 8 Интенсивность! Фоновый
цвет
6-й 4 Красный ! Цвет
7-й 2 Зеленый ! очертания
8-й 1 Синий ! (символа)
____________________________________________________________
*) Численное значение позиции разряда. Используется в случае задания
атрибута в виде числа. Например: Мерцание (128) зеленого символа (2) на
красном (64) фоне - 128 + 2 + 64 = 194
Рис.8.3. Управляющие атрибуты дисплея
Полный перечень всех возможных цветовых сочетаний будет приведен в
следующем параграфе . По мере рассмотрения различных аспектов, связанных с
использованием атрибутов изображения мы узнаем много нового, в частности,
специфику их работы как в случае цветного графического, так и в случае
монохромного адаптера.
Операционная система DOS обеспечивает нормальный режим работы с
белыми символами на черном фоне даже при наличии цветного экрана
видеомонитора. Большинство программ, работающих под управлением DOS,
генерируют выходные данные в черно-белом варианте. Однако при наличии
программы управления атрибутами изображения (например, программ Reverse и
Screen-Atribute из библиотеки "Нортон Ютилити") можно привести их к
цветному варианту. При работе с цветным монитором я нахожу, что
ярко-желтые символы на синем фоне гораздо меньше утомляют глаза, чем любое
другое сочетание цветов. Поэтому для себя устанавливаю следующую
комбинацию атрибутов: 00011110 (или 1Е в шестнадцатеричной системе
счисления). Воспользовавшись программой, написанной на языке Бейсик (см.
листинг 8.1), Вы имеете возможность сопоставить между собой все допустимые
сочетания цвета очертания символа и его фона и после этого остановить свой
выбор на одном из них.
Фирма IBM выработала оригинальный подход к решению проблемы
совместимости монохромного и цветного дисплеев. Первое, что было сделано -
осуществлен выбор основных технических решений, касающихся цветного
дисплея (наличие трех базовых составляющих цвета для очертания символа и
его фона, а также мерцание и высокая интенсивность); после этого
средствами монохромного дисплея удалось добиться весьма эффективной
интерпретации цветовых составляющих.
Атрибуты монохромного дисплея имеют ряд положительных качеств, им
присущи однако и недостатки, связанные с обеспечением целостности и
совместимости. Проиллюстрируем это положение сначала более простыми
примерами, а затем перейдем к более сложным случаям.
Разряд мерцания (разряд 1), как и разряд яркости, называемый также
разрядом повышенной интенсивности свечения (разряд 5), используется
одинаково как монохромным, так и цветным графическим дисплеем. Если разряд
мерцания установлен в единичное состояние, то отображаемый символ мерцает,
если в единичном состоянии находится разряд яркости, то отображаемый
символ выделяется повышенной яркостью.
Оставшиеся разряды байта атрибутов специфицируют цвета для очертания
и фона символа. Заметим здесь, что для монохромного дисплея понятие цвета
отсутствует. Последнее утверждение не следует понимать буквально,
поскольку, строго говоря, монохромный дисплей имеет два цвета:
зеленовато-фосфорный и черный. Зеленовато-фосфорный (белый) цвет
соответствует свечению люминофора, а черный цвет свидетельствует об
отсутствии свечения. Любая возможная комбинация цветов очертания и фона в
случае монохромного дисплея изображена на экране в виде зеленоватого
символа на черном фоне.
Стандартный набор признаков в случае монохромного дисплея
обеспечивает режим отображения такой же как и в случае цветного
графического дисплея, а именно: белые символы (кодовая комбинация разрядов
цветности 111) на черном фоне (кодовая комбинация разрядов цветности 000);
исключение составляют три особых случая. Любой код цветности ( за
исключением трех случаев рассматриваемых ниже) вызывает последствия,
аналогичные стандартному набору признаков, т.е. свечение зеленоватых
символов на черном фоне.
Два из трех особых случаев, представляются более или менее
очевидными. Если кодовая комбинация признаков соответствует режиму
отображения "черное-на черном" (т.е. все разряды цветности находятся в
нулевом состоянии), то любой отображаемый символ становится невидимым.
Если же кодовая комбинация признаков соответствует режиму отображения
"черное-на-белом" (разряды очертания хранят код 000, а фоновые разряды -
код 111), то имеет место так называемое обратное или реверсное изображение
(черные символы на зеленовато-фосфорном фоне). Здесь имеется полная
аналогия с цветным дисплеем, когда черный символ на черном фоне
неразличим, а изображение черного символа на белом фоне называется
обратным. Вполне естественно ожидать, что четвертая комбинация признаков,
соответствующая режиму белый символ на белом фоне, порождает невидимые
символы. Однако, фирма IBM пошла другим путем. В случае монохромного
дисплея комбинация признаков байта атрибутов, соответствующая режиму белый
символ на белом фоне, фактически сводится к использованию стандартного
формата изображения зеленоватых символов на черном фоне (аналогично тому,
как то происходит в случае всех остальных комбинаций цветовых признаков).
И последний аспект представления информации на экране монохромного
дисплея связан с возможностью подчеркивания. Фирма IBM предлагает своим
пользователям монохромный дисплей, обладающий возможностью подчеркивания
символов. В терминах признаков цветности подчеркивание представляется в
виде синего очертания (код цветности 001) и черного фона (код цветности
000). Собственно цветной графический адаптер не предусматривает реализации
функции подчеркивания, однако сам факт использования синих символов на
черном фоне создает впечатление некоторого акцентирования.
Поскольку монохромный дисплей допускает представление обратных
изображений и реализует функцию подчеркивания, можно ожидать, что
допустимо их сочетание в рамках одного кадра. Однако это не так. Цветовые
комбинации, которые можно было бы здесь использовать (синий символ на
белом фоне или черный символ на синем фоне), интерпретируется системой как
стандартные, ничем не отличающиеся от других цветовых комбинаций.
8.6. Особенности воспроизведения цвета
В данном параграфе мы рассмотрим различные особенности
воспроизведения цвета на цветном видеомониторе, снабженном цветным
графическим адаптером. Следует иметь в виду, что черно-белый монитор с
цветным графическим адаптером цвет не воспроизводит. Здесь следует также
отметить, что многие широко распространенные черно-белые мониторы не
корректно воспринимают сигналы цветного изображения, поэтому информация,
содержащая цветовые компоненты и выводимая на черно-белый монитор, может
оказаться искаженной или невидимой.
Теоретически цветной дисплей компьютера IBM/PC воспроизводит
шестнадцать различных цветов. Это число получается следующим образом.
Во-первых, имеется восемь различных цветовых сочетаний, образуемых тремя
основными цветами - красным, зеленым и синим. Во-вторых, любой цвет
очертания символа может быть воспроизведен в двух режимах; в режиме
нормальной и в режиме повышенной яркости (цвет высокой интенсивности).
Управление этими режимами осуществляется с помощью бита интенсивности.
Таким образом, допускается воспроизведение шестнадцати цветов при
отображении очертания символа и восьми цветов при отображении фона.
(Графический режим, который будет рассмотрен в следующей главе также
допускает использование шестнадцати цветов, однако особенности их
использования для очертания символа и его фона существенно отличаются).
Все шестнадцать цветов на практике никогда не используются. Один из
восьми основных цветов - черный; в связи с этим неясно, что такое черный
цвет повышенной яркости. Фирма IBM называет этот цвет темно серым. В
принципе этот цвет можно воспроизвести на экране цветного дисплея, однако
делается это весьма редко. Таким образом, количество цветов уменьшается до
пятнадцати. Если же учитывать, что не все цветные мониторы используют бит
яркости, то количество воспроизводимых цветов ограничивается только
основными. Фактически это число еще меньше - только семь - поскольку
черный цвет используется редко.
Ниже приводятся все шестнадцать комбинаций цветов, обеспечиваемых
4-мя разрядами, включающими разряд яркости или повышенной интенсивности
свечения.
________________________________________________________________
Яркость Красный Зеленый Синий Номер Цвет Примечание
________________________________________________________________
0 0 0 0 0 Черный !Изображение
!отсутствует
0 0 0 1 1 Синий !
0 0 1 0 2 Зеленый !
0 0 1 1 3 Циан !Сине-зеленый
0 1 0 0 4 Красный !
0 1 0 1 5 Пурпурный !Светло-
!пурпурный,
!состоящий
!из красного
!и синего
0 1 1 0 6 Коричневый!Темно-желтый;
!для
!большинства
!дисплеев -
!желтый
0 1 1 1 7 Светло- !Обычный белый
серый !
1 0 0 0 8 Темно- !Черный,
серый !повышенной
!яркости (!?)
1 0 0 1 9 Светло- !
синий !
1 0 1 0 10 Светло- !
зеленый !
1 0 1 1 11 Циан !Сине-зеленый,
светлый !светлый
1 1 0 0 12 Светло- !
красный !
1 1 0 1 13 Светло- !
пурпурный !
1 1 1 0 14 Желтый !Светло-желтый
1 1 1 1 15 Белый !Белый,
!повышенной
!яркости
________________________________________________________________
В столбце "номер" указывается числовое обозначение цвета,
используемое в языке Бейсик. Числа от 16 до 31 служат для обозначения тех
же цветов, что и числа от 0 до 15, число 16 добавляется для установки
атрибута мерцания.
Для формирования у пользователя более строгого представления об
использовании цвета в программах, приведем здесь краткие сведения о
цветовых возможностях видеомонитора.
Каждый пользователь должен отдавать себе отчет в особенностях
воспроизведения цвета повышенной интенсивности. Такие цвета как циан и
пурпурный зрительно могут восприниматься как более интенсивные, но
поскольку они вдвое ярче основных цветов (красного, зеленого и синего), то
они воспринимаются сравнительно блеклыми. Напомним здесь, что яркость -
это количество испускаемого света. Количество света еще не говорит о
насыщенности цвета - чаще всего это говорит о размытости цвета. В то же
время в отношении желтого цвета справедливо следующее утверждение - чем
ярче цвет, тем выше его насыщенность (интенсивность). Желтый цвет, подобно
красному, зеленому и синему представляет особый цвет.
Комфортность восприятия цвета меняется в зависимости от качества
экрана дисплея и от специфики реакции глаза. Большинство пользователей,
как нам представляется, считают, что синий, красный, желтый и, возможно,
черный относятся к ортогональным цветам, обеспечивающим наибольшую
комфортность восприятия. Следующими (на шкале комфортности восприятия)
цветами являются зеленый и пурпурный. И последними в списке наиболее
комфортных цветов являются циан и белый.
Каждый, кто имеет серьезные намерения в отношении цветовых
возможностей IBM/PC должен довольно внимательно отнестись к выбору цвета и
(по возможности) проверить свои решения на нескольких экранах различных
типов. Неверный выбор может осложнить восприятие информации с экрана
дисплея.
8.7. Режим прямого управления видеомонитором
Существует два основных способа отображения информации на экране
компьютера IBM/PC.
Первый способ, который я буду называть косвенным, состоит в
использовании копии изображения, хранящейся в памяти дисплея. Фирма IBM,
однако относится к этому способу неодобрительно. В первой редакции
руководства по программированию этот способ рассматривается как образец
"дурного тона" в программировании, поскольку программы становятся
зависимыми от аппаратных особенностей IBM/PC. В случае замены типа дисплея
(что является вполне реальным,(см. параграф 8.2) или какой-либо иной
аппаратной модификации пользовательские программы подлежат модификации.
Наиболее эффективный способ генерации изображения на экране дисплея
состоит в использовании функций обслуживания BIOS; в этом случае при любых
модификациях компьютера (либо для последующих моделей IBM/PC)
фирмы-изготовители позаботятся о внесении соответствующих изменений в BIOS
с тем, чтобы пользовательские программы остались неизменными. Следует
однако отметить, что функции обслуживания BIOS-ПЗУ, ориентированные на
работу с дисплеями, не вполне корректны; я даже считаю их малопригодными.
Во многом это объясняется тем, что любая мало-мальски серьезная программа
обходит их и работает непосредственно с памятью дисплея, хранящей
изображение. В отличие от точки зрения фирмы IBM на "дурной тон" в
программировании, я считаю что использование памяти дисплея, хранящей
кодированную копию изображения, вполне обоснованным решением в случае
потребности получения быстрых и сложных изображений. Генерация изображения
на экране дисплея с помощью адекватного образа памяти обладает огромными
преимуществами. Изображение формируется быстро, непосредственно и весьма
эффективно. Процесс генерации протекает достаточно просто. Программа,
приведенная в приложении 8.1, иллюстрирует особенности реализации этого
процесса на языке Бейсик, а текст программы приложения 8.2 содержит ряд
процедур обслуживания, предназначенных для прямого обмена с памятью
дисплея программ, написанных на языке Паскаль. Эти процедуры могут
использоваться в качестве базиса для любых программ обмена с дисплеем,
написанных на Паскале, или большинстве других языков.
Принцип работы таких программ весьма прост - во-первых, программе
необходимо сообщить тип дисплея - монохромный или цветной. Это можно
сделать двумя способами: либо путем опроса пользователя (программа в
процессе своей настройки задает пользователю прямой вопрос), либо путем
опроса операционной системы (программа в этом случае получает доступ к
внутренним таблицам операционной системы, содержащим сведения о типах
устройств).
Используя функцию обслуживания BIOS-ПЗУ (рассматривается в разделе
8.11), можно получить информацию о типе используемого дисплея. Это
наиболее эффективный способ настройки программ.
После определения типа дисплея необходимо сформировать ссылку
(указатель) на соответствующий участок памяти; в случае монохромного
адаптера это адрес шестнадцатеричного параграфа B000, а случае цветного
графического адаптера - B800. В рамках языка Бейсика это можно осуществить
с помощью оператора DEF SEG.В Паскале это делается с помощью
сегментированных типов. Любой из названных способов осуществим весьма
просто.
Поскольку пользователь имеет возможность обращаться к памяти дисплея,
то тем самым у него появляется возможность с одной стороны отображать на
экране нужную ему информацию, а с другой стороны он имеет возможность
считать то, что уже отображено.
Единственное возникающее при этом осложнение - относительная
адресация. Пользователь обязан учитывать наличие байтов-атрибутов
(размещаются по нечетным адресам); если необходимо принимать в расчет
разбивку экрана на строки, то программы должны выполнить соответствующие
вычисления. Если используется страничный механизм дисплея, то следует так
же учитывать особенности размещения страниц его адреса кратным 2К и 4К.
В приложении 8.2 приведены наиболее распространенные модули,
требуемые для программирования на Паскале. Если возникает потребность в
дополнительных модулях, то они могут быть легко добавлены к существующим
по уже известной схеме (см. приложение 8.2).
8.8. Управление курсором
Курсор представляет собой важнейший компонент видеодисплея. Обычно он
используется в качестве индикатора местоположения символа, вводимого с
клавиатуры, однако он используется также и в качестве указателя на
объекты, расположенные на экране. В данном параграфе мы рассмотрим принцип
управления курсором. Первое, о чем мне хотелось бы здесь сказать, связано
с тем, что мерцающий курсор IBM/PC может оказаться неприемлемым для многих
пользователей.
Рассмотрим некоторые альтернативные варианты.
В связи с использованием мерцающего курсора возникает ряд проблем
чисто зрительного восприятия. Компьютер IBM/PC имеет курсор стандартной
формы, появляющиеся на экране при включении компьютера в электрическую
сеть; это небольшое мерцающее пятно, расположенное ниже позиции символа.
Некоторые считают, что такой курсор трудно отыскать на экране, заполненном
информацией .
Существует возможность увеличить размер курсора, доведя его до
размера символа. В качестве образца процедуры увеличения размера курсора
до половины размера символа следует запустить интерпретатор с языка Бейсик
и нажать клавишу Insert (Вставка). С помощью оператора LOCATE можно
установить любой размер курсора. Но при этом оказывается, что большой
мерцающий курсор действует на глаз утомляюще, особенно при длительной
работе.
Мерцающий курсор можно использовать двумя способами. Первый способ
связан с использованием атрибута обратного изображения (шестнадцатеричный
код 70) в отношении той позиции экрана, в которой находится курсор. В этом
случае генерируется большое световое пятно, на фоне которого виден символ;
таким образом, возникает сплошной (имеющий размер символа) немерцающий
курсор. Курсор такого типа хорошо воспринимается в зрительном плане и не
действует утомляюще на глаз. В тех случаях, когда Бейсик работает с
цветным графическим монитором в графическом режиме, оказывается, что
курсор генерируется сходным образом. Объясняется это тем, что графический
режим не предусматривает аппаратной реализации мерцающего курсора, поэтому
Бейсик вынужден имитировать курсор. Но даже в тех случаях, когда
предусмотрен мерцающий курсор, реверсивное изображение считается наилучшим
способом представления курсора (здесь уместно заметить, что текстовый
редактор, использованный при подготовке рукописи этой книги (Vedit), имеет
именно такой курсор).
Второй способ использования курсора особенно уместен, когда программа
выводит на экран перечни (списки) каких-либо информационных объектов.
Назначение курсора состоит не только в фиксации на экране позиции
табуляции (позиции размещения символа), но также и в реализации процедуры
выбора. Последнее характерно для программ обработки меню, списков файлов и
вообще наборов альтернативных вариантов. Для таких случаев я бы предложил
использовать два символа "стрелки", именно CHR$(16) для стрелки,
направленной вправо, и CHR$(17) для стрелки, направленной влево. (Входящая
в состав пакета программ, прилагаемого к данной книге, программа DiskLook,
а также многие другие программы из числа "Нортон Ютилити" используют
правую стрелку).
Если задача генерации искусственного курсора не стоит, то задача
управления курсором практически возникает всегда. Впрочем, в случае
искусственного создания курсора может возникнуть потребность вообще убрать
его с экрана. Курсор обладает двумя характеристиками, подлежащими
управлению: размером и позицией.
В случае аппаратно-генерируемого курсора он представляется в виде
совокупности мерцающих строк из числа строк развертки, генерирующих
отображаемый символ. Поскольку строки, из которых он состоит, не могут
управляться независимо, то у пользователя имеется возможность управлять
лишь группой мерцающих строк. Монохромный дисплей имеет 13 строк
развертки, а цветной графический - 7. Принято нумеровать строки сверху,
начиная с 0 и вплоть до 13 (для монохромного дисплея) или до 7 (для
цветного дисплея). Стандартное положение курсора (в момент запуска IBM/PC)
- 12 и 13-я строки для монохромного дисплея и 7-я строка для цветного
графического дисплея.
Пользователь имеет возможность задать положение курсора путем
выделения произвольного количества этих строк, указав начальный и конечный
номер строк развертки. Курсор, таким образом, может быть полноразмерным
или занимать верхнюю, среднюю и нижнюю часть позиции символа.
Если номер начальной строки больше номера конечной строки (например:
начальная строка имеет номер 12, а конечная строка номер 2), то курсор
будет образован следующим образом: используются строки развертки,
начинающиеся с начальной строки вплоть до конечной строки, а затем берутся
самые верхние строки, вплоть до конечной строки. Таким образом,
генерируется курсор весьма причудливой формы, состоящий из двух частей -
верхней и нижней. Это весьма необычная конструкция, и у Вас может
возникнуть желание посмотреть на нее; я бы, однако, рекомендовал хорошо
подумать, прежде чем предлагать такое решение пользователям Ваших
программ.
При необходимости генерации составного курсора следует запустить
интерпретатор языка Бейсик и ввести команду
LOCATE ,,, 6,2
В результате на экране появится составной курсор и могут быть
выполнены действия по модификации его размеров. Вторым управляемым
параметром курсора является его местоположение. Курсор может быть
расположен в любой строке или столбце экрана дисплея, кроме того, его
можно скрыть, поместив в несуществующую строку 26. С помощью оператора
LOCATE (язык Бейсик) можно управлять обоими параметрами. Для остальных
языков это не так. Многие пользователи языка Паскаль считают, что
отсутствие средств управления курсором является серьезным недостатком
данной версии языка.
На дискете, прилагаемой к данной книге, содержатся процедуры,
написанные на языке ассемблера; с помощью этих процедур может быть
осуществлен доступ к курсору или реализовано управление им в рамках языка
Паскаль или любого другого языка. Особенности реализации этих процедур
описаны в параграфе 8.11; там же приведены и другие сведения, касающиеся
обращения к BIOS-ПЗУ для видеодоступа.
8.9. Стандартный режим управления видеомонитором
Стандартный (или штатный) режим доступа к информации предполагает,
что генерация изображений осуществляется без модификации содержимого
участка памяти, хранящего закодированный образ экрана. В параграфе 8.11
будет рассмотрена возможность такого доступа, используя функции
обслуживания BIOS-ПЗУ. В связи с этим мне все-таки неясно, почему все
стремятся использовать именно функции обслуживания (исключение составляют
пользователи, работающие на ассемблере), несмотря на то, что средства
вывода языков высокого уровня (Паскаль и другие) обладают явными
преимуществами.
В случае использования средств вывода языков высокого уровня (Паскаль
и другие) возникает одна особенность. Вывод информации всегда
осуществляется с учетом положения курсора. Поэтому, если производится
манипулирование курсором с помощью функций обслуживания 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)
_________________________________________________________
Здесь уместно сделать одно важное замечание, касающееся работы в
цветном графическом многостраничном режиме. Если возникает потребность в
перемещении курсора, то следует специфицировать страницу - таким образом
исключается возможность поместить курсор в текущую активную страницу
дисплея; любая другая страница в этом смысле является доступной. Каждая
страница имеет собственное логическое местоположение курсора. Некоторые
|