ЭЛЕКТРОННАЯ БИБЛИОТЕКА КОАПП |
Сборники Художественной, Технической, Справочной, Английской, Нормативной, Исторической, и др. литературы. |
Часть 4 3. Основные сведения о BIOS ----------------------------------------------------------------- BIOS (Базовая Система Ввода/вывода) это интерфейсная программа, интерпретирующая и передающая важные данные ввода/вывода. В памяти PC для этой имеющей большое значение программы резервированы шестнадцатиричные адреса от 0400 до 04FF. BIOS содержит специфические функции, относящиеся к работе конкретного экранного адаптера вашей системы. Эти функции существуют в виде базового программного обеспечения, зашитого в ПЗУ, что означает невозможность их изменения или удаления. BIOS, следовательно, является аппаратным компонентом, но при этом работает также и в качестве части операционной системы вашего компьютера. BIOS независима от программно-реализованной операционной системы MS-DOS. Платы EGA и VGA расширяют стандартный BIOS добавлением специальных ПЗУ. Экранный адаптер непосредственно встроен в это аппаратное обеспечение. Одной из специальных функций BIOS EGA и VGA является прерывание 16, которое мы рассмотрим в следующем разделе. 3.1 Прерывание 16 ----------------------------------------------------------------- Как и следует из термина "прерывание", вызов функции прерывания временно прерывает обработку процессором внешних данных и переключает его на внутреннюю задачу. Для экрана управление вводом/выводом видео-сигнала выполняется прерыванием 16 (шестнадцатиричное 10) и другими аналогичными функциями. Параметры передаются процессору через регистры прерывания, которые называются A, B, C, D и E. Каждый из них состоит из двух байтов, называемых High (старший) и Low (младший). Int 16: { A-hi,A-lo, B-hi,B-lo, C-hi,Clo, ... } Это позволяет вызвать желаемую функцию и передать ей параметры, необходимые для выполнения задачи. Кроме того, некоторые функции позволяют после выполнения считывать результаты из регистровых переменных. 3.1.1 Функции прерывания 16 в VGA BIOS ----------------------------------------------------------------- Передавая конкретные значения в регистры прерывания 16, вы можете заставить функции выполнять различные под-функции. Некоторые из этих под-функций позволяют вам после выполнения функции получить результаты, считывая для этого регистры. Функция: Установить видео-режим Int 16 { A-hi = 00 } { A-lo = No } No - это номер желаемого режима. Функция: Установить, как будет выглядеть курсор Int 16 { A-hi = 01 } { C-hi = No } No устанавливает позицию курсора в пределах поля курсора. { C-lo = No } Функция: Установить позицию курсора Int 16 { A-hi = 02 } { B-hi = стр } Указывает текущий номер страницы. { D-hi = yy } Устанавливает позицию по y (строку). { D-lo = xx } Устанавливает позицию по x (столбец). Функция: Считать текущую позицию Int 16 { A-hi = 03 } { B-hi = стр } Указывает текущий номер страницы. После выполнения прерывания вы можете прочесть следующие результаты: { No = C-hi } No - это позиция курсора. { No = C-lo } { yy = D-hi } Позиция курсора по y (строка). { xx = D-lo } Позиция курсора по x (столбец). Функция: Выбрать текущую страницу Int 16 { A-hi = 05 } { A-lo = стр } стр - это число, задающее выбираемую страницу. Функция: Очистить экран Int 16 { A-hi = 06 или 07 ) { A-lo = 00 } Ввод для выполнения очистки экрана. { B-hi = цвет } Ввод цвета для заполнения очищенного экрана. Функция: Выполнить скролинг (прокрутку) вверх Int 16 { A-hi = 06 } { A-lo = No } No это число строк, на которое должен быть выполнен скролинг. { B-hi = цвет } Цвет прокрученной строки. { C-hi = X1 } X и Y (строка/столбец) верхнего { C-lo = Y1 } левого угла прокручиваемой области. { D-hi = X2 } X и Y (строка/столбец) нижнего { D-lo = Y2 } правого угла прокручиваемой области. Функция: Выполнить скролинг (прокрутку) вниз Int 16 { A-hi = 07 } { A-lo = No } No это число строк, на которое должен быть выполнен скролинг. { B-hi = цвет } Цвет прокрученной строки. { C-hi = X1 } X и Y (строка/столбец) верхнего { C-lo = Y1 } левого угла прокручиваемой области. { D-hi = X2 } X и Y (строка/столбец) нижнего { D-lo = Y2 } правого угла прокручиваемой области. Функция: Прочесть символ в позиции курсора Int 16 { A-hi = 08 } { B-hi = стр } Страница, в которой выполняется считывание. После выполнения прерывания вы можете прочесть следующие результаты: { атр = A-hi } Атрибут в текстовом режиме. { No = A-lo } Числовой код считанного символа. Функция: Записать символы начиная с позиции курсора Int 16 { A-hi = 09 } { A-lo = No } Числовой код выводимого символа. { B-hi = стр } Страница, в которую выполняется запись. { B-lo = цвет } Цвет или атрибут символа. { C = No } Число выводимых символов. Функция: Вывести символ без атрибутов Int 16 { A-hi = 10 } { A-lo = No } No - это код выводимого символа. { B-hi = стр } Страница, в которую выполняется запись. { C = No } Число выводимых символов. Функция: Установить цветовую палитру в графических режимах 320*200 EGA/CGA Int 16 { A-hi = 11 } { B-hi = No } Номер цветовой палитры (1-127). { B-lo = цвет } Значение цвета в выбранной палитре. Функция: Установить цвет рамки в графических режимах 320*200 EGA/CGA Int 16 { A-hi = 11 } { B-hi = 00 } Код, указывающий что задается цвет рамки. { B-lo = цвет } Выбор значения цвета рамки. Функция: Записать пиксель Int 16 { A-hi = 12 } { A-lo = цвет } Номер цвета (через операцию OR, если Бит 7 = 1). { B-hi = стр } Страница, в которую выполняется запись. { C = xx } Номер столбца пикселя (координата x). { D = yy } Номер строки пикселя (координата y). Функция: Считать пиксель Int 16 { A-hi = 13 } { B-hi = стр } Страница, из которой выполняется считывание. { C = xx } Номер столбца пикселя (координата x). { D = yy } Номер строки пикселя (координата y). После выполнения прерывания вы можете прочесть следующие результаты: { цвет = A-lo } Номер цвета пикселя в заданных координатах. Функция: Телетайпный вывод символа Int 16 { A-hi = 14 } { A-lo = No } Код выводимого символа. { B-lo = No } Номер цвета в графическом режиме. Функция: Считать текущий режим Int 16 { A-hi = 15 } После выполнения прерывания вы можете прочесть следующие результаты: { xx = A-hi } Общее число столбцов в данном режиме. { режим = A-lo }Номер текущего режима. { стр = B-hi } Номер текущей страницы. Функции: { A-lo = 00 до 27 } Установить регистры палитры и цвета для EGA, MCGA, VGA. Int 16 { A-hi = 16 } Следующие под-функции были добавлены в BIOS для платы CGA, а затем расширены для адаптера MCGA и платы VGA. Плата EGA может выполнить ограниченное число этих под-функций, тогда как плата VGA выполняет все функции полностью. Под-функция: { A-lo = 00 } Устанавливает выбранные регистры палитры. Int 16 { A-hi = 16 } { B-hi = No } Выбранное значение цвета. { B-lo = No } Номер регистра выбранной палитры. Под-функция: { A-lo = 01 } Устанавливает регистр цвета рамки. Int 16 { A-hi = 16 } { B-hi = No } Выбранное значение цвета. Под-функция: { A-lo = 02 } Устанавливает указатель на регистр выбранной палитры/рамки. Int 16 { A-hi = 16 } { E:D = адр } Указатель (адрес в виде сегмент:смещение) на выбранную таблицу: байты 0-15 содержат цвета палитры; а байт 16 содержит цвет рамки. Под-функция: { A-lo = 03 } Включает режимы интенсивности или мигания изображения. Int 16 { A-hi = 16 } { B-lo = 00 } Включает режим повышенной интенсивности. { B-lo = 01 } Включает режим мигания символов. Под-функция: { A-lo = 07 до 09 } Выход из под-функции со считыванием { A-lo = 01 до 03 }. Int 16 { A-hi = 16 } Считывает регистр рамки, указатель на регистр рамки/палитры и дисплей (находится ли он в режиме повышенной интенсивности или мигания). Под-функция: { A-lo = 16 } Служит для установки конкретного регистра цвета (из 262,144). Int 16 { A-hi = 16 } { B = No } Номер цвета из палитры (0-255). { C-hi = Зеленый } Цветовой компонент зеленого (0-63). { C-lo = Голубой } Цветовой компонент голубого (0-63). { D-hi = Красный } Цветовой компонент красного (0-63). Под-функция: { A-lo = 18 } Устанавливает блок цветовых регистров через указатель. Int 16 { A-hi = 16 } { B = No } Номер первого изменяемого цвета. { C = No } Число следующих изменяемых цветов. { E:D = адр } Указатель (адрес в виде сегмент:смещение) на выбранную таблицу: байты таблицы содержат цветовые компоненты в последовательности (R,G,B,R,G,B...). Под-функция: { A-lo = 18 } { B-lo = 00 } Выбор страничного режима (VGA). Int 16 { A-hi = 16 } { B-hi = 00 } 4 блока из 64 регистров. { B-hi = 01 } 16 блоков из 16 регистров. Под-функция: { A-lo = 18 } Выбор цветовой страницы (VGA). Int 16 { A-hi = 16 } { B-lo = 01 } Умолчание для 64-регистрового страничного режима. { B-hi = 00-03 }Блоки 1-4 по 64 регистра. Умолчание для 16-регистрового страничного режима. { B-hi = 00-15 }Блоки 1-6 по 16 регистров. Под-функция: { A-lo = 21 } Служит для считывания конкретных цветовых регистров из палитры. Int 16 { A-hi = 16 } { B = No } Номер считываемого цвета (0-255). После выполнения прерывания вы можете прочесть следующие результаты: { Зеленый = C-hi} Цветовой компонент зеленого (0-63). { Голубой = C-lo} Цветовой компонент голубого (0-63). { Красный = D-hi} Цветовой компонент красного (0-63). Под-функция: { A-lo = 23 } Служит для считывания блока из цветового регистра через указатель. Int 16 { A-hi = 16 } После выполнения прерывания вы можете прочесть следующие результаты: { No = B } Номер первого считываемого цвета. { No = C } Число следующих изменяемых цветов. { адр = E:D } Пара регистров E+D содержит адрес указателя (сегмент:смещение) таблицы данных цветов. Байты в таблице содержат цветовые компоненты в последовательности (R,G,B,R,G,B...). Под-функция: Считывание статуса цветовой страницы. Int 16 { A-hi = 16 } { A-Lo = 26 } После выполнения прерывания вы можете прочесть следующие результаты: { No = B-lo } Страничный режим (00 или 01). { No = B-hi } Текущий номер страницы. Под-функция: Преобразование палитры в оттенки серого. Int 16 { A-hi = 16 } { A-Lo = 27 } { B = No } Номер первого цвета, преобразуемого в оттенок серого. { C = No } Число дополнительно преобразуемых цветов. Функции: { A-lo = 00 до 48 } Генератор символов для текстовых и графических наборов символов. Int 16 { A-hi = 17 } Как и в случае прерывания (16)+A-hi(16), это набор функций, используемых для создания и преобразований наборов символов. Эти функции могут быть использованы для улучшенного представления текста на новых графических платах. Поскольку создание наборов символов для VGA не является предметом данной книги, мы дадим только краткое описание под-функций генератора символов. Под-функции, выполняющие вывод данных в наборы символов: { A-lo = 48 } Информация (Указатель/Размер_символа и т.д.). Под-функции, активизирующие режимы: { A-lo = 00 } Загрузка вашего собственного набора символов. { A-lo = 01 } Загрузка монохромного набора символов из ПЗУ. { A-lo = 02 } Загрузка набора двухточечных символов 8*8 из ПЗУ. { A-lo = 03 } Выбор блока активного набора символов. { A-lo = 04 } Загрузка набора символов 16*16 из ПЗУ. Без активизации режима, непосредственно после включения режима: Ввод блоков для набора символов при помощи { B-lo = No }: { A-lo = 16 } Загрузка вашего собственного набора символов. { A-lo = 17 } Загрузка монохромного набора символов из ПЗУ. { A-lo = 18 } Загрузка набора двухточечных символов 8*8 из ПЗУ. { A-lo = 20 } Загрузка набора символов 16*16 из ПЗУ. Без активизации режима, непосредственно после включения режима: Ввод числа строк и т.д. { B-lo = No } { D-lo = No }: { A-lo = 32 } Загрузка таблицы графических символов (Int 67}. { A-lo = 33 } Загрузка вашего собственного набора графических символов. { A-lo = 34 } Загрузка набора символов 8*14 из ПЗУ. { A-lo = 35 } Загрузка набора двухточечных символов 8*8 из ПЗУ. { A-lo = 36 } Загрузка набора символов 8*16 из ПЗУ. Функции: { B-lo = 16 до 53 } Альтернативная подпрограмма печати экрана и прочие функции. Int 16 { A-16 = 18 } Данный набор функций также называется функциями альтернативного выбора. Например, подпрограмма печати экрана, вызываемая клавишами |