И н ж е н е p н о - т е х н и ч е с к о
е б ю p о
Пpогpаммно-технические сpедства
пеpсональных ЭВМ семейства IBM
PC
Б А З О В А Я С И С Т Е М А В В О Д А - В Ы В О Д А
Цикл издается под pедакцией Ю. С.
Лукача
────────────────────────────────────────────────────────────
(C) Инженеpно-техническое
бюpо, 1990
Полное или частичное воспpоизведение
или
pазмножение каким бы
то ни было способом
материалов, опубликованных в
настоящем изда-
нии, допускается только с
письменного разре-
шения Инженерно-технического
бюро.
Свеpдловск
1990
- 1 -
_EСодеpжание_F
Введение . . . . . . . . . . . . . . . . . . .
. . . . . . 2
Обозначения
. . . . . . . . . . . . . . . . . . . . . . . 3
1. Основные понятия . . . . . . . . . . . . . . . . . . . 5
1.1. Введение в BIOS . . . . . . . . . . . . .
. . . . . . 5
1.2. Доступ к BIOS . . . . . . . . . . . . . .
. . . . . . 5
1.3. Области данных BIOS . . . . . . . . . . .
. . . . . . 6
1.4. Версии BIOS . . . . . . . . . . . . . . .
. . . . . . 6
2. Функции BIOS . . . . . . . . . . . . . . . . . . . .
. 7
2.1. Int 10h - Управление экраном . . . . . . . . . . . . 7
2.2. Int 11h - Конфигурация оборудования . . .
. . . . . . 46
2.3. Int 12h - Размер ОЗУ . . . . . . . . . . . . . . . . 48
2.4. Int 13h - Управление дисками . . . . . . . . . . . . 49
2.5. Int 14h - Управление стыком RS-232C . . .
. . . . . . 67
2.6. Int 15h - Системные утилиты . . . . . . .
. . . . . . 72
2.7. Int 16h - Обслуживание клавиатуры . . . .
. . . . . . 104
2.8. Int 17h - Управление принтером . . . . . . . . . . . 111
2.9. Int 18h - Интерпретатор Бейсика . . . . .
. . . . . . 113
2.10. Int 19h - Загрузка системы . . . . . . .
. . . . . . 114
2.11. Int 1Ah - Обслуживание таймера . . . . .
. . . . . . 115
3. Прерывания, обслуживаемые BIOS . . . . . . . . . . . . 123
3.1. Прерывания, генерируемые центральным
процессором . . 123
3.2. Прерывания от контроллера прерываний #1 .
. . . . . . 127
3.3. Прерывания от контроллера прерываний #2 .
. . . . . . 131
3.4. Таблицы и пользовательские прерывания . .
. . . . . . 132
4. Данные BIOS . . . . . . . . . . . . . . . .
. . . . . . 139
4.1. Рабочая область данных . . . . . . . . . . . . . . . 139
4.2. Дополнительная область данных . . . . . .
. . . . . . 164
4.3. Область данных ПЗУ . . . . . . . . . . . . . . . . . 165
5. Дополнительные сведения . . . . . . . . . .
. . . . . . 167
5.1. Начальное тестирование ПЭВМ (POST) . . . . . . . . . 167
5.2. Рекомендации по написанию прикладных
программ . . . . 170
5.3. Многозадачная работа . . . . . . . . . . . . . . . . 177
5.4. Разделение прерываний . . . . . . . . . .
. . . . . . 179
6. Приложения
. . . . . . . . . . . . . . . . . . . . . . 185
6.1. Работа с драйвером мыши . . . . . . . . .
. . . . . . 185
6.2. Работа с дополнительной памятью . . . . .
. . . . . . 200
6.3. Использование NETBIOS . . . . . . . . . .
. . . . . . 216
7. Указатели . . . . . . . . . . . . . . . . .
. . . . . . 232
7.1. Таблица прерываний ПЭВМ . . . . . . . . .
. . . . . . 232
7.2. Видеорежимы ПЭВМ . . . . . . . . . . . . . . . . . . 235
7.3. ASCII-коды и скан-коды клавиш . . . . . .
. . . . . . 237
7.4. Типы жестких дисков AT и PS/2 . . . . . .
. . . . . . 245
Глоссарий
. . . . . . . . . . . . . . . . . . . . . . . . 247
Пеpечень pекомендуемых матеpиалов . . . . . . . . . . . . 249
- 2 -
Введение
Данный
документ содержит техническое
описание базовой
системы ввода-вывода (BIOS) ПЭВМ семейства IBM PC, включая ПЭВМ
IBM
PC XT, AT и PS/2. Он основан на технической
документации
фирмы IBM (IBM PC Technical References).
Дополнительными источниками информации послужили
многочисленные монографии,
журнальные статьи и
диалоговые
справочные системы (такие, как TECH Help!, Norton Guide и др.).
Кроме того, данное описание учитывает опыт
авторов по разработке
и сопровождению программ в
среде MS-DOS. Этот опыт позволил,
во-первых, исправить отдельные неточности и недоговоренности в
использованных
материалах, и, во-вторых,
описать ряд недоку-
ментированных особенностей BIOS указанных
ПЭВМ.
Помимо
описания BIOS, в документ включены описания двух
загружаемых
драйверов: драйвера мыши в стандарте Microsoft/PC
Mouse и
драйвера дополнительной памяти в
стандарте LIM/EMS, а
также
информация об использовании стандартного
сетевого
интерфейса NETBIOS.
Вся
приведенная информация подвергалась
максимальной
проверке
на ЭВМ; однако,
авторы предполагают, что
отдельные
нюансы описаний, заимствованных из фирменной
документации, могут
содержать
ошибки. Такие "подозрительные"
моменты мы, по мере
воазможности,
старались явно оговаривать
в соответствующих
местах справочника.
Для
понимания изложенного здесь
материала требуется
владение основами программирования на языке ассемблера для IBM
PC (знание архитектуры процессора и директив
ассемблера) и общее
представление
о портах ввода-вывода ПЭВМ и
связанных с ними
устройствах.
Авторы
будут благодарны за любые указания на неточности,
замечания и дополнения, которые мы просим
присылать по адресу:
620075, г. Свердловск,
ул. Луначарского 81,
Инженерно-техническое бюро.
тел. 56-92-54, 56-92-41.
- 3 -
Обозначения
PC,
XT, AT, PCjr,
PC Convertible и PS/2 - это имена
компьютеров семейства IBM PC. Все
они более или менее совместимы
между собой на уровне прикладных пакетов, но имеют определенные
аппаратные различия:
PC: центральный процессор 8088, тактовая частота 4.77 МГц,
5 позиций для адаптерных плат.
PCjr:
ЦП 8088, нет
места для плат.
Выпущена мизерным
тиражом и не совместима с остальными IBM PC. В
нашей серии почти
не описывается.
XT: ЦП 8088, жесткий диск, 8 позиций для
адаптерных плат. В
остальном аналогична PC.
Turbo PC: ПЭВМ других фирм (не IBM),
совместимые с PC и XT,
но имеюший ЦП 8086 или V30 фирмы NEC, тактовая
частота которых 6
или 8 МГц. Обычно имеет 8 позиций для плат.
XT-286:
ЦП 80286, 8 позиций для плат,
частота 6 Мгц без
холостых циклов (скорость как у AT с 8 МГц). Платы от AT к ней
не
подходят, от PC
подходят, но не
позволяют использовать
преимущества 16-разрядной системной шины.
AT: ЦП 80286, 8 позиций для плат, тактовая частота 6 или 8
МГц.
PC Convertible: Портативный вариант AT.
Отличия: плазменный
(LCD)
дисплей, 3.5-дюймовые дисководы,
нет позиций для плат
расширения.
PS/2: Новое семейство ПЭВМ фирмы
IBM. Модели 25 и 30 - это
улучшенные версии старых PC, совместимые с ними по адаптерным
платам, с дисплеем MCGA. Модели 50 и 60 - ЦП
80286, 32-разрядная
шина MicroChannel, совместимости со старыми
платами нет, дисплей
VGA. Модель
80 имеет ЦП 80386. Все модели
оснащены дисководами
размером 3.5 дюйма.
AT-386: ПЭВМ третьих фирм,
совместимая с AT, но имеющая ЦП
80386.
Если
рассматриваемые устройства
зависят от типа ПЭВМ, то
используются следующие пометки:
PC/XT относится к ПЭВМ IBM PC и XT, включая
Portable PC
AT относится к ПЭВМ IBM PC AT
PS/2 относится к семейству PS/2
Отсутствие таких
указаний означает, что данный материал
применим ко всем ПЭВМ фирмы IBM.
Функция
BIOS с номером XXh обозначаeтся "фн XXh", а
ее
- 4 -
подфункции (если они есть) - "подфн
...".
Десятичные числа
записываются обычным образом,
шестнадцатиричные отличаются
добавлением буквы "h"
в конце.
Например, 256 и 100h означают десятичное число
256.
Все
размеры полей в
управляющих структурах приведены
в
байтах, если не оговорено противное.
В
некоторых случаях алгоритмы
сопровождаются формулами.
Операции
в формулах обозначаются, как принято в
языке Си, а
именно:
арифметические: +, -, *, /, % (взятие
остатка)
битовые: & (и), | (или), ~ (не)
сдвиги:
<< и >>.
- 5 -
1. Основные понятия
1.1. Введение в BIOS
Базовая
система ввода-вывода (BIOS
- Basic Input/Output
System) для ПЭВМ семейства IBM PC и IBM PS/2 - это программный
интерфейс между программами и оборудованием
ПЭВМ. BIOS изолирует
операционную
систему и прикладные
программы от аппаратных
особенностей
конкретных устройств и
позволяет программистам,
пишущим
на языках ассемблера, Си и т.
п., выполнять операции
ввода-вывода, не заботясь об адресах устройств
или их аппаратных
характеристиках. Кроме
того, BIOS обеспечивает ряд системных
услуг, например, позволяет узнать размер
памяти ПЭВМ или текущее
время дня.
Рекомендуется использовать
запросы к BIOS вместо прямой
манипуляции
портами ввода-вывода при
написании как системных,
так
и прикладных программ.
Программирование на уровне BIOS
уменьшает
зависимость программ от
изменения параметров
оборудования
ПЭВМ и, тем
самым, повышает их
мобильность.
Подробно эта тема обсуждается в п. 5.2.
Основные функции BIOS таковы:
- тестирование ПЭВМ при ее включении;
- обеспечение управления периферийными
устройствами;
- системные услуги.
1.2. Доступ к BIOS
Для доступа к BIOS используются
программные прерывания. При
этом
каждая точка входа
в BIOS использует
свой вектор
прерываний.
Если точка входа
обслуживает несколько процедур
(называемых
функциями BIOS), то
номер функции задается
в
регистре AH.
За процедурами BIOS закреплены прерывания
Int 10h - Int 1Ah
(полная
таблица использования прерываний
приведена в п. 7.1).
Например,
Int 12h вызывает
процедуру, которая возвращает
вызвавшей ее программе размер оперативной
памяти ПЭВМ.
Входные
и выходные параметры
процедур BIOS передаются в
регистрах
общего назначения центрального
процессора ПЭВМ.
Например,
для установки системного
времени нужно подать
следующие команды:
MOV
AH,1 ; Функция 1 -
установка времени
MOV
CX,HIGH_COUNT ; CX:DX = новое
значение времени
MOV DX,LOW_COUNT
INT 1AH ; Точка входа в BIOS,
обслуживающая
; запросы к
таймеру
Для чтения времени используется следующая
программа:
MOV
AH,0 ; Функция 0 -
чтение времени
INT
1AH ; Запрос к BIOS
- 6 -
Результат будет возвращен в регистрах CX
и DX.
Процедуры BIOS сохраняют значения всех
регистров, кроме тех
из них, в которых возвращаются значения.
Все
функции BIOS описаны
в п. 2, а прочие прерывания,
обслуживаемые BIOS - в п. 3.
1.3. Области данных BIOS
Области
данных BIOS - это либо
области ОЗУ, в которых
хранится текущая информация о состоянии ПЭВМ, либо области ПЗУ,
в которых
записаны аппаратные характеристики устройств.
Эти
области данных описаны в п. 4.
1.4. Версии BIOS
BIOS хранится в микросхемах ПЗУ,
расположенных на системной
плате
ПЭВМ и в
некоторых адаптерах конкретных
устройств
(например, в
адаптере дисплеев EGA или в
контроллере жесткого
диска).
По мере разработки
новых моделей ПЭВМ
фирма IBM
несколько
раз модернизировала содержимое
BIOS. Поэтому для
правильного его использования важно учитывать тип Вашей ПЭВМ и
дату создания BIOS. ПЭВМ фирмы IBM имеют
следующие версии BIOS:
Модель ПЭВМ Дата BIOS
──────────────────────────────────
PC 04/24/81
PC 10/19/81
PC 10/27/82
PC XT и Portable PC
11/08/82
PC XT 01/10/86
PC XT 05/09/86
PC jr 06/01/83
AT 01/10/84
AT 06/10/85
AT 11/15/85
PC XT-286 04/21/86
PC
Convertible 09/13/85
PS/2 Model
30 09/02/86
PS/2 Model
50 нет
PS/2 Model
60 нет
PS/2 Model
80 нет
Примечания:
1.
Дата версий BIOS
приведена в американском
формате
(месяц/день/год), т. к. именно так она
хранится в ПЗУ.
2. Если Ваша ПЭВМ является PC-совместимой ЭВМ производства
третьих
фирм, то дата ее BIOS никак
не связана с приведенной
таблицей.
См. п. 2.6 и 5.2 для
определения возможностей BIOS
таких ПЭВМ.
- 7 -
2. Функции BIOS
2.1. Int 10h - Управление
экраном
Для управления экраном имеются следующие
функции:
Функция
Назначение
─────────────────────────────────────────────────────────────
00h
Задание видеорежима
01h
Задание формы курсора
02h
Задание позиции курсора
03h
Чтение позиции и формы курсора
04h
Чтение позиции светового пера
05h
Задание активной страницы дисплея
06h
Прокрутка окна вверх
07h
Прокрутка окна вниз
08h
Чтение атрибута и символа в текущей позиции курсора
09h
Вывод атрибута и символа в текущую позицию курсора
0Ah
Вывод символа в текущую позицию курсора
0Bh
Задание цветовой палитры
0Ch
Вывод пикселя на экран
0Dh
Чтение пикселя
0Eh
Вывод символов в режиме телетайпа
0Fh
Чтение текущего состояния дисплея
10h
Установка регистров палитр
(PCjr, EGA, VGA, MCGA)
11h
Управление знакогенератором
(EGA, VGA, MCGA)
12h
Выбор альтернативы
(EGA, VGA, MCGA)
13h
Вывод строки на экран
(многие ПЭВМ)
14h
Управление плазменным дисплеем
(Convertible)
15h
Чтение параметров активного дисплея
(Convertible)
1Ah
Чтение/вывод кода комбинации дисплеев (PS/2)
1Bh
Чтение функциональной информации (PS/2)
1Ch
Сохранение/восстановление состояния дисплея (VGA)
─────────────────────────────────────────────────────────────
Примечание. Функции 00h - 0Fh
поддерживаются BIOS всех ПЭВМ
(единственное исключение состоит в том, что
BIOS не поддерживает
графический
режим монохромного адаптера
Hercules). Остальные
функции реализуются только теми адаптерами и теми ПЭВМ, которые
указаны
в скобках после их
описания (подробная информация о
каждой функции приведена ниже).
2.1.1. Фн 00h - Задание видеорежима
Вход: AH = 00h
AL = номер видеорежима
Выход: нет
Описание: Изменяет режим экрана на
заданный в AL. Подробное
описание видеорежимов, поддерживаемых BIOS,
приведено в п. 7.2.
Примечания.
1. В
некоторых версиях BIOS эта фн
разрушает регистры AX,
- 8 -
SP, BP, SI и DI.
2. При смене видеорежима экран очищается.
Мы не рекомендуем
использовать
эту фн для
очистки экрана, т. к. она работает
довольно долго (см. фн 06h и 07h). На PCjr, EGA, VGA, MCGA и PC
Convertible
можно сменить видеорежим без очистки экрана, если
установить старший бит AL.
3. В
графических режимах курсор не
отображается на экране
(кроме VGA, где возможна эмуляция графического курсора - см. фн
12h).
4. Смена видеорежима изменяет форму
курсора.
5. Режимы
0, 2 и 5 для RGB-мониторов
эквивалентны режимам
1, 3 и 4 соответственно. Для композитных (дешевых и устаревших)
мониторов они отличаются тем, что в режимах 0, 2 и 5 запрещена
генерация цветов, т. е. эти режимы являются
черно-белыми.
6. Для чтения текущего видеорежима
используйте фн 0Fh.
7.
При включении ПЭВМ
устанавливаются следующие видео-
режимы:
CGA, PCjr, MCGA - 3;
MDA - 7;
EGA, VGA - 3 или 7 в зависимости от дисплея;
PC Convertible - 2 или 7 в зависимости от дисплея.
8. Для всех видеорежимов, кроме 13h:
- в MCGA инициализируется только первые
16 регистров цвета,
а остальние 240 остаются неопределенными;
- в VGA инициализируется только первые 64 регистров цвета,
а остальние 192 остаются неопределенными.
9.
Для смены вертикального
разрешения экрана VGA в
текстовом режиме (200, 350 или 400)
используйте фн 12h с BL=30h.
См. также: Int 10h, фн 06h
Int 10h, фн 07h
Int 10h, фн 0Fh
Int 10h, фн
12h
2.1.2. Фн 01h - Задание формы курсора
Вход: AH = 01h
CH = начальная линия курсора (0 -
1Fh)
CL = конечная линия курсора (0 - 1Fh)
Выход: нет
Описание:
Изменяет форму экранного
курсора. Допустимые
значения CH и CL зависят от адаптера:
- 9 -
Адаптер Допустимы По умолчанию
──────────────────────────────────────────────────────
CGA 0 - 7
6 - 7
MDA 0 - 13 11 - 12
EGA 0 - 13 Зависит от режима
VGA 0 - 15 Зависит от режима
──────────────────────────────────────────────────────
Примечания.
1. В
некоторых версиях BIOS эта фн
разрушает регистры AX,
SP, BP, SI и DI.
2.
Нумерация линий курсора
начинается с верхней линии
матрицы символа и увеличивается вниз. Если Вы
зададите CH больше
CL, то
на всех дисплеях, кроме VGA,
курсор будет состоять из
двух несвязных частей; на VGA курсор в этом
случае исчезает.
3. Форма курсора одна для всех дисплейных
страниц.
4. Вы
не можете запретить мерцание
курсора - оно генери-
руется аппаратно. В документации на BIOS сказано, что установка
бита
5 или 6
в CH вызывает
исчезновение курсора; в дейст-
вительности
это приводит к
непредсказуемым результатам - от
странного
мерцания курсора до его исчезновения. Поэтому для
того, чтобы сделать курсор невидимым, его
нужно спозиционировать
за пределы экрана - см. фн 02h.
5. Узнать текущую форму курсора можно с
помощью 03h.
6. О курсоре в графических режимах см.
прим. 3 в 2.1.1.
7. Для
PS/2, модель 30 (MCGA) в регистры контроллера ЭЛТ
засылаются такие размеры курсора: 2*CH и
2*CL+1.
См. также: Int 10h, фн 02h
Int 10h, фн 03h
_E2.1.3. Фн 02h - Задание позиции
курсора_F
Вход: AH = 02h
BH = номер дисплейной страницы (0 -
?)
DH = строка (0 - 24)
DL = столбец (0 - 39 или 79)
Выход: нет
Описание:
Позиционирует курсор дисплейной
страницы BH в
заданную строку и столбец.
Примечания.
1. В
некоторых версиях BIOS эта фн
разрушает регистры AX,
SP, BP, SI и DI.
- 10 -
2. Вы можете изменить позицию курсора как
в активной, так и
неактивной странице дисплея.
3. В графических режимах эта фн изменяет
логическую позицию
курсора, хотя он и невидим.
4. Для того, чтобы сделать курсор невидимым, поместите его
в строку 25.
5. Допустимые номера страниц зависят от режима экрана и от
типа
адаптера (см. п. 7.2). При задании
недопустимого номера
страницы
результаты непредсказуемы.
6. Допустимые позиции курсора зависят от текущего видеоре-
жима: число столбцов может быть равно 40 или
80, а число строк -
25 или 30 (в режимах 11h и 12h).
7. Для чтения позиции курсора используйте
фн 03h.
См. также: Int 10h, фн 03h
_E2.1.4. Фн 03h - Чтение позиции и формы
курсора_F
Вход: AH = 03h
BH = номер дисплейной страницы (0 -
?)
Выход: CH = начальная линия курсора (0 -
1Fh)
CL = конечная линия курсора (0 - 1Fh)
DH = текущая строка (0 - 24)
DL = текущий столбец (0 - 39 или
79)
Описание:
Сообщает текущую позицию
и форму курсора для
дисплейной страницы BH.
Примечания.
1. В
некоторых версиях BIOS эта фн
разрушает регистры AX,
SP, BP, SI и DI.
2. Вы
можете запросить параметры
курсора как в активной,
так и неактивной странице дисплея.
3.
В графических режимах
эта фн возвращает логическую
позицию курсора, хотя он и невидим.
4.
Форма курсора одна и та же
для всех страниц (см. фн
01h).
5. Допустимые номера страниц зависят от режима экрана и от
типа
адаптера (см. п. 7.2). При задании
недопустимого номера
страницы результаты непредсказуемы.
6.
Для задания формы
курсора используется фн 01h, для
задания его позиции - фн 02h.
- 11 -
7.
Первые версии MDA и Compaq содержали в этой
функции
ошибку. После
включения MDA сообщал форму
курсора в виде CH=6,
CL=7
(вместо 11 и
12), а Compaq
- CH=0, CL=67h
в любом
видеорежиме. После изменения формы
курсора с помощью фн 01h она
сообщалась уже правильно.
См. также: Int 10h, фн 01h
Int 10h, фн 02h
_E2.1.5. Фн 04h - Чтение позиции светового
пера_F
Вход: AH = 04h
Выход: AH = состояние (0=не взведено,
1=взведено)
BX = горизонтальная позиция (0 -
319 или 639)
CH = вертикальная позиция (0 -
199)
CX = вертикальная позиция для
режимов 0Fh-12h (0-?)
DH = номер строки (0 - 24)
DL = номер столбца (0 - 39 или 79)
Описание: Сообщает позицию светового пера и его состояние
(нажата или нет кнопка светового пера). Поскольку световое перо
можно считать
морально устаревшим устройством,
полезность этой
функции невелика.
Примечания.
1. В
некоторых версиях BIOS эта фн
разрушает регистры AX,
SP, BP, SI и DI.
2.
Если на выходе
AH=0, то в
PC Convertible и PS/2
светового пера нет; для остальных ПЭВМ это означает, что BX, CX
и DX не содержат осмысленных результатов. Если AH=1, то позиция
светового
пера сообщается в
двух формах: графической
и
текстовой.
Графические координаты сообщаются для режимов CGA в CH
и
BX,
для новых графических
режимов - в
CX и BX. Текстовые
координаты выдаются в DH и DL.
3.
Графические координаты сообщаются
приближенно: верти-
кальная позиция всегда кратна 2, а
горизонтальная - кратна 4 для
режима 320 x 200, и 8 для режима 640 х 200.
_E2.1.6. Фн 05h - Задание активной
страницы дисплея_F
Вход: AH = 05h
AL = номер новой активной страницы
(0 - ?)
Выход: нет
Описание: Задает новую активную страницу
дисплея AL.
- 12 -
Примечания.
1. В
некоторых версиях BIOS эта фн
разрушает регистры AX,
SP, BP, SI и DI.
2. Содержимое предыдущей активной страницы не теряется. Вы
можете сформировать несколько страниц, а затем
высвечивать их на
экран,
изменяя номер активной
страницы - именно так обычно
организуется быстрое обновление экрана.
3. Допустимые номера страниц зависят от режима экрана и от
типа
адаптера (см. п. 7.2). При задании
недопустимого номера
страницы результаты непредсказуемы.
4.
Для получения номера
текущей активной страницы
используйте фн 0Fh.
5. Первоначально активной является
страница 0.
6.
На PCjr эта
фн имеет иное
назначение и состоит из
четырех подфункций:
Вход: AL = 80h - Читать регистры страниц
ЭЛТ и
микропроцессора
Вход: AL = 81h - Задать регистр страниц
микропроцессора
BL = регистр страниц
микропроцессора
Вход: AL = 82h - Задать регистр страниц
ЭЛТ
BH = регистр страниц ЭЛТ
Вход: AL = 83h - Задать регистры страниц
ЭЛТ и
микропроцеоора
BL = регистр страниц
микропроцессора
BH = регистр страниц ЭЛТ
Выход для всех подфн:
BL = регистр страниц
микропроцессора
BH = регистр страниц ЭЛТ
См. также: Int 10h, фн 0Fh
_E2.1.7. Фн 06h - Прокрутка окна вверх_F
Вход: AH = 06h
AL = количество прокручиваемых
строк или 0
BH = атрибут вывода пустых строк
CH = верхняя строка
CL = левый столбец
DH = нижняя строка
DL = правый столбец
Выход: нет
Описание: Прокручивает заданное окно на
заданное количество
- 13 -
строк
вверх. Если AL=0, то заполняет окно пробелами (очищает
его). Строки окна сдвигаются вверх и теряются,
выходя за пределы
окна, а
снизу вставляются пустые строки с
атрибутом символов,
заданным в BH.
Примечания.
1. В
некоторых версиях BIOS эта фн
разрушает регистры AX,
SP, BP, SI и DI.
2.
Эта функция воздействует
только на активную страницу
дисплея.
3.
В графических режимах
атрибут задается не
совсем
естественным образом: для CGA каждые два бита байта BH задают
цвет одного
из четырех вертикальных столбцов,
поэтому, если вы
не хотите получить полосарый экран, цвет
заполнения пустых строк
должен быть
четырехкратно повторен в байте
атрибутов. На EGA и
VGA экран заполняется цветом символа (а не
фона!) из байта BH.
Например
для заполнения окна
голубым цветом (код 1) в
текстовом
режиме нужно задать BH=10h, а в
графическом режиме
BH=1 для EGA/VGA и BH=55h для CGA.
4. Для прокрутки окна вниз используйте фн
07h.
См. также: Int 10h, фн 07h
_E2.1.8. Фн 07h - Прокрутка окна вниз_F
Вход: AH = 06h
AL = количество прокручиваемых
строк или 0
BH = атрибут вывода пустых строк
CH = верхняя строка
CL = левый столбец
DH = нижняя строка
DL = правый столбец
Выход: нет
Описание: Прокручивает заданное окно на
заданное количество
строк
вниз. Если AL=0, то
заполняет окно пробелами (очищает
его). Строки окна сдвигаются вниз и теряются, выходя за пределы
окна, а
сверху вставляются пустые строки
с атрибутом символов,
заданным в BH.
Примечания.
1. В
некоторых версиях BIOS эта фн
разрушает регистры AX,
SP, BP, SI и DI.
2.
Эта функция воздействует
только на активную страницу
дисплея.
3. О задании цвета в BH см. прим. 3 в п.
2.1.8.
- 14 -
4. Для прокрутки окна вверх используйте
фн 06h.
См. также: Int 10h, фн 06h
_E2.1.9. Фн 08h - Чтение атрибута и
символа в текущей
позиции курсора_F
Вход: AH = 08h
BH = номер дисплейной страницы
Выход: AH = атрибут символа (в текстовых
режимах)
AL = ASCII-код символа
Описание: Для заданной дисплейной страницы сообщает код и
(в
текстовых режимах) атрибут
символа, находящегося в текущей
позиции курсора.
Примечания.
1. В
некоторых версиях BIOS эта фн
разрушает регистры AX,
SP, BP, SI и DI.
2. В графических режимах CGA задание
дисплейной страницы не
требуется.
3.
В графическом режиме эта фн
пытается определить код
символа
в текущей позиции
курсора, сравнивая изображение на
экране с
матрицами всех символов
графического знакогенератора;
если
такого символа нет,
то возвращается AL=0.
Байт AH в
графических режимах содержит неопределенное
значение.
4. Для
вывода символа с заданным
атрибутом используйте фн
09h, для вывода символа без изменения атрибута
- фн 0Ah.
См. также: Int 10h, фн 09h
Int 10h, фн 0Ah
_E2.1.10. Фн 09h - Вывод атрибута и
символа в текущую
позицию курсора_F
Вход: AH = 09h
AL = АSCII-код символа
BH = номер дисплейной страницы
BL = атрибут (текст) или цвет
(графика) символа
CX = счетчик выводимых символов (не
нуль!)
Выход: нет
Описание: Выводит в заданную страницу дисплея символ AL с
атрибутом BL
с текущей позиции курсора CX раз.
Текущая позиция
курсора не изменяется.
Примечания.
1. В
некоторых версиях BIOS эта фн
разрушает регистры AX,
- 15 -
SP, BP, SI и DI.
2. В графических режимах CGA задание
дисплейной страницы не
требуется.
3. В
текстовых режимах BL должен
содержать атрибут вывода
символа.
Если заданное количество
символов не помещается в
текущую строку экрана, то произойдет перенос в
следующую строку.
4. В графических режимах BL должен содержать
цвет выводимых
символов. Если бит 7 в BL установлен, то во всех режимах, кроме
13h, цвет символа формируется как сумма по модулю 2 (XOR) битов
BL с битами цвета экрана. В режиме 13h BL содержит цвет символа
(0-255), а BH - цвет фона. Если заданное количество символов не
помещается
в текущую строку
экрана, то результаты
непредсказуемы.
5. Управляющие символы (т. е. символы с кодами менее 20h)
выводятся как обычные: например AL=0Dh
отобразится на экране как
рисунок музыкальной ноты, а не как возврат
каретки.
6. В графических режимах 4 - 6 младшие 128 символов ASCII
извлекаются
из знакогенератора видеоадаптера, а
старшие 128
символов
- из пользовательской
таблицы, адрес которой должен
быть задан
в векторе Int 1Fh. В
остальных графических режимах
все 256 символов ASCII хранятся в ПЗУ
знакогенератора.
7. Если Вам нужно вывести символ(ы) без
изменения цвета, то
используйте фн 0Ah.
См. также: Int 1Fh
Int 10h, фн 0Ah
_E2.1.11. Фн 0Ah - Вывод символа в
текущую позицию
курсора_F
Вход: AH = 0Ah
AL = АSCII-код символа
BH = номер дисплейной страницы
CX = счетчик выводимых символов (не
нуль!)
Выход: нет
Описание: Выводит в заданную страницу дисплея символ AL с
текущей
позиции курсора CX
раз. Текущая позиция курсора не
изменяется.
Примечаниe. Эта
фн полностью аналогична
фн 09h с
единственным
отличием: она выводит символ(ы) с тем атрибутом,
который был в позиции курсора.
См. также: Int 10h, фн 09h
- 16 -
_E2.1.12. Фн 0Bh - Задание цветовой
палитры_F
Вход: AH = 0Bh
BH = номер подфн (0 или 1)
BL = зависит от подфн
Выход: нет
Описание: Эта фн предназначена для
видеорежимов CGA и имеет
две подфункции.
Подфн 0: Задание цвета
──────────────────────
BL = новый цвет (0 - 31)
Эта подфн:
- в графических режимах 320 х 200 задает
цвет фона;
-
в графическом режиме
640 х 200
(CGA) задает цвет
символов;
-
в графических режимах 640 х 200
(EGA/VGA) задает цвет
фона;
- в текстовых режимах задает цвет рамки
(цвета 16-31 зaдают
фон повышенной яркости).
Подфн 1: Задание палитры
────────────────────────
BL = номер палитры (0 или 1)
Задает
палитру для графических
режимов 320 х 200, т. е.
соответствие номеров цветов цветам точек
экрана:
┌────────────┬───────────────────┬───────────────────┐
│Номер цвета │ Палитра 0 │ Палитра 1 │
├────────────┼───────────────────┼───────────────────┤
│
0 │ Текущий цвет фона
│ Текущий цвет фона │
│
1 │ Зеленый │ Бирюзовый │
│
2 │ Красный │ Фиолетовый │
│
3 │ Коричневый │ Белый │
└────────────┴───────────────────┴───────────────────┘
Примечания:
1. В
некоторых версиях BIOS эта фн
разрушает регистры AX,
SP, BP, SI и DI.
2. На
EGA/VGA не рекомендуется использовать
эту фн, т. к.
правильно
задавая цвет фона,
она меняет и
некоторые цвета
экрана. Вместо нее рекомендуется фн 10h, подфн
00h.
См. также: Int 10h, фн 10h
- 17 -
_E2.1.13. Фн 0Ch - Вывод пикселя на
экран_F
Вход: AH = 0Ch
AL = цвет пикселя (0-15)
CX = горизонтальная позиция пикселя
DX = вертикальная позиция пикселя
BH = номер дисплейной страницы
Выход: нет
Описание:
Выводит в заданную
позицию заданной страницы
дисплея точку заданного цвета.
Примечания.
1. В
некоторых версиях BIOS эта фн
разрушает регистры AX,
SP, BP, SI и DI.
2. В графических режимах CGA задание
дисплейной страницы не
требуется.
3.
Допустимые позиции и
диапазон цветов определяются
текущим видеорежимом (см. п. 7.2).
4. Если
бит 7 в АL установлен, то во
всех режимах, кроме
13h, цвет символа формируется как сумма по модулю 2 (XOR) битов
AL с
битами цвета экрана. Это
позволяет выводить изображение и
затем удалять его с использованием
"мерцающих битов". Видеорежим
13h допускает значения AL от 0 до 255.
5.
Вывод изображений с помощью
этой фн работает крайне
медленно.
См. также: Int 10h, фн 0Dh
_E2.1.14. Фн 0Dh - Чтение пикселя_F
Вход: AH = 0Dh
CX = горизонтальная позиция пикселя
DX = вертикальная позиция пикселя
BH = номер дисплейной страницы
Выход: AL = цвет пикселя
Описание: Возвращает цвет точки экрана в заданной позиции
заданной дисплейной страницы.
Примечания.
1. В
некоторых версиях BIOS эта фн
разрушает регистры AX,
SP, BP, SI и DI.
2. В графических режимах CGA задание
дисплейной страницы не
требуется.
- 18 -
3.
Допустимые позиции и
диапазон цветов определяются
текущим видеорежимом (см. п. 7.2).
4.
Чтение изображений с помощью этой фн
работает крайне
медленно.
См. также: Int 10h, фн 0Ch
_E2.1.15. Фн 0Eh - Вывод символов в режиме телетайпа_F
Вход: AH = 0Eh
AL = код символа
BL = цвет символа (только для
графических режимов)
BH = номер дисплейной страницы (см.
ниже)
Выход: нет
Описание: Выводит в текущую позицию
курсора заданный символ
и продвигает курсор в следующую позицию экрана (при достижении
конца строки курсор перемещается в начало следующей строки, при
достижении конца экрана происходит сдвиг экрана на одну строку
вверх и
нижняя строка заполняется
атрибутом последнего символа
предыдущей строки).
Примечания.
1. В
некоторых версиях BIOS эта фн
разрушает регистры AX,
SP, BP, SI и DI.
2. В текстовых режимах символ выводится с
текущим атрибутом
данной позиции экрана. В графических режимах
цвет символа должен
быть задан в BL.
3. В
ранних PC (BIOS от 04/24/81
и 10/19/81) в текстовых
режимах BH должен содержать номер активной
страницы дисплея.
4. Эта
фн специальным образом
обрабатывает следующие коды
символов:
07h
- звуковой сигнал;
08h
- возврат курсора на шаг;
0Ah
- перевод курсора в следующую строку (ПС);
0Dh -
перевод курсора в начало строки (ВК).
_E2.1.16. Фн 0Fh - Чтение текущего
состояния дисплея_F
Вход: AH = 0Fh
Выход: AL = текущий видеорежим
AH = количество символов в строке
экрана
BH = номер активной страницы
дисплея
Описание: Возвращает текущие параметры
дисплея.
- 19 -
Примечания.
1. В
некоторых версиях BIOS эта фн
разрушает регистры AX,
SP, BP, SI и DI.
2. Информация о видеорежимах приведена в
п. 7.2.
3.
Для смены видеорежима используйте
фн 00h, для смены
активной страницы - фн 05h.
См. также: Int 10h, фн 00h
Int 10h, фн 05h
_E2.1.17. Фн 10h - Установка
регистров палитр
(PCjr, EGA, VGA, MCGA)_F
Вход: AH = 10h
AL = номер подфн:
00h - Задать один регистр
палитры
01h - Задать регистр рамки
02h - Задать все регистры
палитры
03h - Управление битом
мерцания
07h - Читать один регистр
палитры (VGA)
08h - Читать регистр
рамки (VGA)
09h - Читать все регистры
палитры (VGA)
10h - Задать один регистр
цвета (VGA, MCGA)
12h - Задать блок регистров
цветов (VGA, MCGA)
13h - Задать страницы
цветов (VGA)
15h - Читать один регистр
цвета (VGA, MCGA)
17h - Читать блок регистров
цветов (VGA, MCGA)
1Ah - Читать страницы
цветов (VGA)
1Bh - Суммирование цветов (VGA, MCGA)
прочие - определяются подфн
Выход: зависит от подфн
Описание:
Эта фн состоит
из набора подфн, управляющих
регистрами палитр и цветов на EGA, VGA, MCGA и
PCjr. Подфн 00h -
03h применимы ко всем этим адаптерам, но не должны вызываться в
режиме
13h, т. к.
в этом режиме
регистры палитр служать
индексами
для регистров цветов
ЦАП (цифро-аналогового
преобразователя) VGA.
Подфн 07h - 1Bh
поддерживаются только
адаптером VGA и, с некоторыми оговорками,
MCGA.
EGA
и PCjr имеют 16 регистров палитр и 1
регистр рамки
(overscan).
VGA имеет, кроме того,
256 регистров цвета ЦАП,
каждый
из которых содержит
три 6-битовых значения, задающих
интенсивность зеленого, синего и красного
лучей видеосигнала.
На MCGA эти подфн имеют ряд особенностей,
описанных ниже.
- 20 -
Подфн 00h: задать один регистр палитры
──────────────────────────────────────
Вход: BL = номер палитры (0 - 15)
BH = содержимое регистра
Выход: нет
Описание:
Изменяет содержимое заданного
регистра палитры.
Каждый регистр палитры соответствует одному из
16 номеров цветов
и имеет следующую структуру:
7 6 5
4 3 2
1 0
┌─┬─┬──┬──┬──┬──┬──┬──┐
│X│X│r │g │b │R
│G │B │ Бит:
└─┴─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┘
────
│
│ │ │
│ └──>
0: Синий 2/3 яркости
│
│ │ │
└─────> 1: Зеленый 2/3 яркости
│
│ │ └────────>
2: Красный 2/3 яркости
│
│ └───────────>
3: Синий 1/3 яркости
│
│
(подчеркивание для MGA)
│
└──────────────>
4: Зеленый 1/3 яркости
│ (яркость для MGA)
└─────────────────>
5: Красный 1/3 яркости
Например, BH=02h задаст зеленый, BH=10h -
бледно-зеленый, а
BH=12h - ярко-зеленый цвет.
По умолчанию регистры палитры содержат
значения цветов CGA:
┌─────────────────────────────┬──────────────────────────────┐
│Регистр Значение Цвет │Регистр Значение Цвет
│
├─────────────────────────────┼──────────────────────────────┤
│
0 00h Черный
│ 8 38h
Серый │
│
1 01h Синий
│ 9 39h
Ярко-синий │
│
2 02h Зеленый
│ 10 3Ah
Ярко-зеленый│
│
3 03h Бирюзовый
│ 11 3Bh
Голубой │
│
4 04h Красный
│ 12 3Ch
Алый │
│
5 05h Сиреневый
│ 13 3Dh
Розовый │
│
6 14h Коричневый
│ 14 3Eh
Желтый │
│
7 07h Светло-серый│ 15
3Fh Белый │
└─────────────────────────────┴──────────────────────────────┘
Примечание: Для
MCGA допустим только
вход BX=0712h,
засылающий
в регистры цветов значения, соответствующие восьми
совместимым цветам.
Подфн 01h: Задать регистр рамки
───────────────────────────────
Вход: BH = содержимое регистра рамки
Выход: нет
Описание: Изменяет содержимое регистра
рамки, который имеет
- 21 -
такое
же строение, как
регистры палитр. Первоначально этот
регистр содержит значение 0.
Примечание: EGA
поддерживает рамку только
в режимах с
разрешением NNN x 200. На MCGA эта подфн не
поддерживается.
Подфн 02h: Задать все регистры палитры
──────────────────────────────────────
Вход: ES:BX = адрес списка значений
регистров
Выход: нет
Описание:
Эта подфн устанавливает
новые значения всех
регистров
палитр и регистра рамки. ES:BX должны
указывать на
список
из 17 байтов;
первые 16 байтов
содержат значения
регистров палитр, 17-й байт - значение регистра рамки. На MCGA
эта подфн не поддерживается.
Подфн 03h: Управление битом мерцания
────────────────────────────────────
Вход: BL = 0 - повышенная яркость
1 - мерцание
Выход: нет
Описание:
Обычно бит 7 байта атрибутов означает мерцание
символа.
Эта подфн позволяет
изменить его назначение: BL=1
задает мерцание символа, BL=0 - повышенную
яркость фона.
Подфн 07h: Читать один регистр палитры
──────────────────────────────────────
Вход: BL = номер палитры (0 - 15)
Выход: BH = содержимое регистра
Описание:
Читает текущее содержимое
заданного регистра
палитры. На MCGA эта подфн не поддерживается.
Подфн 08h: Читать регистр рамки
───────────────────────────────
Вход: нет
Выход: BH = содержимое регистра рамки
Описание: Читает текущее содержимое
регистра рамки. На MCGA
эта подфн не поддерживается.
- 22 -
Подфн 09h: Читать все регистры палитры
──────────────────────────────────────
Вход: ES:BX = адрес 17-байтовой таблицы
Выход: Таблица содержит значения
регистров
Описание:
Эта подфн считывает
значения всех регистров
палитр и регистра рамки. ES:BX должны указывать на массив из 17
байтов; в первые 16 байтов заносятся значения регистров палитр,
в 17-й
байт - значение
регистра рамки. На MCGA эта подфн
не
поддерживается.
Подфн 10h: Задать один регистр цвета
────────────────────────────────────
Вход: BX = номер регистра цвета (0-255)
CH = интенсивность зеленого цвета
(0-3Fh)
CL = интенсивность синего цвета
(0-3Fh)
DH = интенсивность красного цвета
(0-3Fh)
Выход: нет
Описание:
Засылает три шестибитовых
значения в заданный
регистр цвета ЦАП.
Подфн 12h: Задать блок регистров цветов
───────────────────────────────────────
Вход: BX = номер первого регистра цвета
CX = количество регистров
ES:BX = адрес таблицы значений
Выход: нет
Описание:
Засылает значения из
таблицы в CX регистров
цветов, начиная с регистра BX. Таблица
значений должна содержать
по три байта для каждого регистра в следующем порядке: красный,
зеленый, синий цвета.
Подфн 13h: Задать страницы цветов
─────────────────────────────────
Вход: BL = 0 - Задать разбиение на
страницы:
BH = 0 - 4 блока по 64 регистра
цветов;
1 - 16 блоков по 16
регистров цветов.
BL = 1 - Задать страницу:
BL = номер блока (0-3 или 0-15)
Выход: нет
Описание:
При BL=0 эта
подфн задает способ
разбиения
регистров ЦАП на блоки. При BL=1 она задает
номер текущего блока
этих регистров.
- 23 -
Примечания:
1. Эта подфн не применима в видеорежиме
13h.
2. Фн 00h (задание видеорежима) задает
разбиение на 4 блока
по 64 регистра и инициализирует только первый
блок. Для работы с
другими блоками регистров Вы должны их предварительно инициали-
зировать.
3. На
MCGA эта подфн не поддерживается.
Подфн 15h: Читать один регистр цвета
────────────────────────────────────
Вход: BX = номер регистра цвета (0-255)
Выход: CH = интенсивность зеленого цвета
(0-3Fh)
CL = интенсивность синего цвета
(0-3Fh)
DH = интенсивность красного цвета
(0-3Fh)
Описание: Считывает три шестибитовых значения из заданного
регистр цвета ЦАП.
Подфн 17h: Читать блок регистров цветов
───────────────────────────────────────
Вход: BX = номер первого регистра цвета
CX = количество регистров
ES:BX = адрес таблицы для приема
значений
Выход: таблица заполнена значениями
регистров
Описание: Заполняет таблицу по адресу ES:BX значениями CX
регистров цветов, начиная с регистра BX. Таблица значений будет
содержать по три байта для каждого регистра в
следующем порядке:
красный, зеленый, синий цвета.
Подфн 1Ah: Читать страницы цветов
─────────────────────────────────
Вход: нет
Выход: BL = тип разбиения на страницы (0
или 1)
BH = номер текущей страницы (0-3
или 0-15)
Описание: Возвращает текущие параметры разбиения регистров
ЦАП на
блоки (см. описание подфн 13h). На MCGA эта подфн не
поддерживается.
- 24 -
Подфн 1Bh: Суммирование цветов
──────────────────────────────
Вход: BX = номер первого регистра цвета
CX = количество регистров
Выход: нет
Описание: Эта подфн предназначена для приведения цветов к
гамме оттенков
серого цвета. Для каждого из
CX регистров ЦАП,
начиная
с BX, она
делает следующее: считывает его значения
цветов, подсчитывает взвешенную сумму
30% красного + 59% зеленого + 11%
голубого
и записывает полученное значение во все три
компоненты регистра.
Старые значения цветов регистра при этом
теряются.
_E2.1.18. Фн 11h - Управление
знакогенератором
(EGA, VGA,
MCGA)_F
Вход: AH = 11h
AL = номер подфн:
00h - Загрузка
пользовательского шрифта для
текстовых режимов
01h - Загрузка шрифта 8 x 14 из ПЗУ
02h - Загрузка шрифта 8 x 8 из ПЗУ
03h - Выбор шрифта
04h - Загрузка шрифта 8 x 16
из ПЗУ (VGA, MCGA)
10h - Загрузка
пользовательского шрифта для
текстовых режимов
11h - Загрузка шрифта 8 x 14 из ПЗУ
12h - Загрузка шрифта 8 x 8 из
ПЗУ
14h - Загрузка шрифта 8 x 16
из ПЗУ (VGA, MCGA)
20h - Загрузка
пользовательского шрифта для
графических режимов в
Int 1Fh
21h - Загрузка
пользовательского шрифта для
графических режимов в
Int 43h
22h - Загрузка шрифта 8 x 14
из ПЗУ
23h - Загрузка шрифта 8 x 8 из
ПЗУ
24h - Загрузка шрифта 8 х 16 из ПЗУ
(VGA, MCGA)
30h - Получение информации о
шрифтах
прочие - зависят от подфн
Выход: Определяется подфн
Описание:
Эта фн содержит группу подфункций, позволяющих
пользователю задавать свои шрифты для
адаптеров EGA, VGA и MCGA.
При этом
VGA поддерживает все
перечисленные подфн, MCGA - все
подфн, но подфн 10h-14h эквивалентны для него
подфн 00h-04h, EGA
поддерживает все, кроме подфн 04h, 14h, 24h.
- 25 -
Подфн 00h: Загрузка пользовательского
шрифта для
текстовых режимов
────────────────────────────────────────────────
Вход: ES:BP = адрес таблицы шрифта
CX = количество символов
DX = ASCII-код первого символа
BL = номер загружаемого блока (0-3 или 0-7)
BH = размер символа в байтах (8, 14 или 16)
Выход: нет
Описание:
Загружает в ОЗУ адаптера таблицу пользователь-
ского шрифта.
Таблица должна размещаться
с адреса ES:BP и
состоять
из матриц размером
8 x n,
где n задается в BH.
Количество матриц задается в CX, код первого
символа таблицы - в
DX.
Например, для перепрограммирования всей
таблицы (256
символов) нужно задать DX=0, CX=256.
Примечания.
1.
Эта подфн перепрограммирует
регистры адаптера, но не
очищает экран.
2.
Каждые 64К ОЗУ
адаптера EGA позовляют хранить один
пользовательский шрифт.
Поэтому EGA с максимальной памятью
(256K) может содержать 4 блока шрифтов (0 -
3).
3. ОЗУ
адаптера VGA позволяет хранить 8
шрифтов (0 - 7),
ОЗУ MCGA - 4 шрифта (0 - 3).
Подфн 01h: Загрузка шрифта 8 x 14 из ПЗУ
─────────────────────────────────────────
Вход: BL = номер загружаемого блока (0-7)
Выход: нет
Описание:
Загружает в ОЗУ
адаптера таблицу шрифта для
монохромного дисплея с матрицей символа 8 х 14
из ПЗУ знакогене-
ратора. См. примечания к подфн 00h.
Подфн 02h: Загрузка шрифта 8 x 8 из ПЗУ
───────────────────────────────────────
Вход: BL = номер загружаемого блока (0-7)
Выход: нет
Описание:
Загружает в ОЗУ
адаптера таблицу шрифта
с
матрицей символа 8 х 8 из ПЗУ знакогенератора. См. примечания к
подфн 00h.
- 26 -
Подфн 03h: Выбор шрифта
───────────────────────
Вход: BL = селектор блока шрифтов
Выход: нет
Описание:
Эта подфн позволяет
Вам указывать в атрибуте
символа, каким шрифтом его нужно выводить на
экран. Номер шрифта
задется битом 3 в байте атрибутов. Селектор
шрифта имеет вид:
7
6 5 4
3 2 1 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│X
X │ │ │
│ │ Биты:
└──┴──┴┬─┴┬─┴──┼──┴──┼──┘
────
│ │
│ └──>
0-1: номер блока, если бит 3=0
│
│ └────────>
2-3: номер блока, если бит 3=1
│
└─────────────>
4: старший бит номера блока, бит 3=0
└────────────────>
5: старший бит номера блока, бит 3=1
Поясним эту структуру. Биты 0, 1 и 4 (для
VGA) задают номер
блока шрифта, который используется, если 3-й
бит байта атрибутов
равен 0; биты
2, 3 и 5 (для VGA) - номер блока
шрифта, который
используется, если 3-й бит атрибутов равен 1. Если номера этих
блоков
совпадают, то бит
3 используется для
управления
повышенной яркостью цвета символа.
Примечания.
1.
Переключение шрифтов действует
только в текстовых
режимах.
2. Фирма IBM рекомендует перед использованием двух шрифтов
вызвать функцию:
mov
ax,1000h
mov
bx,0712h
int
10h
для приведения
битовых плоскостей EGA/VGA к
восьми совместимым
цветам экрана.
Подфн 04h: Загрузка шрифта 8 x 16 из ПЗУ
────────────────────────────────────────
Вход: BL = номер загружаемого блока (0-3)
Выход: нет
Описание:
Загружает в ОЗУ
адаптера таблицу шрифта
с
матрицей символа 8 х 16 из ПЗУ
знакогенератора. См. примечания к
подфн 00h.
- 27 -
Подфн 10h: Загрузка пользовательского
шрифта для
текстовых режимов
Подфн 11h: Загрузка шрифта 8 x 14 из ПЗУ
Подфн 12h: Загрузка шрифта 8 x 8 из ПЗУ
Подфн 14h: Загрузка шрифта 8 x 16 из ПЗУ
────────────────────────────────────────────────
Описание: Эти подфн полностью аналогичны подфн 00h - 04h,
описанным выше, но имеют следующие отличия:
- активной должна быть страница дисплея
0;
- они
должны вызываться немедленно
после установки видео-
режима;
- они пересчитывают размеры текстового экрана и соответст-
венно перепрограммируют ряд регистров
видеоадаптера, а именно:
1. Пусть n = количество байтов на символ.
Вычисляется число
строк на экране как
целая часть [(200 или 350) / n] -1.
2. Пересчитывается размер буфера экрана
как
число строк x число столбцов x 2
3. Перепрограммируются следующие регистры
ЭЛТ:
R9 = n - 1
R10 =
n - 2
R11 = n - 1
R12 = число строк x n x 2 - 1 - для
режимов CGA
число строк x n -1 - для прочих режимов
R14 = n - 1 - только в режиме 7
Подфн 20h: Загрузка пользовательского
шрифта для
графических режимов в Int 1Fh
────────────────────────────────────────────────
Вход: ES:BP = адрес таблицы шрифта
Выход: нет
Описание:
Устанавливает в вектор
Int 1Fh указатель на
пользовательскую таблицу.
ES:BP должен содержать
адрес этой
таблицы,
которая представляет собой
матрицы 8 х 8 символов с
кодами ASCII 128 - 255 (длина таблицы - 8 х
128 = 2048 байтов).
- 28 -
Подфн 21h: Загрузка пользовательского
шрифта для
графических режимов в Int 43h
────────────────────────────────────────────────
Вход: ES:BP = адрес таблицы шрифта
CX = размер символа в байтах
BL = код числа строк на экране:
0 - задается пользователем
1 - 14 строк на экране
2 - 25 строк на экране
3 - 43 строки на экране
DL = число строк на экране при BL=0
Выход: нет
Описание:
Устанавливает в вектор
Int 43h указатель на
пользовательскую таблицу.
ES:BP должен содержать
адрес этой
таблицы,
которая представляет собой
матрицы всех 256 символов
размером 8 х 8 (длина таблицы - 8 x 256 = 4096
байтов).
Подфн 22h: Загрузка шрифта 8 x 14 из ПЗУ
────────────────────────────────────────
Вход: BL = код числа строк на экране:
0 - задается пользователем
1 - 14 строк на экране
2 - 25 строк на экране
3 - 43 строки на экране
DL = число строк на экране при BL=0
Выход: нет
Описание:
Устанавливает в вектор
Int 43h указатель на
таблицы
символов монохромного дисплея
(8 х 14), хранящуюся в
ПЗУ.
Подфн 23h: Загрузка шрифта 8 x 8 из ПЗУ
────────────────────────────────────────
Вход: BL = код числа строк на экране:
0 - задается пользователем
1 - 14 строк на экране
2 - 25 строк на экране
3 - 43 строки на экране
DL = число строк на экране при BL=0
Выход: нет
Описание:
Устанавливает в вектор
Int 43h указатель на
таблицы символов 8 х 8,
хранящуюся в ПЗУ.
- 29 -
Подфн 24h: Загрузка шрифта 8 х 16 из ПЗУ
────────────────────────────────────────
Вход: BL = код числа строк на экране:
0 - задается пользователем
1 - 14 строк на экране
2 - 25 строк на экране
3 - 43 строки на экране
DL = число строк на экране при BL=0
Выход: нет
Описание:
Устанавливает в вектор
Int 43h указатель на
таблицы символов 8 х 16,
хранящуюся в ПЗУ.
Подфн 30h: Получение информации о шрифтах
─────────────────────────────────────────
Вход: BH = код запроса:
0 - вернуть информацию о Int
1Fh
1 - вернуть информацию о Int
43h
2 - вернуть информацию о
шрифте 8х14 в ПЗУ
3 - вернуть информацию о
шрифте 8х8 в ПЗУ
4 - вернуть информацию о
шрифте 8х8 в ПЗУ
(старшие 128 символов)
5 - вернуть информацию об
альтернативном шрифте
9х14
6 - вернуть информацию о шрифте
8х16 в ПЗУ
7 - вернуть информацию об
альтернативном шрифте
9х16
Выход: ES:BP = адрес запрошенной таблицы
CX = количество байтов на символ
DL =
число строк на экране - 1
Описание:
Возвращает указанную информацию
о запрошенном
шрифте.
_E2.1.19. Фн 12h - Выбор альтернативы
(EGA, VGA, MCGA)_F
Вход: AH = 12h
BL = номер подфн:
10h - Вернуть информацию о
EGA/VGA (EGA, VGA)
20h - Выбрать альтернативную
программу печати
экрана (EGA, VGA)
30h - Задать разрешение экрана
для текстовых
режимов (VGA)
31h - Управление сменой
палитры (VGA, MCGA)
32h - Управление
видеовыходом (VGA, MCGA)
33h - Приведение к серому
цвету (VGA, MCGA)
34h - Управление эмуляцией
курсора (VGA)
35h - Переключение дисплея
(VGA, MCGA)
36h - Управление экраном (VGA)
прочие - зависят от подфн
- 30 -
Выход: определяется подфн
Описание:
Эта фн объединяет
группу разнородных функций
адаптеров EGA, VGA и MCGA. Подфн 10h и 20h
применимы к адаптерам
EGA и VGA; 30h, 34h и 36h - только к VGA, 31h, 32h, 33h и 35h -
к VGA и MCGA.
Подфн 10h: Вернуть информацию о EGA/VGA
───────────────────────────────────────
Вход: нет
Выход: BH = Режим дисплея:
0 - цветной режим (порты
3DXh)
1 - монохромный режим (порты
3BXh)
BL = Объем ОЗУ на плате адаптера:
0 - 64K
1 - 128K
2 - 192K
3 - 256K
CH
= Характеристики
(feature bits):
бит
0 = FEAT0 (контакт
19);
бит 1 = FEAT1
(контакт 17);
биты 2-7 - зарезервированы.
CL = Положение DIP-переключателей
(см. ниже)
Описание: Эта подфн возвращает информацию об адаптере EGA
или VGA
и о подключенных к нему
дисплеях. Содержимое CL несет
следующую информацию:
0Fh Первичный MDA
Вторичный EGA с цветным монитором 40х25
0Eh Первичный MDA
Вторичный EGA с цветным монитором 80х25
0Dh Первичный MDA
Вторичный EGA с расширенным цветным
монитором (эмуляция CGA)
0Ch Первичный MDA
Вторичный EGA с расширенным цветным
монитором (в режиме EGA)
0Bh Первичный CGA с цветным монитором 40х25
Вторичный EGA с монохромным монитором
0Ah Первичный CGA с цветным монитором 80х25
Вторичный EGA с монохромным монитором
09h Первичный EGA с цветным монитором 40x25
Вторичный MDA
08h Первичный EGA с цветным монитором 80x25
Вторичный MDA
07h Первичный EGA с расширенным цветным
монитором (эмуляция CGA)
- 31 -
Вторичный MDA
06h Первичный EGA с расширенным цветным
монитором (в режиме EGA)
Вторичный MDA
05h Первичный EGA с монохромным монитором
Вторичный CGA с цветным монитором 40х25
04h Первичный EGA с монохромным монитором
Вторичный CGA с цветным монитором 80х25
03h - 00h Недопустимые комбинации
Примечание: VGA
не имеет DIP-переключателей, поэтому
соответствующая информация извлекается из
памяти.
Подфн 20h: Выбрать альтернативную
программу печати
экрана
──────────────────────────────────────────────────
Вход: нет
Выход: нет
Описание:
Заменяет программу печати
экрана по нажатию
клавиши PrtSc на альтернативную в соответствии
с числом строк на
экране. Эту
подфн следует вызывать всякий раз
после изменения
числа строк экрана.
См. также: Int 05h
Подфн 30h: Задать разрешение экрана для
текстовых режимов
─────────────────────────────────────────────────────────
Вход: AL = количество линий на экране:
0 - 200 линий;
1 - 350 линий;
2 - 400 линий.
Выход: AL = 12h, если BIOS поддерживает
эту подфн
Описание: Задает количество линий на экране для текстовых
режимов. Действие подфн сказывется после вызова фн 00h (сменить
видеорежим).
Подфн 31h: Управление сменой палитры
────────────────────────────────────
Вход: AL = 0 - разрешить переустановку
палитр
1 - запретить переустановку
палитр
Выход: AL = 12h, если BIOS поддерживает
эту подфн
Описание:
Если AL=0, то при смене видеорежима регистры
палитры
заполняются значениями, принятыми
по умолчанию; если
- 32 -
AL=1,
то при смене видеорежима используются текущие значения
регистров
палитр. Это относится к регситрам палитр, регистру
рамки и регистрам цветов.
См. также: Int 10h, фн 10h
Подфн 32h: Управление видеовыходом
──────────────────────────────────
Вход: AL = 0 - разрешить видеовыход
1 - запретить видеовыход
Выход: AL = 12h, если BIOS поддерживает эту
подфн
Описание: Разрещает
или запрещает порты
ввода-вывода
видеоадаптера и декодирование адреса буфера регенерации экрана
для дисплея, который активен в данный момент.
Подфн 33h: Приведение к серому цвету
────────────────────────────────────
Вход: AL = 0 - разрешить суммирование
1 - запретить суммирование
Выход: AL = 12h, если BIOS поддерживает
эту подфн
Описание:
Разрещает или запрещает
приведение цветов к
оттенкам
серого цвета. Если
разрешено, то суммирование
выполняется
при выполнении фн 00h
(задать видеорежим) и 10H
(задать регистры палитры).
См. также: Int 10h, фн 10h, подфн 1Bh
Подфн 34h: Управление эмуляцией курсора
───────────────────────────────────────
Вход: AL = 0 - разрешить эмуляцию
1 - запретить эмуляцию
Выход: AL = 12h, если BIOS поддерживает
эту подфн
Описание:
Разрешает или запрещает
эмуляцию курсора. Если
эмуляция
разрешена, то размер
курсора, заданный фн
01h,
приводится
к текущей высоте символов экрана. После
включения
ПЭВМ эмуляция разрешена.
Подфн 35h: Переключение дисплея
───────────────────────────────
Вход: AL = код действия (см. ниже)
прочие - зависят от действия
Выход: AL = 12h, если BIOS поддерживает
эту подфн
Описание: Эта подфн обеспечивает переключение между BIOS,
- 33 -
расположенным
на системной плате,
и BIOS, зашитым
в плату
адаптера
дисплея. Она нужна только в том случае, если два эти
BIOS противоречат друг другу (несовместимы). Для использования
ее необходимо, чтобы оба BIOS поддерживали подфн 32h (запретить
видеовывод).
Эта подфн поддерживает
следующие действия (код
действия задается в AL):
0 - отключить BIOS видеоадаптера;
ES:DI
должны указывать на
буфер сохранения (область
памяти размером 128 байтов);
1 - включить BIOS системной платы;
2 - деактивировать видеоадаптер;
ES:DI
должны указывать на
буфер сохранения (область
памяти размером 128 байтов);
3 - активизировать видеоадаптер;
ES:DX
должны указывать на
ранее заполненный буфер
сохранения.
Опишем
последовательность
переключения дисплея. Перво-
начально
активен BIOS видеоадаптера.
Для переключения на BIOS
системной платы в первый раз нужно:
- вызвать эту подфн с кодом AL=0;
- вызвать эту подфн с кодом AL=1;
В дальнейшем переключение между BIOS
системной платы и BIOS
адаптера производится вызовом этой подфн с
кодами AL=2 и AL=3.
Подфн 36h: Управление экраном
─────────────────────────────
Вход: AL = 0 - Разрешить экран
1 - Запретить экран
Выход: AL = 12h, если BIOS поддерживает
эту подфн
Описание: Разрешает или запрещает поступление видеосигнала
на экран. Если экран запрещен, то весь вывод
на него идет черным
цветом по черному.
_E2.1.20. Фн 13h - Вывод строки на экран
(многие ПЭВМ)_F
Вход: AH = 13h
AL = номер подфн:
00h - Вывод с одним атрибутом и
без сдвига курсора
01h - Вывод с одним атрибутом и
со сдвигом курсора
02h - Вывод с атрибутами и без
сдвига курсора
03h - Вывод с атрибутами и со
сдвигом курсора
прочие - зависят от подфн
Выход: нет
Описание:
Эта функция выполняет вывод строки символов в
экранную память и состоит из четырех подфн,
описанных ниже.
- 34 -
Примечания.
1.
Эта фн поддерживается на XT, датированных 01/19/86 и
позже, AT,
PC Convertible, PS/2 и всех
ПЭВМ с адаптерами EGA,
VGA и MCGA.
2.
В некоторых версиях
BIOS она разрушает
содержимое
регистров AX, SP, BP, SI и DI.
3. При выводе строки на экран специальным
образом обрабаты-
ваются следующие коды символов:
07h
- звуковой сигнал;
08h
- возврат курсора на шаг;
0Ah
- перевод курсора в следующую строку (ПС);
0Dh
- перевод курсора в начало строки (ВК).
Подфн 00h: Вывод с одним атрибутом и без
сдвига курсора
───────────────────────────────────────────────────────
Вход: BH = номер страницы дисплея
BL = атрибут
CX = длина строки
DH = номер строки экрана
DL = номер столбца экрана
ES:BP = адрес строки
Выход: нет
Описание:
Выводит CX символов с адреса ES:BP
в заданную
страницу экранной памяти с позиции экрана (DH, DL). Все символы
выводятся с атрибутом BL. Текущая позиция
курсора не изменяется.
Подфн 01h: Вывод с одним атрибутом и со
сдвигом курсора
───────────────────────────────────────────────────────
Вход: BH = номер страницы дисплея
BL = атрибут
CX = длина строки
DH = номер строки экрана
DL = номер столбца экрана
ES:BP = адрес строки
Выход: нет
Описание:
Выводит CX символов с адреса ES:BP
в заданную
страницу экранной памяти с позиции экрана (DH, DL). Все символы
выводятся
с атрибутом BL.
Курсор устанавливается в
первую
позицию экрана после выведенной строки.
- 35 -
Подфн 02h: Вывод с атрибутами и без
сдвига курсора
──────────────────────────────────────────────────
Вход: BH = номер страницы дисплея
CX = длина строки
DH = номер строки экрана
DL = номер столбца экрана
ES:BP = адрес строки
Выход: нет
Описание: Выводит CX символов и атрибутов с адреса ES:BP в
заданную
страницу экранной памяти с позиции экрана (DH, DL).
Строка должна состоять из пар (символ,
атрибут). Текущая позиция
курсора не изменяется.
Подфн 03h: Вывод с атрибутами и со
сдвигом курсора
──────────────────────────────────────────────────
Вход: BH = номер страницы дисплея
CX = длина строки
DH = номер строки экрана
DL = номер столбца экрана
ES:BP = адрес строки
Выход: нет
Описание: Выводит CX символов и атрибутов с адреса ES:BP в
заданную
страницу экранной памяти с позиции экрана (DH, DL).
Строка должна состоять из пар (символ,
атрибут). Курсор устанав-
ливается в первую позицию экрана после
выведенной строки.
_E2.1.21. Фн 14h - Управление плазменным
дисплеем
(PC
Convertible)_F
Вход: AH = 14h
AL = номер подфн:
00h - Загрузить
пользовательский шрифт
01h - Загрузить шрифт из ПЗУ
02h - Управление атрибутом
яркости
прочие - зависят от подфн
Выход: нет
Описание:
Эта фн, доступная
только на PC Convertible,
состоит из трех подфн управления плазменным
(LCD) дисплеем.
- 36 -
Подфн 00h: Загрузить пользовательский
шрифт
───────────────────────────────────────────
Вход: ES:DI = адрес таблицы шрифтов
CX = количество символов в шрифте (1 - 256)
DX = ASCII-код первого символа шрифта
BL = Номер загружаемого блока:
0 - Основной шрифт
1 - Дополнительный шрифт
BH = Количество байтов на символ (1 - 255)
Выход: нет
Описание: Позволяет загрузить в знакогенератор плазменного
дисплея
пользовательский шрифт. Вы
можете загрузить два своих
шрифта
- основной и
дополнительный. Таблица шрифта
должна
размещаться с адреса ES:DI и состоять из матриц размером 8 x n,
где
n задается в
BH. Количество матриц
задается в CX, код
первого
символа таблицы - в DX.
Например, для перепрог-
раммирования
всей таблицы (256
символов) нужно задать DX=0,
CX=256.
Подфн 01h: Загрузить шрифт из ПЗУ
─────────────────────────────────
Вход: BL = Номер загружаемого блока:
0 - Основной шрифт
1 - Дополнительный шрифт
Выход: нет
Описание: Загружает
в знакогенератор дисплея таблицу
шрифтов,
зашитую в ПЗУ. Вы должны указать в BL,
какой блок
памяти знакогенератора использовать - нулевой
или первый.
Подфн 02h: Управление атрибутом яркости
───────────────────────────────────────
Вход: BL = Назначение атрибута повышенной
яркости:
0 - игнорировать атрибут;
1 - отображать его в негатив;
2 - отображать его в
подчеркивание;
3 - использовать его для
выбора шрифта
(0 - основной, 1 -
дополнительный)
Выход: нет
Описание: Повышенная
яркость символов (бит
4 байта
атрибутов) не
поддерживается на плазменных
дисплеях. Эта подфн
позволяет Вам
определить использование этого
бита, как описано
выше.
- 37 -
_E2.1.22. Фн 15h - Чтение параметров
активного дисплея
(PC
Convertible)_F
Вход: AH = 15h
Выход: AX = Тип вторичного видеоадаптера:
00h - нет вторичного адаптера
5140h - плазменный дисплей
5153h - адаптер CGA
5151h - монохромный адаптер
ES:DI = Адрес 7-словной таблицы
параметров дисплея
Описание: Возвращает
параметры активного дисплея
в
следующем формате:
────────────────────────────────────────────────────────────────
Смещение Длина Содержимое Комментарий
────────────────────────────────────────────────────────────────
┌────────┐
+00h
2 │ │ Номер модели дисплея
├────────┤
+02h
2 │ │ Пикселей на метр по вертикали
├────────┤
+04h
2 │ │ Пикселей на метр по горизонтали
├────────┤
+06h
2 │ │ Всего пикселей по вертикали
├────────┤
+08h
2 │ │ Всего пикселей по горизонтали
├────────┤
+0Ah
2 │ │ Высота пикселя в микрометрах
├────────┤
+0Ch
2 │ │
Ширина пикселя в микрометрах
└────────┘
0Eh
Длина таблицы
────────────────────────────────────────────────────────────────
В зависимости от типа дисплея эта таблица имеет следующее
содержимое:
─────────────────────────────────────────────────────────
Слово
Монохромный CGA Плазменный Плазменный
дисплей цветной монохромный
─────────────────────────────────────────────────────────
1
5151h 5153h 5140h 5140h
2
0 0498h 08E1h 0
3 0 0A15h 0987h 0
4 0 00C8h 00C8h 0
5 0 0280h 0280h 0
6 0 0352h 0172h 0
7 0 0184h 0172h 0
─────────────────────────────────────────────────────────
Примечание. В техническом описании
PC Convertible неверно
приведено содержимое слов 6 и 7 для
цветного плазменного дисплея
(01B8h и 019Ah). Истинные значения см. в
приведенной таблице.
- 38 -
_E2.1.23. Фн 1Ah - Чтение/вывод кода
комбинации дисплеев
(PS/2)_F
Вход: AH = 1Ah
AL = номер подфн:
00h - Читать код комбинации
дисплеев
01h - Задать код комбинации
дисплеев
прочие - зависят от подфн
Выход: определяется подфн
Описание:
Эта фн реализована только в PS/2
и имеет две
подфункции, позволяющие считывать и
устанавливать код комбинации
дисплеев
(DCC). DCC -
это байт, который
может принимать
следующие значения:
00h - Нет дисплея
01h - Монохромный адаптер с дисплеем 5151
(монохромным)
02h - CGA с дисплеем 5153/4 (цветным)
03h - Зарезервировано
04h - EGA с дисплеем 5153/4 (цветным)
05h - EGA с дисплеем 5151 (монохромным)
06h - PGA с дисплеем 5175 (цветным)
07h - VGA с аналоговым монохромным
дисплеем
08h - VGA с аналоговым цветным дисплеем
09h - Зарезервировано
0Ah - Зарезервировано
0Bh - MCGA с аналоговым монохромным
дисплеем
0Ch - MCGA с аналоговым цветным дисплеем
0Dh-FEh - Зарезервировано
FFh - Неизвестный тип адаптера или дисплея
Подфн 00h: Читать код комбинации дисплеев
──────────────────────────────────────────
Вход: нет
Выход: AL = 1Ah, если фн поддерживается
BIOS
BL = DCC первичного дисплея
BH = DCC вторичного дисплея
Описание:
Возвращает DCC активного
и (если он
есть)
дополнительного дисплеев ПЭВМ. Если на выходе
AL отлично от 1Ah,
то BIOS ПЭВМ не поддерживает этой функции.
Подфн 01h: Задать код комбинации дисплеев
──────────────────────────────────────────
Вход: BL = DCC первичного дисплея
BH = DCC вторичного дисплея
Выход: AL = 1Ah, если фн поддерживается
BIOS
Описание: Изменяет DCC активного и
дополнительного дисплеев
ПЭВМ.
Если на выходе
AL отлично от
1Ah, то BIOS ПЭВМ не
- 39 -
поддерживает этой функции.
_E2.1.24. Фн 1Bh - Чтение функциональной
информации (PS/2)_F
Вход: AH = 1Bh
BX = 00h
ES:DI = адрес пользовательского буфера
длиной 64
байта
Выход: AL = 1Bh, если фн поддерживается
BIOS
ES:DI = адрес буфера, содержащего
запрошенную
информацию
Описание:
Эта функция, реализованная
только в PS/2,
возврашает
функциональную информацию о
дисплее в следующем
формате:
────────────────────────────────────────────────────────────────
Смещение Длина Содержимое Комментарий
────────────────────────────────────────────────────────────────
┌────────┬────────┐
+00h
4 │смещение│
сегмент│ Aдрес таблицы статической
├────┬───┴────────┘
информации
+04h
1 │ │
Текущий видеорежим
├────┴───┐
+05h
2 │ │
Количество столбцов на экране
├────────┤
+07h
2 │ │
Длина дисплейной страницы
├────────┤
+09h
2 │ │
Адрес дисплейной страницы
├────────┤
+0Bh
2 │ │
Позиция курсора в странице 0
├────────┤ (строка, столбец)
+0Dh
2 │ │
Позиция курсора в странице 1
├────────┤ (строка, столбец)
+0Fh
2 │ │
Позиция курсора в странице 2
├────────┤ (строка, столбец)
+11h
2 │ │
Позиция курсора в странице 3
├────────┤ (строка, столбец)
+13h
2 │ │
Позиция курсора в странице 4
├────────┤ (строка, столбец)
+15h
2 │ │ Позиция курсора в странице 5
├────────┤ (строка, столбец)
+17h
2 │ │
Позиция курсора в странице 6
├────────┤ (строка, столбец)
+19h
2 │ │
Позиция курсора в странице 7
├────────┤ (строка, столбец)
+1Bh
2 │ │
Форма курсора
├────────┤
+1Dh
2 │ │
Номер активной страницы
├────────┤
+1Eh
2 │ │
Базовый адрес контроллера ЭЛТ
├────┬───┘ (3B8h - монохромный, 3D8h - цветной)
+20h
1 │ │
Тек. содержимое регистра 3x8h
└────┘
- 40 -
────────────────────────────────────────────────────────────────
Смещение Длина Содержимое Комментарий (пpодолжение)
────────────────────────────────────────────────────────────────
┌────┐
+21h
1 │ │
Тек. содержимое регистра 3x9h
├────┤
+22h
1 │ │ Количество строк на экране
├────┴───┐
+23h
2 │ │
DCC активного дисплея
├────────┤
+25h
2 │ │
DCC второго дисплея
├────────┤
+27h
2 │ │
Цвета текущего видеорежима
├────┬───┘
+29h
1 │ │
Кол-во страниц текущего видеорежима
├────┤
+2Ah
1 │ │
Количество линий на экране
├────┤ (0=200, 1=350, 2=400, 3=480)
+2Bh 1
│ │ Первичный блок шрифта (0-255)
├────┤
+2Ch
1 │ │
Вторичный блок шрифта (0-255)
├────┤
+2Dh
1 │ │
Разная информация (см. ниже)
├────┼────┬────┐
+2Eh
3 │ │
│ │ Зарезервировано
├────┼────┴────┘
+31h
1 │ │
Объем ОЗУ видеоадаптера
├────┤ (0=64K, 1=128K, 2=192K, 3=256K)
+32h
1 │ │
Информация о сохранении (см. ниже)
├────┼────┬────┐
+33h
13 │ │... │ │ Зарезервировано
└────┴────┴────┘
40h
Длина таблицы
────────────────────────────────────────────────────────────────
Примечания.
1.
Первичный и вторичный блок
символов имеются на всех
PS/2, кроме модели 30. О них см. фн 11h, подфн
03h.
2. Байт разной информации имеет следующую
структуру:
7 6 5
4 3 2
1 0
┌─┬─┬──┬──┬──┬──┬──┬──┐
│X│X│ │
│ │ │
│ │ Бит:
└─┴─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┘
────
│
│ │ │
│ └──>
0: 1="все режимы на всех дисплеях"
│
│ │ │
└─────> 1: 1=включено
суммирование
│
│ │ └────────>
2: 1=монохромный дисплей
│
│ └───────────>
3: 1=запрещена загрузка палитр по
│
│ умолчанию при смене режима
│
└──────────────>
4: 1=разрешена эмуляция курсора
│ (в модели 30 всегда 0)
└─────────────────>
5: 0=яркость фона, 1=мерцание
- 41 -
3. Байт информации о сохранении имеет
следующий формат:
7 6 5
4 3 2
1 0
┌─┬─┬──┬──┬──┬──┬──┬──┐
│X│X│ │
│ │ │
│ │ Бит:
└─┴─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┘
────
│
│ │ │
│ └──>
0: 1=два набора шрифтов
│
│ │ │
└─────> 1: 1=активна область динамического
│
│ │ │ сохранения
│
│ │ └────────>
2: 1=активно переопределение
│
│ │ текстовых шрифтов
│
│ └───────────>
3: 1=активно переопределение
│
│
графичских шрифтов
│
└──────────────>
4: 1=активно переопределение
│ палитр
└─────────────────>
5: 1=активны расширения ЦАП
4.
Таблица статической информации
содержит данные об
адаптере,
не зависящие от текущего видеорежима
и прочих
динамических характеристик. Ее формат:
────────────────────────────────────────────────────────────────
Смещение Длина Содержимое Комментарий
────────────────────────────────────────────────────────────────
┌────┬────┬────┐
+00h
3 │ │
│ │ Допустимые
видеорежимы
├────┼────┼────┼────┐
+03h
4 │ │
│ │ │ Зарезервировано
├────┼────┴────┴────┘
+07h
1 │ │
Число линий в текстовых режимах
├────┤
+08h
1 │ │
Количество блоков шрифтов
├────┤ в текстовых режимах
+09h
1 │ │
Количество активных шрифтов
├────┤ в текстовых режимах
+0Ah
1 │ │
Различные функции 1
├────┤
+0Bh
1 │ │
Различные функции 2
├────┼────┐
+0Ch
2 │ │
│ Зарезервировано
├────┼────┘
+0Eh
1 │ │
Допустимые функции сохранения
├────┤
+0Fh
1 │ │
Зарезервировано
└────┘
10h
Длина таблицы
────────────────────────────────────────────────────────────────
- 42 -
Байты допустимых видеорежимов имеют
следующую структуру.
Байт 0:
7
6 5 4
3 2 1 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│
│ │ │
│ │ │
│ │ Биты: Маска:
└┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┘
──── ──────
│
│ │ │
│ │ │
└──> 0: 1=допустим режим 0 a&01h
│
│ │ │
│ │ └─────>
1: 1=допустим режим 1 a&02h
│
│ │ │
│ └────────>
2: 1=допустим режим 2 a&04h
│
│ │ │
└───────────>
3: 1=допустим режим 3 a&08h
│
│ │ └──────────────>
4: 1=допустим режим 4 a&10h
│
│ └─────────────────>
5: 1=допустим режим 5 a&20h
│
└────────────────────>
6: 1=допустим режим 6 a&40h
└───────────────────────>
7: 1=допустим режим 7 a&80h
Байт 1:
7
6 5 4
3 2 1 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│
│ │ │
│ │ │
│ │ Биты: Маска:
└┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┘
──── ──────
│
│ │ │
│ │ │
└──> 0: 1=допустим режим 08h a&01h
│
│ │ │
│ │ └─────>
1: 1=допустим режим 09h a&02h
│
│ │ │
│ └────────>
2: 1=допустим режим 0Ah a&04h
│
│ │ │
└───────────>
3: 1=допустим режим 0Bh a&08h
│
│ │ └──────────────>
4: 1=допустим режим 0Ch a&10h
│
│ └─────────────────>
5: 1=допустим режим 0Dh a&20h
│
└────────────────────>
6: 1=допустим режим 0Eh a&40h
└───────────────────────>
7: 1=допустим режим 0Fh a&80h
Байт 2:
7
6 5 4
3 2 1 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│X │X │X │X │ │
│ │ │ Биты: Маска:
└──┴──┴──┴──┴┬─┴┬─┴┬─┴┬─┘
──── ──────
│ │
│ └──>
0: 1=допустим режим 10h a&01h
│ │
└─────> 1: 1=допустим режим
11h a&02h
│ └────────>
2: 1=допустим режим 12h a&04h
└───────────>
3: 1=допустим режим 13h a&08h
Число линий в текстовых режимах задается
так:
7
6 5 4
3 2 1 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│X │X │X │X │X │ │
│ │ Биты: Маска:
└──┴──┴──┴──┴──┴┬─┴┬─┴┬─┘
──── ──────
│ │
└──> 0: 1=допустимы 200 линий a&01h
│ └─────>
1: 1=допустимы 350 линий a&02h
└────────>
2: 1=допустимы 400 линий a&04h
- 43 -
Различные функции описывают возможности
адаптера.
Байт 1:
7
6 5 4
3 2 1 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│
│ │ │
│ │ │
│ │ Биты:
└┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┘
────
│
│ │ │
│ │ │
└──> 0: 1="все режимы на всех дисплеях"
│
│ │ │
│ │ │ (в модели 30 всегда 0)
│
│ │ │
│ │ └─────>
1: 1=допустимо сумирование цветов
│
│ │ │
│ └────────>
2: 1=допустима загрузка шрифтов
│
│ │ │
└───────────>
3: 1=допустима смена палитр при смене
│
│ │ │ при смене режима
│
│ │ └──────────────>
4: 1=допустима эмуляция курсора
│
│ └─────────────────>
5: 1=допустимы палитры EGA
│
└────────────────────>
6: 1=допустимы палитры цветов
└───────────────────────>
7: 1=допустимы страницы цветов
(в модели 30
всегда 0)
Байт 2:
7
6 5 4
3 2 1 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│X │X │X │X │ │
│ │ │ Биты:
└──┴──┴──┴──┴┬─┴┬─┴┬─┴┬─┘
────
│ │
│ └──>
0: 1=световое перо
│ │
└─────> 1:
1=сохранение/восстановление
│ │
(в модели 30 всегда 0)
│ └────────>
2: 1=яркость фона/мерцание
└───────────>
3: 1=регистры ЦАП
Допустимые функции сохранения:
7 6 5
4 3 2
1 0
┌─┬─┬──┬──┬──┬──┬──┬──┐
│X│X│ │
│ │ │
│ │ Бит:
└─┴─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┘
────
│
│ │ │
│ └──>
0: 1=два набора шрифтов
│
│ │ │
└─────> 1: 1=динамическая область
сохранения
│
│ │ └────────>
2: 1=переопределение текстовых шрифтов
│
│ └───────────>
3: 1=переопределение графических шрифтов
│
└──────────────>
4: 1=переопределение палитр
└─────────────────>
5: 1=расширения ЦАП
(в модели 30
всегда 0)
- 44 -
_E2.1.25. Фн 1Ch - Сохранение/восстановление
состояния
дисплея (VGA)_F
Вход: AH = 1Ch
AL = номер подфн:
00h - запросить размер буфера
сохранения
01h - сохранить состояние
02h - восстановить состояние
CX = запрашиваемые состояния:
бит 0 = 1 - состояние
видеоадаптера
бит 1 = 1 - состояние области
данных BIOS
бит 2 = 1 - состояние
регистров цветов и ЦАП
биты 3 - 15 должны быть нулями
прочие - зависят от подфн
Выход: AL = 1Ch - функция поддерживается
BIOS
прочие - определяются подфн
Описание:
Эта фн поддерживается только
адаптером VGA и
обеспечивает
сохранение и восстановление его
состояния. Она
имеет три подфункции.
Примечание. Операция сохранения состояния вносит изменения
в состояние адаптера. Поэтому
последовательность действий обычно
такова:
- запросить размер буфера сохранения
(подфн 00h) и выделить
буфер;
-
сохранить состояние (подфн 01h) и сразу
восстановить его
(подфн 02h);
- выполнить необходимые действия;
- восстановить исходное состояние (подфн
02h).
Подфн 00h: Запросить размер буфера
сохранения
─────────────────────────────────────────────
Вход: CX = запрашиваемые состояния (см.
выше)
Выход: AL = 1Ch - функция поддерживается
BIOS
BX = размер буфера сохранения в
блоках по 64 байта
Описание: Возвращает
размер буфера, необходимый
для
сохранения запрошенных состояний.
- 45 -
Подфн 01h: Сохранить состояние
──────────────────────────────
Вход: CX = запрашиваемые состояния (см.
выше)
ES:BX = адрес буфера сохранения
Выход: AL = 1Ch - функция поддерживается
BIOS
ES:BX = адрес заполненного буфера
Описание: Сохраняет запрошенные состояния в буфере пользо-
вательской программы.
Подфн 02h: Восстановить состояние
─────────────────────────────────
Вход: CX = запрашиваемые состояния (см.
выше)
ES:BX = адрес буфера сохранения
Выход: AL = 1Ch - функция поддерживается
BIOS
Описание:
Восстанавливает запрошенные
состояния из буфера
пользовательской программы.
- 46 -
_E2.2. Int 11h - Конфигурация
оборудования_F
Вход: нет
Выход: AX=конфигурация оборудования
Описание: Возвращает в AX конфигурацию оборудования ПЭВМ.
Это
слово формируется в
процессе POST и
имеет следующую
структуру:
7
6 5 4
3 2 1 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│
│ │X │ │
│ │ Биты:
└──┼──┴──┼──┴──┴┬─┴┬─┴┬─┘
────
│
│ │ │
└──> 0: 1=есть НГМД
│
│ │ └─────>
1: 1=есть сопроцессор 8087/287
│
│ └────────>
2: 1=есть мышь (PS/2)
│
└───────────────>
4-5: тип дисплея:
│ 00 - EGA или VGA
│ 01 - CGA, 40
столбцов
│ 10 - CGA, 80
столбцов
│ 11 - монохромный
└─────────────────────>
6-7: количество НГМД - 1
1
1 1 1
1 1
5
4 3 2
1 0 9 8
┌──┬──┬──┬──┬──┬──┬──┬──┐
│
│ │ │
│X │ Биты:
└──┼──┴┬─┴┬─┴──┴┬─┴──┴──┘
────
│
│ │ └────────>
9-11: количество стыков RS-232C
│
│ └──────────────>
12: 1=есть игровой адаптер
│
└─────────────────>
13: 1=есть встроенный модем (PC Conv)
└─────────────────────>
14-15: количество адаптеров принтеров
Примечания:
1.
Это слово хранится
в области данных BIOS по адресу
00410h.
2.
На IBM PC, XT и PCjr
биты 2-3 содержат объем ОЗУ на
системной плате в блоках по 16К (например,
00=16К, 11=64К).
3.
Бит 2 не используется на PC, XT, AT и PC Convertible. На
XT-286 и
PS/2 он указывает на наличие
устройства графического
ввода (pointing device).
4. Бит 12 всегда установлен в 1 на
PCjr.
5.
Бит 13 указывает
наличие встроенного модема
на PC
Convertible, последовательного принтера на
PCjr и зарезервирован
на остальных ПЭВМ.
6. Если DIP-переключатели в PC и XT выставлены неверно, то
BIOS не определит наличие сопроцессора. Для
проверки того, имеет
ли ЭВМ сопроцессор, лучше всего выполнить его команду и проана-
- 47 -
лизировать результат.
7.
Для определения числа
жестких дисков используйте Int
13h, фн 08h.
См. также: Рабочая область данных
Int 13h, фн 08h
- 48 -
_E2.3. Int 12h - Размер
ОЗУ_F
Вход: нет
Выход: AX=размер ОЗУ в килобайтах
Описание: Возвращает в AX размер
оперативной памяти в Кб
(не
более 640), определенный
в процессе POST
анализом
DIP-переключателей на PC/XT или содержимого
CMOS на AT и PS/2.
Примечания.
1.
Это слово хранится
в области данных BIOS по адресу
00413h.
2. Для
определения размера расширенной
памяти используйте
Int 15h,
фн
88h. Для
определения размера дополнительной
памяти
используйте Int 67h, фн 42h.
См. также: Рабочая область данных
Int 15h, фн 88h
Int 67h, фн
42h
- 49 -
_E2.4. Int 13h - Управление дисками_F
Int
13h используется для работы с дисковыми устройствами
ПЭВМ.
Процедуры обработки данного
прерывания внутри BIOS
разделены
на 2 независимые
части, обрабатывающими запросы к
гибким и жестким дискам соответственно. При
чтении главы примите
к сведению следующую общую информацию:
-
обозначения ГД и ЖД
означают соответственно гибкие и
жесткие диски;
- код функции всегда заносится в регистр
AH;
-
для функций, требующих
в качестве параметра
номер
устройства, нумерация дисководов для гибких дисков начинается с
0, нумерация жестких дисков с 80h. Под
жесткими дисками здесь не
следует понимать логические диски C:,D: и E:,
созданные на одном
диске общей емкостью 80 Мбайт;
- номер цилиндра жесткого диска
кодируется в 10-битном виде
(в регистре CН
- младшая часть, в регистре CL -
2 старших бита
номера цилиндра в битах 6 и 7);
- результаты выполнения последней команды
контроллера после
вызова любой
функции данного прерывания,
обращающейся к диску,
вы
можете найти в буфере по адресу
0:442h. Длина буфера - 7
байт;
- коды возврата последней выполнявшейся
функции с дискетами
и с
жесткими дисками, возвращаемые
обычно в регистре
AH,
записываются так же в байты по адресу 0:441h
(ГД) и 0:474 (ЖД) и
могут быть после этого возвращены вызовом
функции 01h.
- стандартный BIOS XT выполняет только функции с 0 по 5 и
предназначен
для работы с накопителями на гибких
дисках. Для
обслуживания
запросов к жестким
дискам на плате контроллера
жестких дисков имеется расширенный BIOS (в дальнейшем именуемый
расширенный
BIOS XT), который
при выполнении процедуры
инициализации, вызываемой
в процессе сканирования ПЗУ,
переписывает
адрес стандартного обработчика
INT 13h по адресу
0:100h
и вызывает его при необходимости выполнения запроса к
НГМД командой INT 40h;
- расширенный BIOS XT выполняет функции с
0 по 14h. Функции
с большими номерами реализованы только на более поздних моделях
- AT, XT-286, PC Convertible и PS/2;
- в
случае, если описываемая функция
поддерживается не на
всех моделях
или существуют различия в вызове
и интерпретации
результатов, это оговаривается особо при
описании функции;
- при возникновении ошибки в результате
выполнения функции,
обращающейся
к накопителю на
гибком диске, рекомендуется
повторить
вызов функции до 4 раз с
предварительным сбросом
контроллера
перед каждым новым
обращением. Обращения следует
- 50 -
делать
подряд друг за
другом, не давая
возможности мотору
остановиться, так как причиной ошибки может быть то, что он еще
не набрал необходимую скорость;
-
при выполнении функций,
требующих обмена с
диском,
следует
разместить буфер для обмена
в памяти таким образом,
чтобы он
не пересекал границу 64-Кбайтной
страницы ПДП, иначе
попытка обмена будет безуспешной;
- для
AT, XT-286, PC Convertible и PS/2
перед выполнением
любой
операции с диском BIOS выполняет вызов INT 15h, фн 90h
("устройство занято") с типом устройства 00h для жестких дисков
и 01h
для дискет. После
завершения операции с
диском BIOS
выполняет
вызов INT 15h,
фн 91h -
"обработка прерывания
завершена". Если при обращении к дискете
требуется запуск мотора
на дисководе, BIOS вызывает INT 15h, фн 90h,
тип устройства 0FDh
- "запуск
мотора НГМД". Все
описанные действия позволяют
многозадачной операционной системе управлять
выполнением задач :
не давать возможности обратиться к устройству (если оно занято)
или переключиться на другую задачу на то время, пока двигатель
набирает необходимые обороты;
-
если ваш дисковод
для гибких дисков
поддерживает
несколько форматов дискет и контроллером поддерживается логика
Change
Line (смена дискеты),
позволяющая отследить открытие и
закрытие дверцы на дисководе, перед первым обращением к вновь
вставленной дискете следует вызвать функцию 32h
прерывания ДОС'а
INT
21h для правильного
определения типа дискеты.
Если же
дискета не отформатирована и вы собираетесь ее
форматировать, то
воспользуйтесь
функциями 17h и
18h, описанными ниже,
для
установки
правильных параметров дискеты
и дисковода. При
невыполнении этих рекомендаций BIOS будет пытаться обратиться к
вашей
дискете, считая по
умолчанию ее формат
максимально
допустимым для данного дисковода;
-
для определения конкретных
параметров накопителей BIOS
берет
информацию о них
из таблиц параметров.
На таблицу
параметров
гибкого диска указывает
вектор 1Eh, на
таблицу
параметров
первого жесткого диска
вектор 41h, на
таблицу
параметров
второго жесткого диска
вектор 46h. Формат таблиц
параметров
приведен в п.
3.4. Конкретное содержание таблиц
параметров
жестких дисков зависит
от типа диска.
Примеры
характеристик
дисков, записанных в
стандартных таблицах
расширенного
BIOS XT приведены
в книге "Архитектура
ввода-вывода", изданной в данной серии.
- 51 -
Допустимы следующие функции:
Функция
Назначение
────────────────────────────────────────────────────────────────
00h
Сброс устройства
01h
Получить код завершения последней выполнявшейся функции
02h
Чтение секторов
03h
Запись секторов
04h
Проверка секторов
05h
Форматирование форожки (цилиндра)
06h
Форматирование цилиндра с установкой флага
"Дефектный цилиндр"
07h
Форматирование диска, начиная с заданного цилиндра
08h
Получить параметры устройства
09h
Установка таблиц параметров диска в начальное состояние
0Ah
Чтение с контрольной суммой
0Bh
Запись с контрольной суммой
0Ch
Поиск цилиндра
0Dh
Альтернативный сброс жесткого диска
0Eh
Чтение внутреннего буфера контроллера
0Fh
Запись внутреннего буфера контроллера
10h
Проверка готовности устройства
11h
Рекалибровка жесткого диска
12h Диагностика внутреннего ОЗУ контроллера
13h
Диагностика накопителя
14h
Внутренняя диагностика контроллера
15h
Считать тип дисковода
16h
Считать состояние Change Line
17h
Установить тип диска для форматирования
18h
Установить тип накопителя для форматирования
19h
Парковка головок жесткого диска (PS/2)
1Ah
Форматирование устройства (PS/2)
──────────────────────────────────────────────────────────────
_E2.4.1. Фн 00h - Сброс устройства_F
Вход: AH = 00h
DL - номер устройства
Выход: CF=1 - ошибка, код ошибки в AH
(см. 2.4.2)
CF=0 - нормальное завершение
Описание: Если
DL меньше 80h,
производится сброс
контроллера
гибких дисков. Если
DL больше или
равен 80h,
производится
сброс контроллера гибких
дисков и затем сброс
контроллера жестких дисков. Код завершения, возвращаемый в AH в
этом случае,
является кодом завершения
операции с контроллером
жестких дисков. Для того, чтобы получить код
завершения операции
сброса контроллера НГМД, необходимо взять его
из байта по адресу
0:441h. Он же будет возвращен при выполнении
функции 01h.
Если
при обращении к диску BIOS обнаруживает исправимую
ошибку
(ошибка чтения, поиска
и т. п.), необходимо выполнить
функцию
00h и повторить
обращение к диску.
Обычно ошибка
считается неисправимой, если четыре подобных попытки окончились
- 52 -
безрезультатно.
Сброс
контроллера жестких дисков
осуществляется только в
случае, если в системе реально существует
устройство с указанным
номером.
_E2.4.2. Фн 01h - Получить код завершения
последней
выполнявшейся функции_F
Вход: AH = 01h
DL = 00h или 80h
Выход: AH - код завершения последнего
вызова INT 13h.
Описание:
Эта фн позволяет
узнать результат последней
операции с диском. Возможны следующие коды
завершения:
───────────────────────────────────────────────────────────
00h
Нет ошибки
01h
Неверная команда
02h
Адресный маркер не найден
03h
Попытка записи на защищенную дискету
04h
Сектор не найден
05h
Ошибка при сбросе контроллера ЖД
06h
Произошла смена дискеты в дисководе АТ ГД
07h
Ошибочный параметр устройства ЖД
08h
Переполнение ПДП
09h
Выход за 64-килобайтную страницу ПДП
0Ah
Обнаружен флаг дефектного сектора ЖД
0Bh
Обнаружен дефектный цилиндр ЖД
0Ch
Описатель параметров диска не найден ГД
0Dh
Ошибочное число секторов при форматировании ЖД
0Eh
Обнаружен управляющий адресный манкер данных ЖД
0Fh
Недопустимый уровень управления ПДП ЖД
10h
Ошибка контрольной суммы
11h
Данные скорректированы с помощью ЕСС-алгоритма ЖД
20h
Ошибка контроллера
40h
Ошибка поиска
80h
Устройство не готово
BBh
Неизвестная ошибка ЖД
CCh
Запись запрещена ЖД
E0h
Ошибка передачи состояния ЖД
FFh
Ошибка при определении конфигурации ЖД
───────────────────────────────────────────────────────────
Коды завершения извлекаются из байтов с
адресами 0:441h для
ГД и 0:474h для ЖД.
- 53 -
_E2.4.3. Фн 02h - Чтение секторов_F
Вход:
AH = 02h
AL - число секторов для чтения
СН и 2 старших бита CL - номер
цилиндра
CL - номер начального сектора
DH - номер головки
DL - номер устройства
ES:BX - адрес буфера для данных
Выход:
AH - код завершения операции
AL - число считанных секторов
CF=1 при ошибке
Описание: Функция
позволяет прочитать заданное
число
секторов с заданной позиции (цилиндр, головка,
сектор).
Данной
функцией могут быть
прочитаны только сектора,
находящиеся
на одном цилиндре
жесткого диска или на
одной
дорожке дискеты. За одно обращение можно прочитать не более 128
секторов с жесткого диска.
При
ошибке значение числа
прочитанных секторов,
возвращаемое в AL, может оказаться неверным.
Кодом
возврата 11h BIOS
сигнализирует, что данные были
скорректированы с
использованием
ЕСС-алгоритма. Считанная
информация при
этом вполне корректна и годна
к использованию.
Расширенный BIOS XT при обнаружении ошибки ЕСС
в процессе чтения
информации с жесткого диска пытается выполнить
тест устройства и
затем
считать данные с
помощью функции 0Ah,
если она
поддерживается
им. При успешном завершении подобной процедуры
так же
возвращается код возврата 11h и
считанные данные можно
считать корректными.
_E2.4.4. Фн 03h - Запись секторов_F
Вход:
AH = 03h
AL - число секторов для записи
СН и 2 старших бита CL - номер
цилиндра
CL - номер начального сектора
DH - номер головки
DL - номер устройства
ES:BX - адрес буфера с данными
Выход:
AH - код завершения операции
AL - число записанных секторов
CF=1 при ошибке
Описание: Функция
позволяет записать заданное
число
секторов с заданной позиции (цилиндр, головка,
сектор).
Данной
функцией могут быть
записаны только сектора,
находящиеся
на одном цилиндре
жесткого диска или на
одной
дорожке дискеты. За одно обращение можно записать не более 128
- 54 -
секторов с жесткого диска.
При ошибке значение числа записанных
секторов, возвращаемое
в AL, может оказаться неверным.
_E2.4.5. Фн 04h - Проверка секторов_F
Вход:
AH = 04h
AL - число секторов для проверки
СН и 2 старших бита CL - номер
цилиндра
CL - номер начального сектора
DH - номер головки
DL - номер устройства
Выход:
AH - код завершения операции
AL - число проверенных секторов
CF=1 при ошибке
Описание: Функция
позволяет проверить возможность
считывания заданного числа секторов с заданной
позиции (цилиндр,
головка, сектор) без передачи их содержимого в
память.
Данной
функцией могут быть
проверены только сектора,
находящиеся
на одном цилиндре
жесткого диска или на
одной
дорожке дискеты. За одно обращение можно проверить не более 255
секторов с жесткого диска.
При ошибке значение числа записанных
секторов, возвращаемое
в AL, может оказаться неверным.
_E2.4.6. Фн 05h - Форматирование дорожки
(цилиндра)_F
_EДискеты:_F
Вход:
AH = 05h
AL - число секторов на дорожке
CH и 2 старших бита CL - номер
цилиндра
DH - номер головки
DL - номер устройства
ES:BX - адрес буфера с
информацией для
форматирования
Выход:
AH - код завершения операции
CF=1 при ошибке
Описание:
Функция позволяет за
одно обращение к ней
отформатировать одну дорожку на дискете.
ES:BX указывает на буфер с информацией для форматирования.
Эта
информация записывается в
заголовки секторов на требуемой
дорожке без
проверки на допустимость. При
использовании данной
функции
необходимо следить за
корректностью этой информации,
иначе BIOS в дальнейшем не сможет обратиться к
секторам, имеющим
неверный формат заголовка. На каждый сектор в
буфере отводится 4
байта в следующем порядке:
- 55 -
C - номер цилиндра (с 0)
H - номер головки (с 0)
R - номер сектора (с 1)
N - размер сектора:
0 - 128 байт
1 - 256 байт
2 - 512 байт
3 - 1024 байта
и т. д.
Таким
образом буфер для
стандартной разметки дорожки 0
цилиндра 0 для работы в MS DOS должен занимать
в длину 36 байт и
содержать следующие данные:
0 0 1 2 ; заголовок сектора 1
0 0 2 2 ; 2
0 0 3 2 ; 3
0 0 4 2 ; 4
0 0 5 2 ;
5
0 0 6 2 ; 6
0 0 7 2 ; 7
0 0 8 2 ; 8
0 0 9 2 ; 9
Параметры команды контроллера при
выполнении данной функции
берутся из
таблицы параметров дискеты (на
нее указывает вектор
1Eh) и
при необходимости могут быть изменены
вручную. Однако
следует заметить, что невозможно с помощью этой функции создать
на
одной дорожке сектора
разного размера, так как физический
размер
сектора берется из
таблицы параметров дискеты
и
указывается контроллеру в команде форматирования один раз. Если
вы укажете в заголовке сектора в поле для
размера одному сектору
3 а
другому 5, то
на самом деле
их физическая длина будет
одинаковой, а в заголовке будет содержаться
неверная информация.
Если
ваш дисковод поддерживает
более одного типа дискет
(например
форматы 360 Кбайт
и 1.2 Мбайта
для 5-дюймовых
дисководов
на АТ), перед
форматированием необходимо
воспользоваться функциями 17h и 18h для
задания правильного типа
дискеты
и правильной таблицы
параметров дискеты, иначе ваша
дискета
будет отформатирована с
использованием таблицы
параметров, обеспечивающей максимальную
емкость носителя.
_EЖесткие диски:_F
Вход:
AH = 05h
CH и 2 старших бита CL - номер
цилиндра
DL - номер устройства
Кроме того на входе:
для ХТ:
AL=фактор чередования;
для
AT, XT-286 и
PS/2:
ES:BX
указывает на 512-байтный
буфер, первые 2*(число
секторов) байт
которого заняты под информацию о
секторах по 2
- 56 -
байта на каждый сектор. Первый байт = 0 -
нормальный сектор, 80h
- дефектный сектор. Второй байт задает номер
сектора (с 1).
Выход:
CF=1 - ошибка
AH - код завершения
Описание: Функция
позволяет отформатировать заданный
цилиндр жесткого диска.
Фактор
чередования (interleave factor)
задает расстояние
между
секторами с последовательными
номерами на дорожке. При
факторе
чередования, равном, например,
3, сектор с номером 2
будет
на дорожке не сразу следовать за
сектором с номером 1.
Между ними
будут находиться 2 сектора с
другими номерами и он
будет
третьим. Более подробно
о факторе чередования
можно
прочитать в книге "Архитектура
ввода-вывода", изданной в этой же
серии.
На AT и других ПЭВМ, не использующих
фактора чередования, а
использующих
в качестве параметра
буфер с информацией
для
заголовков
секторов, вы должны
самостоятельно проимитировать
какой-либо
фактор чередования, не
меньший, чем 3.
Наличие
большого
фактора чередования несколько
замедляет работу с
диском, однако фактор меньший, чем 3, резко
повышает вероятность
сбоев при выполнении операций обмена с диском.
Пример части буфера (для одной дорожки)
для диска, имеющего
17 секторов на дорожке и фактора чередования
3:
db 00h, 01h, 00h, 07h, 00h, 0Dh, 00h, 02h, 00h,
08h, 00h, 0Eh
db
00h, 03h, 00h, 09h, 00h, 0Fh, 00h, 04h, 00h, 0Ah, 00h, 10h
db
00h, 05h, 00h, 0Bh, 00h, 11h, 00h, 06h, 00h, 0Ch
_E2.4.7. Фн 06h - Форматирование
дорожки жесткого диска
с установкой флага "Дефектная
дорожка"_F
Вход:
AH = 06H
AL - фактор чередования
CH и 2 старших бита CL - номер
цилиндра
DH - номер головки
DL - номер устройства
Выход:
СF=1 - ошибка
AH - код завершения операции
Описание: Функция предназначена для форматирования дорожки
жесткого
диска на ХТ
с записью в заголовок каждого сектора
информации
о том, что этот сектор является дефектным. На AT,
XT-286, PC Convertible и PS/2 функция не
реализована.
- 57 -
_E2.4.8. Фн 07h - Форматирование жесткого
диска,
начиная с заданного цилиндра_F
Вход:
AH = 07h
AL - фактор чередования
СH и 2 старших бита CL - номер
цилиндра
DL - номер устройства
Выход:
СF=1 - ошибка
AH - код завершения операции
Описание: Функция предназначена для
форматирования жесткого
диска
с заданного цилиндра
и до конца.
Функция аналогична
многократному выполнению функции 05h.
Реализована только на ХТ.
_E2.4.9. Фн 08h - Получить параметры
устройства_F
Вход:
AH = 08h
DL - номер устройства
Выход:
CH и 2 старших бита CL - число цилиндров
CL - максимальное число секторов
на дорожке
DH - число головок
Дополнительно возвращается для жестких
дисков:
AH - код завершения операции
DL - число жестких дисков
CF=1 - ошибка
Для дискет:
AX=0
BL - биты с 3 по 0 - тип дискеты
в CMOS:
00h -
неопределенный тип устройства
01h - 360K, 5.25 дюйма,
40 дорожек
02h - 1.2M, 5.25 дюйма,
80 дорожек
03h - 720K, 3.5 дюйма,
80 дорожек
04h - 1.44М, 3.5 дюйма,
80 дорожек
BH = 0
DL - число дисководов
ES:DI - указатель на 11-байтную таблицу параметров
дискеты.
Описание: Функция
возвращает параметры дискового
устройства. Получить параметры жесткого диска
вы можете на любой
машине,
имеющей такой диск. Получить параметры дискеты можно
только
на PC Convertible, XT-286 и AT с
датой BIOS не ранее
1/10/84.
Причины ошибок при определении типа
жесткого диска:
- задан несуществующий номер устройства
(AH будет равно 7);
- отсутствуют жесткие диски или контроллер жестких дисков
(AH будет равно 1).
- 58 -
Причины ошибок при определении типа
дисковода для гибких
дисков:
- отсутствует CMOS;
- испорчен источник питания CMOS;
- неверная контрольная сумма CMOS.
Любая
из перечисленных причин
не будет влиять
на
возвращаемую информацию, за исключением того,
что BL будет равно
0.
Если
неизвестен тип дисковода
для гибких дисков
или
запрошенного
устройства не существует
все регистры не будут
содержать никакой полезной информации.
_E2.4.10. Фн 09h - Сброс жесткого диска в
соответствии
с таблицей параметров_F
Вход:
AH = 09h
DL - номер устройства
Выход:
CF=1 - ошибка
AH - код завершения операции
Описание:
Результатом выполнения данной
функции является
сброс
(инициализация) жесткого диска
в соответствии с
параметрами из
таблицы параметров диска. На
таблицу параметров
первого
диска указывает обычно
вектор INT 41h , на таблицу
параметров второго диска - INT 46h.
На
XT независимо от
того, какой номер
устройства из
допустимых
(80h-87h) задан инициализируются все существующие
устройства до тех пор, пока не будет
обнаружена ошибка.
На
AT при выполнении
функции производится инициализация
только указанного устройства.
_E2.4.11. Фн 0Ah - Чтение с контрольной
суммой_F
Вход:
AH = 0Ah
AL - число секторов для чтения
СН и 2 старших бита CL - номер
цилиндра
CL - номер начального сектора
DH - номер головки
DL - номер устройства
ES:BX - адрес буфера для данных
Выход:
AH - код завершения операции
AL - число считанных секторов
CF=1 при ошибке
Описание: Функция позволяет прочитать 512 байт информации
указанного
сектора жесткого диска и 4
байта его контрольной
суммы (ECC). Функция не поддерживается рядом BIOS'ов как на XT,
так и
на AT, в
основном изготовленных без
лицензии в странах
- 59 -
Азии и Африки.
Данной
функцией могут быть
прочитаны только сектора,
находящиеся на одном цилиндре жесткого диска. За одно обращение
можно прочитать не более 127 секторов.
При
ошибке значение числа
прочитанных секторов,
возвращаемое в AL, может оказаться неверным.
Расширенный BIOS
XT фирмы Seagate
игнорирует параметр
"число секторов", считая его всегда
равным 1.
Кодом
возврата 11h BIOS
сигнализирует, что данные были
скорректированы с
использованием
ЕСС-алгоритма. Считанная
информация при
этом вполне корректна и годна
к использованию.
Расширенный BIOS XT при обнаружении ошибки ЕСС
в процессе чтения
информации с жесткого диска пытается выполнить
тест устройства и
затем
повторно считать данные
с помощью функции
0Ah. При
успешном завершении подобной процедуры так же возвращается код
возврата 11h и считанные данные можно считать
корректными.
_E2.4.12. Фн 0Вh - Запись с контрольной
суммой_F
Вход:
AH = 0Вh
AL - число секторов для записи
СН и 2 старших бита CL - номер
цилиндра
CL - номер начального сектора
DH - номер головки
DL - номер устройства
ES:BX - адрес буфера с данными
Выход:
AH - код завершения операции
AL - число записанных секторов
CF=1 при ошибке
Описание:
Функция позволяет записать
512 байт информации
указанного
сектора жесткого диска и 4
байта его контрольной
суммы (ECC).
Функция не поддерживается рядом
BIOS'ов как на XT
так и
на AT, в
основном изготовленных без
лицензии в странах
Азии и Африки.
Данной
функцией могут быть записаны только
сектора,
находящиеся на одном цилиндре жесткого диска. За одно обращение
можно записать не более 127 секторов с
жесткого диска.
Расширенный BIOS
XT фирмы Seagate
игнорирует параметр
"число секторов", считая его всегда
равным 1.
При ошибке значение числа записанных
секторов, возвращаемое
в AL, может оказаться неверным.
- 60 -
_E2.4.13. Фн 0Ch - Поиск цилиндра_F
Вход:
AH = 0Ch
CH и 2 старших бита CL - номер
цилиндра
DL - номер устройства
DH - номер головки
Выход:
CF=1 - ошибка
AH - код завершения операции
Описание: С
помощью данной функции
выполняется
позиционирование головок жесткого диска на
заданный цилиндр.
Несмотря на то, что номер
головки не используется при
поиске,
следует указывать номер
существующей головки, иначе
поиск
не будет производиться
и вам вернется код ошибочного
завершения.
_E2.4.14. Фн 0Dh - Альтернативный сброс
жесткого диска_F
Вход:
AH = 0Dh
DL - номер устройства
Выход:
CF=1 - ошибка
AH - код завершения операции
Описание: С помощью данной функции можно осуществить сброс
контроллера
и накопителей на
жестких дисках и рекалибровать
головки чтения/записи.
Никакие
операции с контроллером и накопителями не будут
выполняться
в случае, если
указан несуществующий номер
устройства
(больший, чем максимальный
из существующий в
конфигурации вашей ПЭВМ).
_E2.4.15. Фн 0Eh - Чтение внутреннего
буфера_F
Вход:
AH = 0Eh
AL - число секторов для чтения
СН и 2 старших бита CL - номер
цилиндра
CL - номер начального сектора
DH - номер головки
DL - номер устройства
ES:BX - адрес буфера для данных
Выход:
AH - код завершения операции
AL - число считанных секторов
CF=1 при ошибке
Описание: Функция
позволяет прочитать содержимое
внутреннего
буфера контроллера, используемого в
качестве
промежуточной области данных между ОЗУ и накопителем. В буфере
обычно
хранится содержимое последнего
сектора, с которым
производился обмен. Размер буфера 512 байт.
- 61 -
Несмотря
на то, что при выполнении операции используются
только
номер устройства и
адрес буфера данных,
остальные
параметры
должны быть корректны, так
как проверяются на
допустимость:
- AL не должен быть больше 128;
- цилиндр, начальный сектор и головка
должны существовать.
Функция
предназначена исключительно для
тестирования
контроллера и вряд ли может быть применена в
других целях.
_E2.4.16. Фн 0Fh - Запись внутреннего
буфера_F
Вход:
AH = 0Fh
AL - число секторов для записи
СН и 2 старших бита CL - номер
цилиндра
CL - номер начального сектора
DH - номер головки
DL - номер устройства
ES:BX - адрес буфера с данными
Выход:
AH - код завершения операции
AL - число записанных секторов
CF=1 при ошибке
Описание: Функция позволяет записать
содержимое внутреннего
буфера
контроллера, используемого в
качестве промежуточной
области данных между ОЗУ и накопителем.
Несмотря
на то, что при выполнении операции используются
только
номер устройства и
адрес буфера данных, остальные
параметры
должны быть корректны,
так как проверяются
на
допустимость:
- AL не должен быть больше 128;
- цилиндр, начальный сектор и головка
должны существовать.
Функция
предназначена исключительно для
тестирования
контроллера и вряд ли может быть применена в
других целях.
@2.4.17. Фн 10h - Проверка готовности
устройства_F
Вход:
AH = 10h
DL - номер устройства
Выход:
CF=1 - ошибка
AH - код завершения операции
Описание: Функция позволяет проверить
готовность накопителя
на жестком диске к работе.
Если
после завершения операции
CF=0, значит жесткий диск
готов к
работе, если CF=1 - значит в AH
находится код ошибки,
определяющий причину неготовности.
- 62 -
_E2.4.18. Фн 11h - Рекалибровка жесткого
диска_F
Вход:
AH = 11h
DL - номер устройства
Выход:
CF=1 - ошибка
AH - код завершения операции
Описание: Функция
устанавливает головки чтения/записи
указанного в команде жесткого диска на дорожку
0.
Данная функция вызывается при выполнении функций 00h и 0Dh
при
выполнении сброса жесткого
диска и издает
команду
контроллера "рекалибровать" для установки головок чтения/записи
на нулевую дорожку диска.
_E2.4.19. Фн 12h - Диагностика
внутреннего ОЗУ
контроллера_F
Вход:
AH = 12h
Выход:
CF=1 - ошибка
AH - код завершения операции.
Описание: Функция
предназначена для тестирования
внутреннего
ОЗУ контроллера накопителей
на жестких дисках.
Функция
вызывается при выполнении
процедуры инициализации,
вызываемой
на XT сканированием
ПЗУ, а на
AT - тестом
,
выполняемым при загрузке (POST).
_E2.4.20. Фн 13h - Диагностика
накопителя_F
Вход:
AH = 13h
DL - номер устройства
Выход:
CF=1 - ошибка
AH - код завершения операции
Описание:
С помощью данной
функции при тестировании
накопителя
проверяется его работоспособность и
возможность
выполнения команд чтения и поиска.
Функция
выполняется при тестировании
накопителя при
начальной
загрузке и в
случае обнаружения секторов
с
некорректной
контрольной суммой, записанных
с помощью функции
0Bh.
_E2.4.21. Фн 14h - Внутренняя диагностика
контроллера_F
Вход:
AH = 14h
Выход:
CF=1 - ошибка
AH - код завершения операции
Описание:
Функция проверяет функционирование составных
- 63 -
частей контроллера: микропроцессора, ОЗУ, ПЗУ и схем коррекции
ошибок.
_E2.4.22. Фн 15h - Считать тип
дисковода_F
Вход:
AH = 15h
DL - номер устройства
Выход:
CF=1 - ошибка
AH - тип диска:
00 - не подключен
01 - гибкий диск, логика
Change Line не
подключена
02 - гибкий диск, логика Change Line
подключена
03 - жесткий диск
Описание:
Функция возвращает тип
накопителя (жесткий или
гибкий диск),
наличие логики контроля за сменой
гибких дисков
(Change
Line) и число секторов
на запрошенном накопителе на
жестком диске.
Для
жестких дисков в
CX:DX (CX -
старшая часть)
возвращается
число секторов на диске
в виде длинного целого
числа.
Для установки типа диска вы можете
воспользоваться функцией
17h.
Код
завершения операции (при
CF=1) вы можете получить,
используя функцию 01h.
_E2.4.23. Фн 16h - Считать состояние
Change Line_F
Вход:
AH = 16h
DL - номер устройства
Выход:
CF=1 - ошибка
AH - код состояния:
00 - дискета не менялась
01 - неверный номер
устройства
06 - дверца дисковода
открывалась
80h- устройство не готово
Описание:
Функция позволяет определить,
открывалась ли
дверца дисковода после последнего обращения к дискете. Функция
поддерживается только в случае, если ваш
контроллер имеет логику
Change Line (это можно определить, используя
функцию 15h).
CF будет
равен 1 при любом AH не
равном 0, т. е. и при
AH=6,
означающем, что после
последнего обращения к дисководу
открывалась дверца и дискету могли сменить.
Эта
функция вызывается BIOS
перед каждым обращением к
гибкому диску для того, чтобы правильно определить мометн смены
- 64 -
диска и переустановить таблицу параметров
дискеты.
_E2.4.24. Фн 17h - установить тип диска
для
форматирования_F
Вход:
AH = 17h
AL = 1 - дискета 320/360К в
дисководе 360К
2 - дискета 360К в дисководе
1.2М
3 - дискета 1.2М в дисководе
1.2М
4 - дискета 720К в дисководе
720К
DL - номер устройства
Выход:
CF=1 - ошибка
AH - код завершения операции
Описание: Функция позволяет явно установить тип дискеты и
дисковода. Функцию необходимо выполнять каждый раз после смены
дискеты,
если ваш дисковод
поддерживает несколько форматов
дискет. Функцию особенно выжно выполнять перед форматированием
дискеты, так как результатами ее работы пользуется функция 05h,
выполняющая форматирование накопителей.
Значение
4 в AL
обрабатывается только BIOS'ом с датой
создания 6/10/85 и позже.
_E2.4.25. Фн 18h - установить тип
накопителя для
форматирования_F
Вход:
AH = 18h
CH и 2 старших бита CL - число
дорожек
CL - число секторов на дорожке
DL - номер устройства
Выход:
CF=1 - ошибка
AH - код завершения операции
ES:DI - указатель на 11-байтную
таблицу
параметров дискеты (если
нет ошибки).
Описание:
Функция возвращает адрес
таблицы параметров
дискеты
для заданного типа
накопителя, если поддержка такого
накопителя предусмотрена в BIOS и таблица
имеется в нем. Функция
неприменима для жестких дисков.
Функция
поддерживается BIOS с
датой создания не раньше
11/15/85.
Для каждого поддерживаемого типа накопителя в BIOS имеется
отдельная таблица параметров дискеты.
Если эта функция поддерживается BIOS, она
вызывается каждый
раз при выполнении функции 05h.
- 65 -
_E2.4.26. Фн 19h - Парковка головок
жесткого диска (PS/2)_F
Вход:
AH = 19h
DL - номер устройства
Выход:
CF=1 - ошибка
AH - код завершения операции
Описание:
Эта функция поддерживается только
на PS/2 и
предназначена для парковки головок жесткого диска в безопасное
положение.
_E2.4.27. Фн 1Ah - Форматирование
устройства (PS/2)_F
Вход:
AH = 1Ah
DL - номер устройства
AL = флаг таблицы дефектных
блоков (ТДБ):
0 - не таблицы ТДБ;
>0 - есть таблица ТДБ
ES:BX = адрес таблицы ТДБ
CL = байт модификаторов (см.
ниже)
Выход:
CF=1 - ошибка
AH - код завершения операции
Описание: Эта функция поддерживается только адаптером IBM
ESDI
Adapter/A на PS/2
и предназначена для
форматирования
заданного жесткого диска.
Примечания:
1. Форматирование безвозвратно разрушает всю информацию на
диске.
2. Процесс форматирования диска может
длиться более часа.
3. Байт модификаторов имеет следующий
формат:
7 6 5 4
3 2 1 0
┌─┬─┬─┬──┬──┬──┬──┬──┐
│0 0 0│ │
│ │ │
│ Биты:
└─┴─┴─┴┬─┴┬─┴┬─┴┬─┴┬─┘
────
│
│ │ │
└──>0: 1=игнорировать первичную карту дефектов
│
│ │ └─────>1:
1=игнорировать вторичную карту дефектов
│
│ └────────>2:
1=обновить вторичную карту дефектов
│
└───────────>3:
1=провести детальный анализ поверхности
└──────────────>4:
1=периодическое прерывание
Если бит
4 установлен, контроллер ЖМД
вызывает прерывание
после завершения операции с каждым цилиндром.
Точнее, вызывается
Int 15h, фн 0Fh с кодом фазы в AL, заданным
следующим образом:
0 - зарезервировано;
1 - анализ поверхности;
2 - форматирование.
- 66 -
Обработчик этого
прерывания должен сбросить
бит CF для
продолжения
операции или установить его для завершения работы
фн.
Установка
бита 3 вызывает
детальный анализ поверхности
жесткого диска. Перед форматированием с этой опцией диск должен
быть отформатирован без нее.
- 67 -
_E2.5. Int 14h - Управление стыком
RS-232C_F
Для
управления последовательным интерфейсом
(стыком
RS-232C) имеются следующие функции:
Функция
Назначение
─────────────────────────────────────────────────────────────
00h
Инициализация порта
01h
Вывод одного символа в порт
02h
Ввод одного символа из порта
03h
Опрос состояния порта
04h
Расширенная инициализация порта
(PS/2)
05h
Расширенное управление портом
(PS/2)
─────────────────────────────────────────────────────────────
Примечания.
1. Фн 01h - 03h поддерживаются BIOS всех
ПЭВМ, фн 04h и 05h
- только ПЭВМ семейства PS/2.
2. Номер стыка в описанных ниже функциях задается так: 0 -
COM1, 1 - COM2 и т. д. При этом в PS/2 он
может варьироваться от
0 до 3,
в остальных ПЭВМ - от 0 до
1. Базовый адрес порта для
стыка извлекается из области данных по адресу
00400h.
См. также: Область данных BIOS
_E2.5.1. Фн 00h - Инициализация порта_F
Вход: AH = 00h
AL = параметры инициализации (см.
ниже)
DX = номер стыка (0 - COM1, 1 - COM2 и т. д.)
Выход: AH = состояние линии (см. фн 03h)
AL = состояние модема (см. фн 03h)
Описание:
Инициализирует заданный стык
RS-232 в соответ-
ствии с параметрами, которые задаются в AL
следующим образом:
7
6 5 4
3 2 1 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│
│ │ │
│ Бит:
└──┴┬─┴──┴──┼──┴┬─┴──┼──┘
────
│ │
│ └───>
0-1: количество битов данных:
│ │
│ 10=7 бит,
11=8 бит
│ │
└────────>
2: количество стоп-битов:
│ │ 0=1 бит, 1=2 бита
│ └────────────>
3-4: тип четности:
│ x0=нет, 01=нечетная,
11=четная
└────────────────────>
5-7: скорость обмена, бод:
000=110;
100=1200
001=150;
101=2400
010=300;
110=4800
011=600;
111=9600
- 68 -
Примечание. Для задания скоростей обмена более 9600 бод на
PS/2 см. фн 04h и 05h.
См. также: Int 14h, фн 03h
Int 14h, фн 04h
Int 14h, фн
05h
_E2.5.2. Фн 01h - Вывод одного
символа в порт_F
Вход: AH = 01h
AL = выводимый символ
DX = номер стыка (0 - COM1, 1 -
COM2 и т. д.)
Выход: AH = состояние линии (см. фн 03h)
Описание: Посылает символ AL в заданный порт и возвращает
состояние линии в AH (AL не изменяется). Если произошла ошибка,
то
устанавливается бит 7 в AH. Тем
самым по содержимому AH
невозможно
проверить наличие ошибки
таймаута. Для точного
определения неисправности следует вызвать фн
03h.
См. также: Int 14h, фн 03h
_E2.5.3. Фн 02h - Ввод одного символа из
порта_F
Вход: AH = 02h
DX = номер стыка (0 - COM1, 1 -
COM2 и т. д.)
Выход: AH = состояние линии (см. фн 03h)
AL = введенный символ
Описание: Ожидает поступления символа из
линии и возвращает
его в
AL; состояние линии возвращается в AH. Если
произошла
ошибка, то устанавливается бит 7 в AH. Тем самым по содержимому
AH
невозможно проверить наличие
ошибки таймаута. Для точного
определения неисправности следует вызвать фн
03h.
См. также: Int 14h, фн 03h
_E2.5.4. Фн 03h - Опрос состояния порта_F
Вход: AH = 03h
DX = номер стыка (0 - COM1, 1 -
COM2 и т. д.)
Выход: AH = состояние линии
AL = состояние модема
Описание: Возвращает состояние линии и состояние модема в
следующем формате.
- 69 -
AH (состояние линии):
7
6 5 4
3 2 1 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│
│ │ │
│ │ │
│ │ Бит:
└┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┘
───
│
│ │ │
│ │ │
└─> 0:1=данные приняты в регистр приемника
│
│ │ │
│ │ └────>
1:1=предыдущий символ потерян
│
│ │ │
│ └───────>
2:1=ошибка четности
│
│ │ │
└──────────>
3:1=неверный стоп-бит
│
│ │ └─────────────>
4:1=обнаружен обрыв линии
│
│ └────────────────>
5:1=сдвиговый регистр передатчика пуст
│
└───────────────────>
6:1=регистр передатчика пуст
└──────────────────────>
7:1=ошибка таймаута
AL (состояние модема):
7
6 5 4
3 2 1 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│
│ │ │
│ │ │
│ │ Бит:
└┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴┬─┘
───
│
│ │ │
│ │ │
│
│
│ │ │
│ │ │
└──> 0:1=изменилось состояние линии CTS
│
│ │ │
│ │ └─────>
1:1=изменилось состояние линии DSR
│
│ │ │
│ └────────>
2:1=изменилось состояние линии RI
│
│ │ │
└───────────>
3:1=изменилось состояние линии DCD
│
│ │ └──────────────>
4: состояние линии CTS
│
│ └─────────────────>
5: состояние линии DSR
│
└────────────────────>
6: состояние линии RI
└───────────────────────>
7: состояние линии DCD
Примечания:
1.
"Изменилось состояние линии..." означает, что данная
линия
стыка RS-232 изменила
свое состояние по
сравнению с
последним чтением регистра состояния модема контроллера
RS-232.
2. Если
произошла ошибка таймаута
(установлен старший бит
AH), то остальные биты AX неопределены.
3. В
ранних версиях BIOS первых PC
имелась ошибка, из-за
которой ошибка таймаута могла возвращаться как
ошибки "сдвиговый
регистр передатчика пуст" и
"обнаружен обрыв линии".
- 70 -
_E2.5.5. Фн 04h - Расширенная
инициализация порта (PS/2)_F
Вход: AH = 04h
AL = обрыв линии:
0 - нормальная работа
1 - имитировать обрыв линии
BH = тип четности:
0 - без четности
1 - нечетная
2 - четная
3 - задать постоянную четность
нечетной
4 - задать постоянную четность
четной
BL = количество стоп-битов:
0 - 1 стоп-бит
1 - 1.5, если 5 битов данных,
2 в остальных случаях
CH = количество битов данных:
0 - 5 битов
1 - 6 битов
2 - 7 битов
3 - 8 битов
CL = скорость обмена в бодах:
0 - 110 бод
1 - 150 бод
2 - 300 бод
3 - 600 бод
4 - 1200 бод
5 - 2400 бод
6 - 4800 бод
7 - 9600 бод
8 - 19200 бод
DX = номер стыка (0 - COM1, 1 -
COM2 и т. д.)
Выход: AH = состояние линии (см. фн 03h)
AL = состояние модема (см. фн 03h)
Описание: Эта фн имеется только в PS/2. Она инициализирует
заданный стык RS-232 в соответствии с
заданными параметрами.
См. также: Int 14h, фн 03h
Int 14h, фн 00h
- 71 -
_E2.5.6. Фн 05h - Расширенное управление
портом (PS/2)_F
Вход: AH = 05h
AL = номер подфн:
00h - читать регистр
управления модемом
01h - задать регистр
управления модемом
BL = новое содержимое регистра
управления модемом
(для подфн 01h)
DX = номер стыка (0 - COM1, 1 -
COM2 и т. д.)
Выход: AH = состояние линии (см. фн 03h)
AL = состояние модема (см. фн 03h)
BL = содержимое регистра
управления модемом
(для подфн 00h)
Описание:
Эта фн поддерживается только
в PS/2. Она
позволяет прочитать (подфн 00h) или задать (подфн 01h) регистр
управления модемом данного стыка, имеющий
следующий формат:
7
6 5 4
3 2 1 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│0 │0 │0 │ │
│ │ │
│ Бит:
└──┴──┴──┴┬─┴┬─┴┬─┴┬─┴┬─┘
───
│ │
│ │ │
│ │
│ │ └──> 0: 1=активизировать
DTR
│ │
│ └─────>
1: 1=активизировать RTS
│ │
└────────> 2:
1=активизировать OUT1 (зарезерви-
│ │ рованный выход, не
используется)
│ └───────────>
3: 1=активизировать OUT2 (если нужны
│ прерывания от модема)
└──────────────>
4: 1=диагностический режим (посылка
выхода на вход
стыка)
См. также: Int 14h, фн 03h
- 72 -
_E2.6. Int 15h - Системные
утилиты_F
Это
прерывание объединяет большую
группу функций, не
связанных с каким-либо конкретным внешним
устройством, а именно:
Функция
Назначение
──────────────────────────────────────────────────────────────
00h
Включить мотор кассетного магнитофона (PC, PCjr)
01h
Выключить мотор кассетного магнитофона (PC, PCjr)
02h
Чтение с кассетного магнитофона (PC, PCjr)
03h
Запись на кассетный магнитофон (PC, PCjr)
0Fh
Ловушка форматирования дисков (PS/2)
21h
Регистрация ошибок POST (PS/2)
40h
Операции с профилем системы
(Convertible)
41h
Ожидание внешнего события
(Convertible)
42h
Отключение ПЭВМ (Convertible)
43h
Чтение состояния системы
(Convertible)
44h
Управление встроенным модемом
(Convertible)
4Fh
Ловушка клавиатуры (многие)
80h
Открыть устройство (многие)
81h
Закрыть устройство (многие)
82h
Освободить устройство (многие)
83h
Ожидание события (многие)
84h
Работа с джойстиком (многие)
85h
Обработка SysReq (многие)
86h
Задержка
(AT, XT-286, PS/2)
87h
Обмен с расширенной памятью
(AT, XT-286, PS/2)
88h Получить размер расширенной памяти (AT,
XT-286, PS/2)
89h
Переключение в защищенный режим
(AT, XT-286, PS/2)
90h
Устройство занято (многие)
91h
Прерывание завершено (многие)
C0h
Получить конфигурацию системы (многие)
C1h
Взять адрес дополнительной области данных BIOS (PS/2)
C2h
Управление мышью (PS/2)
C3h
Управление сторожем (PS/2)
C4h
Выбор программируемых опций (PS/2)
──────────────────────────────────────────────────────────────
Фн 01h - 04h предназначены для работы с кассетным магнито-
фоном,
которым комплектовались первые
PC и PCjr и
сегодня
представляют
чисто исторический интерес.
Фн 0Fh - это
специфическая функция,
которая поддерживается только
контроллером
жестких дисков IBM ESDI Adapter/A. Фн
40h - 44h
поддерживаются только в PC Convertible. Фн 86h
- 89h реализованы
в ПЭВМ на базе
процессоров 80286 и 80386, фн 21h
и C1h - C4h -
только в PS/2. Остальные функции реализованы
на многих ПЭВМ, как
описано ниже.
- 73 -
_E2.6.1. Фн 00h - Включить мотор
кассетного магнитофона
(PC,
PCjr)_F
Вход: AH = 00h
Выход: на PC и PCjr:
AH = 00h
CF
= 0
на остальных ПЭВМ:
AH = 86h
CF
= 1
Описание: На PC и PCjr включает мотор кассетного магнито-
фона. На остальных
ПЭВМ не выполняет
никаких действий и
возвращает установленный флаг CF.
Примечание: Кассетный магнитофон использует канал 2 сис-
темного таймера 8253.
_E2.6.2. Фн 01h - Выключить мотор
кассетного магнитофона
(PC, PCjr)_F
Вход: AH = 01h
Выход: на PC и PCjr:
AH = 00h
CF
= 0
на остальных ПЭВМ:
AH = 86h
CF
= 1
Описание: На PC и PCjr выключает мотор кассетного магнито-
фона.
На остальных ПЭВМ
не выполняет никаких
действий и
возвращает установленный флаг CF.
Примечание: Кассетный магнитофон использует канал 2 сис-
темного таймера 8253.
- 74 -
_E2.6.3. Фн 02h - Чтение с кассетного
магнитофона
(PC,
PCjr)_F
Вход: AH = 02h
ES:BX = адрес буфера
DX = количество считываемых байтов
Выход: на PC и PCjr:
ES:BX указывает на последний
считанный байт + 1
DX = число фактически прочитанных байтов
CF = 0 - удачное завершение
1 - ошибка чтения
на PCjr при CF = 1
AH = код ошибки:
0 - ошибка контрольной суммы
2 - потеря данных
4 - нет данных на ленте
на остальных ПЭВМ:
AH = 86h
CF
= 1
Описание: На PC и PCjr считывает блок данных с кассетного
магнитофона
в заданный буфер
и устанавливает флаг
CF в
зависимости от
результата операции; при ошибке
PCjr возвращает
код ошибки.
На остальных ПЭВМ не выполняет
никаких действий и
возвращает установленный флаг CF.
Примечания:
1.
Кассетный магнитофон использует
канал 2 системного
таймера 8253.
2.
При обмене с
магнитофоном прерывания от
таймера
запрещены,
поэтому счетчик таймера
в области BIOS
будет
содержать неверные результаты.
- 75 -
_E2.6.4. Фн 03h - Запись на кассетный
магнитофон
(PC,
PCjr)_F
Вход: AH = 03h
ES:BX = адрес буфера
DX = количество записываемых байтов
Выход: на PC и PCjr:
ES:BX указывает на последний
записанный байт + 1
DX = число фактически записанных байтов
CF = 0 - удачное завершение
1 - ошибка записи
на PCjr при CF = 1
AH = код ошибки:
0 - ошибка контрольной суммы
2 - потеря данных
4 - нет данных на ленте
на остальных ПЭВМ:
AH = 86h
CF
= 1
Описание: На PC и PCjr записывает блок данных из заданного
буфера
на кассетный магнитофон
и устанавливает флаг CF в
зависимости от
результата операции; при ошибке
PCjr возвращает
код ошибки.
На остальных ПЭВМ не выполняет
никаких действий и
возвращает установленный флаг CF.
Примечания:
1.
Кассетный магнитофон использует
канал 2 системного
таймера 8253.
2.
При обмене с
магнитофоном прерывания от
таймера
запрещены,
поэтому счетчик таймера
в области BIOS
будет
содержать неверные результаты.
_E2.6.5. Фн 0Fh - Ловушка форматирования
дисков_F
Вход: AH = 0Fh
AL = код фазы форматирования:
1 - анализ поверхности диска
2 - форматирование
Выход: CF = 0 - продолжать операцию
1 - завершить операцию
на PC и PCjr:
AH = 80h
CF
= 1
на остальных ПЭВМ:
AH = 86h
CF
= 1
- 76 -
Описание: Эта фн поддерживается только адаптером жесткого
диска IBM ESDI Adapter/A. Она вызывается функцией
форматирования
диска
по завершении форматирования или
сканирования каждого
цилиндра
и позволяет пользовательской
программе, перехватившей
эту функцию, решить, продолжать или завершить текущую операцию.
Стандартный обработчик этой функции возвращает
CF=1.
_E2.6.6. Фн 21h - Регистрация ошибок POST
(PS/2)_F
Вход: AH = 21h
AL = номер подфн:
0 - читать блок регистрации
ошибок POST
1 - зарегистрировать ошибку
POST
Выход: на PS/2, кроме модели 30:
зависит от подфн
на PC и PCjr:
AH = 80h
CF
= 1
на остальных ПЭВМ:
AH = 86h
CF
= 1
Описание: Эта фн реализована только в PS/2, кроме
модели
30. Она имеет две подфункции:
Подфн 00h: Читать блок регистрации ошибок
POST
──────────────────────────────────────────────
Вход: нет
Выход: AH = 0
CF = 0
ES:DI = адрес блока регистрации
ошибок
BX = количество ошибок в блоке
Описание: Возвращает адрес блока,
содержащего информацию об
ошибках, зарегистрированных в процессе POST. Блок состоит из BX
слов формата (код ошибки, код устройства).
Подфн 01h: Зарегистрировать ошибку POST
───────────────────────────────────────
Вход: BH = код устройства
BL = код ошибки
Выход: CF = 0 - успешное завершение
1 - блок регистрации полон
AH = 0 - успешное завершение
1 - блок регистрации полон
Описание: Заносит в блок регистрации ошибок информацию об
ошибке устройства.
- 77 -
См. также: Описание POST
_E2.6.7. Фн 40h - Операции с профилем
системы
(Convertible)_F
Вход: AH = 40h
AL = номер подфн:
0 - Чтение профиля системы
1 - Модификация профиля
системы
2 - Чтение профиля встроенного
модема
3 - Модификация профиля
встроенного модема
Выход: на PC
Convertible:
CF = 0 - успешное завершение
1 - ошибка
AL = 00h - успешное завершение
80h - ошибка
прочие - зависят от подфн
на PC и PCjr:
AH = 80h
CF
= 1
на остальных ПЭВМ:
AH = 86h
CF
= 1
Описание: Эта фн
реализована только в PC
Convertible и
состоит
из четырех подфункций.
Она позволяет считывать
и
задавать
профили системы и
модема, которые имеют следующую
структуру
(в качестве содержимого
байтов приведены значения
профилей при потере питания).
- 78 -
Первое слово профиля системы:
7
6 5 4
3 2 1 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│X
X X X
X X X X │ Зарезервировано
└──┴──┴──┴──┴──┴──┴──┴──┘
1
1 1 1
1 1
5
4 3 2
1 0 9 8
┌──┬──┬──┬──┬──┬──┬──┬──┐
│1 │1 │1 0 │0
0 │0 │0 │ Биты:
└┬─┴┬─┴──┼──┴──┼──┴┬─┴┬─┘
────
│
│ │ │
│ └─> 8:
1=последовательно-параллельный порт
│
│ │ │
│ доступен по
включению ПЭВМ
│
│ │ │
└────> 9: 1=встроенный модем доступен
по
│
│ │ │ включению ПЭВМ
│
│ │ └────────>
10-11: назначение атрибута яркости:
│
│ │ 00=игнорировать
│
│ │ 01=подчеркивание
│
│ │ 10=негативное
изображение
│
│ │ 11=альтернативный шрифт
│
│ └──────────────>
12-13: начальный видеорежим:
│
│
00=зарезервировано
│
│
01=40х25, CGA/LCD
│
│
10=80х25, CGA/LCD
│
│
11=80x25, монохромный LCD
│
└───────────────────>
14: 1=вывод предупреждения о
│ о
"севшей" батарее
└──────────────────────>
15: режим рестарта системы:
0=холодный,
1=горячий
Второе слово профиля системы:
1
5 . .
. 8 7
. . . 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│
. . . │ . . .
│ Биты:
└──┴──┼──┴──┴──┴──┼──┴──┘
─────
│ └──────>
0-7: время, через которое экран будет
│ очищен, если нет
нажатий клавиш,
│ в минутах (0=не
очищать экран)
└──────────────────>8-15:
время, через которое ПЭВМ выклю-
чится, если
нет нажатий клавиш,
в минутах
(0=не выключать ПЭВМ)
- 79 -
Профиль модема:
7
6 5 4
3 2 1 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│X
X X X
X X X X │ Зарезервировано
└──┴──┴──┴──┴──┴──┴──┴──┘
1
1 1 1
1 1
5
4 3 2
1 0 9 8
┌──┬──┬──┬──┬──┬──┬──┬──┐
│X
X │0 │0 1 1 │1
0 │ Биты:
└──┴──┴┬─┴──┴┬─┴──┴──┼──┘
────
│ │ └──> 8-9: скорость обмена, бод:
│ │ 00=110, 01=300, 10=1200,
11=2400
│ └──────────>10-12:
четность и число битов данных:
│ 000=установлена, 7 бит
│ 001=сброшена, 7 бит
│ 010=нечетная, 7 бит
│ 011=четная, 7 бит
│ 100=без четности, 7 бит
│ 101-111=зарезервировано
└────────────────> 13: 0=ручной ответ, 1=автоответ
Подфн 00h: Чтение профиля системы
─────────────────────────────────
Вход: нет
Выход: BX = первое слово профиля системы
CX = второе слово профиля системы
Описание: Возвращает текущий профиль
системы.
Подфн 01h: Модификация профиля системы
──────────────────────────────────────
Вход: BX = первое слово профиля системы
CX = второе слово профиля системы
Выход: нет
Описание: Задает новый профиль системы.
Подфн 02h: Чтение профиля встроенного
модема
────────────────────────────────────────────
Вход: нет
Выход: BX = профиль встроенного модема
Описание: Возвращает текущий профиль
модема.
- 80 -
Подфн 03h: Модификация профиля
встроенного модема
─────────────────────────────────────────────────
Вход: BX = профиль встроенного модема
Выход: нет
Описание: Задает новый профиль модема.
_E2.6.8. Фн 41h - Ожидание внешнего
события
(Convertible)_F
Вход: AH = 41h
AL = код типа события:
00h = возврат после любого события
01h = возврат, если ES:[DI] =
BH
02h = возврат, если ES:[DI] !=
BH
03h = возврат, если ES:[DI]
& BH != 0
04h = возврат, если ES:[DI]
& BH = 0
11h = возврат, если in(DX) = BH
12h = возврат, если in(DX) !=
BH
13h = возврат, если in(DX)
& BH != 0
14h = возврат, если in(DX)
& BH = 0
BH = условие сравнения или значение
маски
BL = таймаут в единицах по 55 мсек;
0 - без таймаута
ES:DI = адрес байта для определения
события
(если AL равно 01h-04h)
DX = адрес порта ввода-вывода (если
AL равно 11h-14h)
Выход: на PC
Convertible:
CF = 0 - внешнее событие произошло
1 - таймаут
на PC и PCjr:
AH = 80h
CF
= 1
на остальных ПЭВМ:
AH = 86h
CF
= 1
Описание: Эта фн
ждет наступления внешнего
события либо
истечения
заданного таймаута. Она
доступна только на PC
Convertible. Событие может быть либо внешним прерыванием, либо
запросом от
контроллера ПДП. На время
ожидания системные часы
останавливаются, чтобы не расходовать энергию
батареи.
При
наступлении внешнего события
проверяется условие
выхода,
заданное в AL.
При выполнении заданного
условия
происходит возврат в программу пользователя.
- 81 -
_E2.6.9. Фн 42h - Отключение ПЭВМ
(Convertible)_F
Вход: AH = 42h
AL = код восстановления системы
0 - извлекать режим
восстановления из профиля
1 - использовать режим выхода
из приостанова
Выход: на PC
Convertible:
CF = 0 - нормальное завершение
1 - ошибка
AX разрушено
на PC и PCjr:
AH = 80h
CF
= 1
на остальных ПЭВМ:
AH = 86h
CF
= 1
Описание: Производит отключение
питания ПЭВМ. При следующем
включении ПЭВМ
возможен запуск системы с
команды, следующей за
запросом
к этой функции.
Эта фн доступна
только на PC
Convertible.
Примечания:
1.
Если AL=1 или в профиле системы (см. п. 2.6.7) задан
режим
теплого рестарта, то при следующем
включении ПЭВМ
продолжится выполнение программы, выключившей
ПЭВМ.
2. Перед выключением системы выключаются
двигатели НГМД.
См. также: Int 15h, фн 40h
_E2.6.10. Фн 43h - Чтение состояния
системы
(Convertible)_F
Вход: AH = 43h
Выход: на PC
Convertible:
CF = 0 - нормальное завершение
1 - ошибка
AL = состояние системы (см. ниже)
AH разрушено
на PC и PCjr:
AH = 80h
CF
= 1
на остальных ПЭВМ:
AH = 86h
CF
= 1
Описание: Эта
фн, доступная только
на PC Convertible,
- 82 -
возвращает состояние системы в следующем
формате:
7
6 5 4
3 2 1 0
┌──┬──┬──┬──┬──┬──┬──┬──┐
│
│ │ │
│ │ │X │ │ Биты: Маска:
└┬─┴┬─┴┬─┴┬─┴┬─┴┬─┴──┴┬─┘
──── ──────
│
│ │ │
│ │ └──> 0: 1=LCD-дисплей
не присодинен a&01
│
│ │ │
│ └────────>
2: 1=последовательно-параллель- a&04
│
│ │ │
│ ный порт
подключен
│
│ │ │
└───────────>
3: 1=встроенный модем подключен a&08
│
│ │ └──────────────>
4: 1=было включение по побудке a&10
│
│ └─────────────────>
5: 1=потеря резервного питания a&20
│
└────────────────────>
6: 1=работа от внешнего питания a&40
└───────────────────────>
7: 1=батарея "села"
a&80
Примечания:
1. Если
произошла потеря резервного
питания, то показания
часов реального времени неверны.
2. О включении ПЭВМ по сигналу побудки
см. п. 2.11.9.
См. также: Int 1Ah, фн 08h
_E2.6.11. Фн 44h - Управление встроенным модемом
(Convertible)_F
Вход: AH = 44h
AL = 0 - выключить встроенный модем
1 - включить встроенный модем
Выход: на PC
Convertible:
CF = 0 - нормальное завершение
1 - ошибка
AL = 00h - успешное завершение
80h - ошибка
на PC и PCjr:
AH = 80h
CF
= 1
на остальных ПЭВМ:
AH = 86h
CF
= 1
Описание: Эта
фн, доступная только
на PC Convertible,
управляет
встроенным модемом. При
AL=0 питание модема
выключается,
при AL=1 модем
включается и его
параметры
устанавливаются в соответствии с профилем
модема (см. п. 2.6.7).
См. также: Int 15h, фн 40h
- 83 -
_E2.6.12. Фн 4Fh - Ловушка клавиатуры_F
Вход: AH = 4Fh
AL = скан-код клавиши
Выход: на PC и PCjr:
AH = 80h
CF
= 1
на XT от 11/08/82 и AT от 01/10/84:
AH = 86h
CF
= 1
на остальных ПЭВМ:
CF = 0 - игнорировать скан-код
1 - занести скан-код в буфер
клавиатуры
AL = скан-код (старый или
подмененный)
Описание: Эта фн доступна на всех ПЭВМ, кроме PC, PCjr, XT
от
11/08/82 и AT
от 01/10/84. Она
вызывается обработчиком
прерываний от клавиатуры (Int 09h), позволяя
программе подменить
или удалить
введенную клавишу. Стандартный
обработчик этой
функции оставляет скан-код неизменным, но Вы можете перехватить
эту функцию
и анализировать нажатую клавишу,
выполняя одно из
трех возможных действий:
- оставить клавишу неизменной: установите
флаг CF и верните
управление;
- подменить скан-код на другой: зашлите новый скан-код в
AL, установите флаг CF и верните управление;
- игнорировать клавишу (не заносить ее в
буфер клавиатуры):
сбросьте флаг CF и верните управление.
Примечание: Для проверки того, что Ваша ПЭВМ поддерживает
эту фн, используйте Int 15h, фн C0h.
См. также: Int 15h, фн C0h
Int 09h
_E2.6.13. Фн 80h - Открыть устройство_F
Вход: AH = 80h
BX = идентификатор устройства
CX = идентификатор процесса
Выход: на PC и PCjr:
AH = 80h
CF
= 1
на XT от 11/08/82:
AH = 86h
CF
= 1
- 84 -
на остальных ПЭВМ:
CF = 0
Описание: Эта фн доступна на всех ПЭВМ,
кроме PC, PCjr и XT
от 11/08/82. Она обеспечивает интерфейс для открытия устройства
заданным
процессом, который предназначен
для многозадачных
операционных систем.
Ее
стандартный обработчик не
выполняет никаких действий.
Предполагается, что ОС
будет подменять его для инициирования
использования данного устройства данным
процессом.
_E2.6.14. Фн 81h - Закрыть устройство_F
Вход: AH = 81h
BX = идентификатор устройства
CX = идентификатор процесса
Выход: на PC и PCjr:
AH = 80h
CF
= 1
на XT от 11/08/82:
AH = 86h
CF
= 1
на остальных ПЭВМ:
CF = 0
Описание: Эта фн доступна на всех ПЭВМ,
кроме PC, PCjr и XT
от 11/08/82. Она обеспечивает интерфейс для закрытия устройства
заданным
процессом, который предназначен
для многозадачных
операционных систем.
Ее
стандартный обработчик не
выполняет никаких действий.
Предполагается, что
ОС будет подменять
его для завершения
использования данного устройства данным
процессом.
_E2.6.15. Фн 82h - Освободить
устройство_F
Вход: AH = 82h
BX = идентификатор устройства
Выход: на PC и PCjr:
AH = 80h
CF
= 1
на XT от 11/08/82:
AH = 86h
CF
= 1
на остальных ПЭВМ:
CF = 0
Описание: Эта фн доступна на всех ПЭВМ,
кроме PC, PCjr и XT
- 85 -
от 11/08/82. Она обеспечивает интерфейс для закрытия устройства
всеми
использующими его процессами,
который предназначен для
многозадачных операционных систем.
Ее
стандартный обработчик не
выполняет никаких действий.
Предполагается, что
ОС будет подменять
его для завершения
использования данного устройства всеми
процессами.
_E2.6.16. Фн 83h - Ожидание события_F
Вход: AH = 83h
AL = номер подфн:
0 - Задать интервал времени
1 - Отменить интервал времени
Выход: на PC и PCjr:
AH = 80h
CF
= 1
на XT:
AH = 86h
CF = 1
на остальных ПЭВМ:
зависит от подфн
Описание: Эта фн доступна на всех ПЭВМ, кроме PC и XT.
Подфн 00h: Задать интервал времени
──────────────────────────────────
Вход: ES:BX - Адрес модифицируемого байта
CX:DX - Длительность временного
интервала в единицах
по 976
мсек (длинное целое число, старшие
биты в CX)
Выход: CF = 0 - успешное завершение
1 - уже идет отсчет временного
интервала
Описание: Эта
подфн модифицирует байт
в программе
пользователя
(устанавливает его старший
бит) по истечении