Ноутбуки   
   Софт   
   Компьютеры   
   Компьютерные фирмы   
  Меню сайта

BIOS

SSD-накопители

Акустика для ПК

Видеокарты

Видеокарты - История

Джойстики, клавиатуры и мыши

Дигитайзеры

Жесткие диски

Жесткие диски - история

Звуковые карты

Именитые люди компьютерной индустрии

История компьютеров

Карманные компьютеры

Компьютер десктоп - готовая сборка

Компьютерные фирмы

Компьютеры в теории и практике

Копировальные аппараты

Корпуса, вентиляторы, блоки питания

Маршрутизаторы, коммутаторы, хабы

Материнские платы

Модемы

Модули памяти

Мониторы

Мониторы и видеокарты - история

Новости

Ноутбуки и субноутбуки

Оборудование беспроводной связи, bluetooth, wi-fi

Оптические накопители CD, DVD, Blueray

Оргтехника

Память - история

Плоттеры

Принтеры

Процессоры

Процессоры - история

Сетевые карты

Сетевые фильтры, ИБП

Сети

Сканеры

Сменные жесткие диски

Советские ПК

ТВ-тюнеры

Типы компьютеров

Устройства архивации данных и стримеры

Факс

Флоппи-дисководы

Флэшки и всяко-разно

Шины и чипсеты - история




Главная страница Прайс-лист Интернет-магазин

