|
|
Справочник программиста на персональном компьютере фирмы IBM. Вывод на терминал
|
|
Страница 1 из 47 В этой главе рассмотрены монохромный адаптор, цветной графический адаптор, видеосистема PCjr и улучшенный графический адап- тер (EGA). Все 4 системы базируются на микросхеме Motorola 6845 CRTC (cathode ray tube controller); хотя EGA на самом деле ис- пользует заказную микросхему, основанную на принципах 6845. Эта микросхема выполняет массу технических задач, которые обычно не интересуют программиста. Однако, она также устанавливает режим экрана, управляет курсором и (для цветного графического адаптора) управляет цветом. Микросхема легко программируется напрямую, хотя процедуры операционной системы позволяют управлять большинством ее действий.
Раздел 1. Управление выводом на терминал. Программирование контроллера дисплея 6845. Установка/проверка режима дисплея. Установка атрибутов/цветов символов. Установка цвета границы экрана. Очистка части/всего экрана. Переключение между видеоадаптерами. Раздел 2. Управление курсором. Установка курсора в абсолютную позицию. Относительное позиционирование курсора Включение и выключение курсора. Изменение формы курсора. Чтение/сохранение/восстановление позиции курсора. Создание альтернативных типов курсора. Раздел 3. Вывод символов на экран. Вывод на экран одного символа. Вывод строки символов на экран. Чтение символа и его атрибутов в данной позиции. Создание специальных символов. Сводка данных для описания символов. Раздел 4. Вывод точечной графики. Установка цветов для точечной графики. Рисование точки на экране (монохромный, цветной и PCjr). Рисование точки на экране (EGA). Определение цвета точки экрана. Рисование линий на экране. Заполнение областей экрана. Графический вывод с использованием символов псевдографики. Раздел 5. Сдвиг экрана и страницы. Вертикальный сдвиг текстового экрана. Сдвиг текстового экрана горизонтально. Переключение между текстовыми страницами. Сдвиг между страницами текста.
Глава 4. Вывод на терминал.
Раздел 1. Управление выводом на терминал. PCjr имеет вспомогательную микросхему для дисплея, "video gate array" (массив ворот дисплея), которая обсуждается в этом разделе вместе с 6845. EGA имеет архитектуру, отличающуюся от всех остальных, поэтому он обсуждается отдельно. Среди не-EGA систем имеется совместимость по использованию адресов портов, но есть и некоторые важные отличия. Некоторые адреса портов EGA такие же, как и у других систем. Все видеосистемы используют буфера, в которые отображаются данные для изображения на экране. Экран периодически обновляется сканированием этих данных. Размер и расположение этих буферов меняется с системой, режимом экрана, а также количеством заранее отведенной памяти. Когда в буфере хранится несколько образов экрана, то каждый отдельный образ называют дисплейной страницей. Ниже приведена короткая сводка:
Монохромный адаптер Монохромный адаптер имеет 4K байт памяти на плате, начиная с адреса B0000H (т.е. B000:0000). Этой памяти хватает только для хранения одной 80-символьной страницы текста.
Цветной графический адаптер. Цветной графический адаптер имеет 16K байт памяти на плате, начиная с адреса памяти B8000H. Этого достаточно для отображения одного графического экрана, без страниц, или от четырех до восьми экранов текста, в зависимости от числа символов в строке - 40 или 80.
PCjr. PCjr имеет видеосистему, которая на самом деле является улуч- шенной версией цветного графического адаптера. Она уникальна тем, что использует для видеобуфера обычную оперативную память систе- мы. Когда BIOS инициализирует систему, то верхние 16K установлен- ной памяти отводятся под буфер терминала. Таким образом адрес буфера зависит от того сколько памяти имеется в системе. Для добавочных дисплейных страниц могут быть отведены блоки памяти в других местах, а также начальный объем может быть уменьшен до 4K и была поддержка только одного экрана текста.
EGA. EGA может быть снабжен 64K, 128K или 256K памяти. Кроме ис- пользования в качестве видеобуфера эта память может также хранить битовые описания вплоть до 1024 символов (как объяснено в [4.3.4]). Стартовый адрес буфера дисплея программируем, поэтому буфер начинается с адреса A000H для улучшенных графических режи- мов, и с B000H и B800H для совместимости со стандартными монох- ромным и цветным графическим режимами. В большинстве случаев EGA занимает два сегмента с адресами от A000H до BFFFH, даже когда имеется 256K памяти. Это возможно, поскольку в некоторых режимах два или более байтов памяти дисплея считываются из одних и тех же адресов. Доступное число страниц зависит как от режима экрана, так и от количества имеющейся памяти. Вследствие своей сложности EGA имеет ПЗУ на 16K байт, которое заменяет и расширяет процедуры работы с терминалом BIOS. Начало области ПЗУ - адрес C000:0000.
В текстовых режимах буфера начинаются с данных для верхней строки экрана, начиная с левого угла. Дальнейшие данные перено- сятся с правого конца одной строки на левый конец следующей, как будто экран представляется одной большой строкой - и с точки зрения видеобуфера так оно и есть. Однако в графических режимах буфер может быть разделен на 2 или 4 части. У цветного графичес- кого адаптера и PCjr различные части буфера содержат информацию, относящуюся к каждой второй или каждой четвертой линии точек на экране. У EGA каждая часть буфера содержит один бит из двух или четырех, которые определяют цвет данной точки экрана. При выводе текста различные видеосистемы работают одинаково. Для экрана отводится 4000 байтов, так что на каждую из 2000 пози- ций экрана приходится 2 байта (25 строк * 80 символов). Первый байт содержит код ASCII. Аппаратура дисплея преобразует номер кода ASCII в связанный с ним символ и посылает его на экран. Второй байт (байт атрибутов) содержит информацию о том, как дол- жен быть выведен данный символ. Для монохромного дисплея он ус- танавливает будет ли данный символ подчеркнут, выделен яркостью или негативом, или использует комбинацию этих атрибутов. В цвето- вых системах байт атрибутов устанавливает основной и фоновый цвета символа. В любом случае Ваша программа может писать данные прямо в буфер терминала, что значительно повышает скорость вывода на экран. Все системы, кроме монохромной, предоставляют набор цветных графических режимов, которые отличаются как разрешением, так и числом одновременно выводимых цветов. И PCjr и EGA могут одновре- менно выводить 16 цветов, причем EGA может выбирать эти 16 из набора 64 цветов. При использовании 16 цветов каждая точка экрана требует четырех бит памяти, поскольку 4 бита могут хранить числа от 0 до 15. По аналогии, четырехцветная графика требует только 2 бита на точку. Двухцветная графика может упаковать представление восьми точек в один байт видеобуфера. Количество памяти, требуе- мое для данного режима экрана может быть легко вычислено, если известно количество выводимых в этом режиме точек и количество бит, необходимое для описания одной точки. Текст легко комбини- руется с графикой (BIOS рисует символы на графическом экране) и Вы можете создавать свои специальные символы.
|
|
-
Assembler,
COM в Ассемблере
В этой статье будет расказано о том, как использовать COM-интерфейсы в ваших программах, написанных на ассемблере. Не будет обсуждаться, что такое COM и как он применяется, но как его можно использовать, программируя на ассемблере. Здесь будет затронуто только применение существующих интерфейсов, а не реализация своих собственных, это будет рассмотрено в другой статье....
-
Assembler,
Пишем свой загрузочный сектор
Мы будем писать загрузочный сектор для трехдюймовой дискеты с файловой системой FAT12. После окончания начальной загрузки программа POST находит активное устройство и загружает с него короткую программу загрузки ОС - загрузочный сектор. Загрузочный сектор это первый физический сектор устройства, в данном случае дискеты и его размет равен всего ничего 512 байт. С помощью этих 512 байт кода мы должны найти основную часть загрузчика операционной системы, загрузить его в память и передать ему управл...
-
Assembler,
Программирование COM портов
Порт 3F8h. Этот порт соответствует регистру передавемых данных. Для передачи в порт 3F8h необходимо записать байт передаваемых данных. После приема данных от внешнего устройства они могут быть прочитаны из этого порта. В зависимости от состояния бита управляющего слова, выводимого в управ- ляющий регистр с адресом 3F8h, назначение порта 3F8h изменяться. Если этот бит равен 0,порт используется для записи передаваемых данных.Если же этот бит равен 1, порт используется для вывода з...
-
Assembler,
Переполнение буфера
В данной статье рассматривается пример использования переполнения стека под Windows 9x на платформе Intel x86. Изложение рассчитано на читателя, понимающего принципы работы персонального компьютера и более чем поверхностно знакомого с программированием....
-
Assembler,
Виртуальный драйвер для обслуживания аппаратных прерываний
Как уже отмечалось ранее, виртуальные драйверы служат прежде всего для виртуализации аппаратуры, то есть для предоставления одновременно выполняемым задачам возможности совместного использования устройств компьютера. Измерительная или управляющая аппаратура, подключаемая к компьютеру с целью создания автоматизированной установки, вряд ли будет эксплуатироваться в многозадачном режиме, однако использование для ее управления виртуального драйвера может заметно сократить программные издержки и умен...
-
Assembler,
Опыт дизассемблирования большой .com программы
В данной статье мне хочется рассказать о дизассемблировании большой программы (графического редактора). Не будучи знатоком ассемблера, не зная до сих пор, как использовать большинство возможностей своего дизассемблера (DisDoc 2.3), я все же решился написать эту статью, так как прекрасно помню, в какой кромешной тьме начинал заниматься дизассемблированием....
-
Assembler,
Оптимизация программ на Assembler
Несмотря на все более широкое распространение языков программирования и интегрированных сред программирования, оптимизация программ на ассемблере остается актуальной темой дискуссий для программистов. Можно упомянуть, например, форум програамистов, проведенный сетью PC MagNet, который стал ареной многочисленых "дуэлей": то один, то другой участник предлагал всем желающим решить небольшую, но интересную задачу программирования - и рассматривал присылаемые решения, ожидая, кто жее и как ...
-
Assembler,
Справочник программиста на персональном компьютере фирмы IBM. Приложения
Основной единицей хранения данных в компьютере является бит. В большинстве микрокомпьютеров восемь битов объединены в байт, при этом каждый бит байта может быть установлен или "включен" (= 1) или сброшен или "выключен" (= 0), допуская 256 разных вариантов. Таким образом, в одном байте можно представить 256 разных симво- лов (расширенный набор кодов ASCII) или целое число в диапазоне от 0 до 255. Хотя мы привыкли записывать эти числа в десятичной форме, они могут зап...
|
|
|