Средства управления видеотерминалом уровня 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 = конечная строка развертки курсора
____________________________________________________________
Пятая функция обслуживания (функция с кодом 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). Код цвета пикселя формируется в регистре AL; старшие биты при этом устанавливаются в 0. Регистры DL и CX предназначены для передачи процедуре обслуживания номера строки и номера столбца пикселя.
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 13 AL = код цвета пикселя (0 - 15)
DL = номер строки пикселя
CX = номер столбца пикселя
____________________________________________________________
Функция обслуживания с кодом 14(E/16) предназначена для записи символа в режиме телетайпа. При этом экран дисплея оказывается в роли принтера или пишущей машинки. Такие команды операционной системы как TYPE или COPY (если в качестве результирующего файла указана консоль "CON") используют эту функцию обслуживания для иммитации принтера или пишущей машинки. В сущности, в рамках этой функции обслуживания возможности аппаратуры в части генерации цвета, мерцания или управления курсором не используются.
При обращении к процедуре обслуживания с кодом 14 производится запись символа в текущую позицию (указываемую курсором) и осуществляется перемещение курсора. При необходимости выполняется переход к новой строке или сдвиг содержимого экрана. Записываемый символ указывается в регистре AL. Для текстового режима текущие атрибуты экрана сохраняются. Для графического режима цвет фона указывается в регистре BL.
Из всего набора символов следующие четыре символа непосредственно не отображаются, а выступают в роли управляющих (интерпретируются аппаратурой): CHR$(7) - звук, CHRS(8) - возврат на одну позицию, CHR$(10) - перевод строки, CHR$(13) - возврат каретки.
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 14 AL = записываемый символ ASCII
BL = цвет символа (только для
графических режимов)
BH = страница (для графических
режимов не указывается)
____________________________________________________________
Приложение 8.1. Текст программы демонстрации возможностей управления цветом (Бейсик).
1000 REM Listing 8.1
1010 REM
1020 REM
1030 GOSUB 2000 ' TITLE
1040 GOSUB 3000 ' GET WHICH DISPLAY TYPE, AND SET ADDRESS
1050 GOSUB 2000 ' SET THE TITLE AGAIN
1060 GOSUB 4000 ' BUILD THE SURROUNDING COMMENTS
1070 GOSUB 5000 ' BUILD THE DISPLAY ARRAY
1080 GOSUB 6000 ' FINISH UP AND RETURN TO DOS
2000 REM Title subroutine
2010 KEY OFF : CLS : WIDTH 80
2020 REM
2030 PRINT " Programs for INSIDE THE IBM PERSONAL COMPUTER"
2040 PRINT " (C) Copyright 1983 Peter Norton"
2050 PRINT
2060 PRINT Program 8-1: Demonstrate all screen attributes"
2999 RETURN
3000 REM Subroutine to inquire about display type
3010 PRINT
3020 PRINT "Before we go any further, is this a color-graphics
display?";
3030 GOTO 3060
3040 PRINT
3050 PRINT " (answer Y or N) ";
3060 ANSWER$=INKEY$
3070 IF LEN(ANSWER$)<1 THEN 3060
3080 IF LEN(ANSWER$)>1 THEN 3040
3090 SEGVAL!=0
3100 IF MID$(ANSWER$,1,1)="Y" THEN SEGVAL!=&HB800 ' Color segment
3110 IF MID$(ANSWER$,1,1)="y" THEN SEGVAL!=&HB800 ' Color segment
3120 IF MID$(ANSWER$,1,1)="N" THEN SEGVAL!=&HB000 'Monochrome segment
3130 IF MID$(ANSWER$,1,1)="n" THEN SEGVAL!=&HB000 'Monochrome segment
3140 IF SEGVAL!=0 THEN 3040
3150 DEF SEG=SEGVAL!
3999 RETURN
4000 REM subroutine to build the surrounding messages
4010 LOCATE 11,1 : PRINT "Normal"
4020 LOCATE 12,1 : PRINT "normal"
4030 LOCATE 19,1 : PRINT "Normal"
4040 LOCATE 20,1 : PRINT "blinking"
4050 LOCATE 11,69 : PRINT "Bright"
4060 LOCATE 12,69 : PRINT "normal"
4070 LOCATE 19,69 : PRINT "Bright"
4080 LOCATE 20,69 : PRINT "blinking"
4090 FOR HEX.DIGIT%=0 TO 15
4100 LOCATE 6,HEX.DIGIT%*3+17
4110 PRINT HEX$(HEX.DIGIT%)
4120 LOCATE HEX.DIGIT%+8,11
4130 PRINT HEX$(HEX.DIGIT%)
4140 NEXT HEX.DIGIT%
4150 LOCATE ,,0
4999 RETURN
5000 REM subroutine to set the display array
5010 FOR ROW%=0 TO 15
5020 FOR COL%=0 TO 15
5030 POKE(ROW%+7)*160+COL%*6+31,ROW%*16+COL%
5040 POKE(ROW%+7)*160+COL%*6+33,ROW%*16+COL%
5050 POKE(ROW%+7)*160+COL%*6+35,ROW%*16+COL%
5060 POKE(ROW%+7)*160+COL%*6+32,ROW%*16+COL%
5070 NEXT COL%
5080 NEXT ROW%
5999 RETURN
6000 LOCATE 25,1,1
6010 PRINT "Press any key to return to DOS... ";
6020 IF LEN(INKEY$)=0 THEN 6020 ' wait to keystroke
6030 CLS
6999 SYSTEM
9999 REM End of program Liisting 8-1
Приложение 8.2. Текст программы генерации изображений (Паскаль).
module Listing_8_2;
{==========================================================}
type
screen_position_pair_type=(character_byte,attribute_byte);
normal_screen_type=array[1..25,1..80,
character_byte..attribute_byte] of char;
narrow_screen_type=array[1..25,1..40,
character_byte..attribute_byte] of char;
{==========================================================}
var [static]
screen_pointer : ads of normal_screen_type;
current_attribute : char;
row,column : integer;
output_string : lstring(255);
page : word;
eighty_col_mode : boolean;
{==========================================================}
const
normal_attrib = chr (7);
reverse_video = chr (112);
bright = chr (15);
blinking = chr (135);
alert = chr (140);
{==========================================================}
procedure clear_reset;
external;
function video_mode : byte;
external;
{==========================================================}
procedure set_video_address;
begin
if video_mode=7 then
begin
screen_pointer.s:=#B000;
screen_pointer.r:=0;
end
else
begin
screen_pointer.s:=#B800;
screen_pointer.r:=0;
end;
end;
{==========================================================}
procedure clear_screen;
begin
{if you have the assembly language routines, just to this: }
clear_reset;
return;
{otherwise, we'll clear the screen the hard way: }
for row:=1 to 25 do
for column:=1 to 80 vdo
begin
screen_pointer^[row,column,character_byte]:=' ';
screen_pointer^[row,column,attribute_byte]:=normal_attrib;
end;
end;
{==========================================================}
{ НЕРАЗБОРЧИВО }
{==========================================================}
procedure set_pointer_for_page;
begin
if eight_col_mode then
screen_pointer.s:=#B800+page*4096
else
screen_pointer.s:=#B800+page*2048
end;
end.


Анализ содержимого ПЗУ - метод деассемблирования

Анализ содержимого ПЗУ - реконструкция интерпретатора

Анализ содержимого ПЗУ средствами программы DEBUG

Две версии BIOSа

Дополнительные процедуры системы BIOS

Механизм выборки информации из ПЗУ

Описание специальных прерываний

Организация ПЗУ и его использование

Процедура обслуживания клавиатуры в системе BIOS

Система BIOS в ПЗУ

Служебные процедуры обслуживания дискет системы BIOS в ПЗУ

Средства управления видеотерминалом уровня BIOS-ПЗУ




Немного рекламы:









































































Реклама и информация:













Счётчик Rambler's Top100