Области данных BIOS

      И н ж е н е 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 LineF

      Вход:   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-232CF

      Для   управления   последовательным   интерфейсом   (стыком

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 - уже идет отсчет временного интервала

      Описание:   Эта   подфн   модифицирует   байт  в  программе

пользователя  (устанавливает  его   старший  бит)  по  истечении

заданного   временного    интервала.   Управление   возвращается

вызвавшей   программе   сразу   после   обращения   к   функции.

Пользовательская  программа  должна  сама  проверять  содержимое

старшего бита по адресу ES:BX.

      Примечания:

      1. AT от 01/10/84 не поддерживает подфн 01h, поэтому на ней

AL=0 задавать не нужно.

      2. Не  забудьте сбросить старший бит  заданного байта перед

вызовом этой подфн.

      3. Для отсчета времени используются часы реального времени.

                            - 86 -

      Подфн 01h: Отменить интервал времени

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: нет

      Выход: CF = 0 - успешное завершение

                  1 - не был задан временной интервал

      Описание:  Отменяет отсчет  временного интервала, заданного

подфн 00h.

      Примечания:

      1. AT от 01/10/84 не поддерживает эту подфн.

      2. PS/2 модель 30 всегда возвращает CF=1.

      E2.6.17. Фн 84h - Работа с джойстикомF

      Вход: AH = 84h

            DX = номер подфн:

                 0 - читать триггеры

                 1 - читать аналоговые входы

      Выход: на PC, PCjr и PC Convertible:

             AH = 80h

             CF = 1

             на XT от 11/08/82:

             AH = 86h

             CF = 1

             на остальных ПЭВМ:

             зависит от подфн

      Описание:  Игровой  адаптер  -  это аналого-цифровой преоб-

разователь, который может использоваться  для подключения к ПЭВМ

аналоговых  устройств  (например,  джойстика  или  измерительных

приборов).  Он   принимает  до  четырех   цифровых  входов  типа

"включено/выключено" (например, для нажатия кнопок) и до четырех

аналоговых входов (таких, как координаты джойстика или показания

электронного термометра).

      Эта фн  предназначена для чтения  входов игрового адаптера.

Она поддерживается  на XT позднее  11/08/82, AT, XT-286,  PS/2 и

имеет две подфункции.

      Подфн 00h: Читать триггеры

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: нет

      Выход: CF = 1 - ошибка

                  0 - нормальное завершение

             AL = состояние триггеров

                            - 87 -

      Описание:   Возвращает  состояние   триггеров  в  следующем

формате:

  7  6  5  4  3  2  1  0

тФМтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФР

тФВB2 B1 A2 A1тФВX  X  X  X тФВ Биты:

тФФтФАтФАтФґтФАтФАтФјтФАтФАтФґтФАтФАтФґтФАтФАтФґтФАтФАтФґтФАтФАтФґтФАтФАтФШ тФАтФАтФАтФАтФА

       тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 4-7: триггеры (цифровые входы)

      Подфн 01h: Читать аналоговые входы

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: нет

      Выход: CF = 1 - ошибка

                  0 - нормальное завершение

             AX = A(x)

             BX = A(y)

             CX = B(x)

             DX = B(y)

      Описание:  Возвращает текущие  значения четырех  аналоговых

входов.

      E2.6.18. Фн 85h - Обработка SysReqF

      Вход: AH = 85h

            AL = 00h - нажата клавиша SysReq

                 01h - отпущена клавиша SysReq

      Выход: на PC и PCjr:

             AH = 80h

             CF = 1

             на XT от 11/08/82:

             AH = 86h

             CF = 1

             на остальных ПЭВМ:

             CF = 0

      Описание: Эта фн поддерживается на XT позднее 11/08/82, AT,

XT-286  и  PS/2.  Она  обеспечивает  интерфейс  для обслуживания

клавиши   SysReq   и   вызывается   обработчиком  прерываний  от

клавиатуры (Int 09h).

      Стандартный  обработчик   этой  фн  не   выполняет  никаких

действий.  Возможно,  что  будущие  операционные  системы  будут

использовать эту клавишу для переключения задач.

      См. также: Int 09h

                            - 88 -

      E2.6.19. Фн 86h - Задержка (AT, XT-286, PS/2)F

      Вход: AH = 86h

            CX:DX - Длительность временного интервала  в единицах

                    по  976  мсек  (длинное  целое число, старшие

                    биты в CX)

      Выход: на PC и PCjr:

             AH = 80h

             CF = 1

             на XT:

             AH = 86h

             CF = 1

             на остальных ПЭВМ:

             CF = 0 - успешное завершение

                  1 - уже идет отсчет временного интервала

      Описание:  Ожидает заданное  время и  возвращает управление

вызвавшей  программе. Эта  фн поддерживается  на AT,  XT-286, PC

Convertible и PS/2.

      Примечание: Для отсчета времени используются часы реального

времени.

      E2.6.20. Фн 87h - Обмен с расширенной памятью

                 (AT, XT-286, PS/2)F

      Вход: AH = 87h

            CX = Длина передаваемого блока в словах

                 (максимум 8000h = 64 Kбайта)

            ES:SI = указатель на глобальную таблицу дескрипторов

                    (GDT), описанную ниже

      Выход: на PC и PCjr:

             AH = 80h

             CF = 1

             на XT, PC Convertible и PS/2 модель 30:

             AH = 86h

             CF = 1

             на остальных ПЭВМ:

             AH = результат операции:

                  00h - успешное завершение

                  01h - ошибка паритета памяти

                  02h - иное прерывание по ошибке

                  03h - сбой адресной линии шлюза 20h

                        (все регистры, кроме AH, разрушены)

             CF = 0 - успешное завершение

                  1 - ошибка

             ZF = 1 - успешное завершение

                  0 - ошибка

                            - 89 -

      Описание: Эта  фн позволяет передать  блок данных из  или в

расширенную  память, т.  е. память,  адресуемую свыше  1 Mбайта.

Такая  память  поддерживается  процессорами  80286  и  80386 при

работе в  защищенном режиме, поэтому  эта фн доступна  только на

AT, XT-286 и PS/2, кроме  модели 30. Сама пользовательская прог-

рамма может работать в реальном режиме, т. е. в режиме совмести-

мости с МП 8086/8088.

      ES:SI должны  указывать на следующую  таблицу, состоящую из

шести 8-байтовых дескрипторов:

             тФМтФАтФАтФАтФАтФАтФАтФАтФАтФР

             V        тФВ

+00h  тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР  тФВ "Пустой" дескриптор. Инициализируется

       тФВ  Пустой   тФВ  тФВ пользователем в 0.

+08h  тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд  тФВ Дескриптор GDT как сегмента данных. Ини-

       тФВ Сегмент   тФЬтФАтФАтФШ циализируется пользователем в 0, модифи-

       тФВданных GDT тФВ    цируется BIOS.

+10h  тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд

       тФВДескриптор тФВ    Дескриптор сегмента-источника, инициали-

       тФВ источника тФВ    зируется пользователем.

+18h  тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд

       тФВДескриптор тФВ    Дескриптор сегмента-приемника, инициали-

       тФВ приемника тФВ    зируется пользователем.

+20h  тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд

       тФВ Сегмент   тФВ    Дескриптор сегмента кодов в защищенном

       тФВ  кодов    тФВ    режиме. Инициализируется пользователем

+28h  тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд    в 0, модифицируется BIOS.

       тФВ Сегмент   тФВ    Дескриптор сегмента стека в защищенном

       тФВ  стека    тФВ    режиме. Инициализируется пользователем

       тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ    в 0, модифицируется BIOS.

30h   Длина таблицы

      Таким образом, только третий и четвертый дескрипторы должны

быть сформированы, остальные можно просто обнулить.

      Дескриптор  занимает  8  байтов  памяти  и  имеет следуюшую

структуру:

Смещение Длина         Содержимое            Комментарий

тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

                тФМтФАтФАтФАтФАтФАтФАтФАтФАтФмтФАтФАтФАтФАтФАтФАтФАтФАтФР

    +0      2   тФВ      Длина      тФВ           Размеp сегмента

                тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФјтФАтФАтФАтФАтФАтФАтФАтФАтФјтФАтФАтФАтФАтФАтФАтФАтФАтФР

    +2      3   тФВ           База           тФВ  Его базовый адpес

                тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФјтФАтФАтФАтФАтФАтФАтФАтФАтФґтФАтФАтФАтФАтФАтФАтФАтФАтФШ

    +5      1   тФВ Пpава  тФВ                    Пpава доступа

                тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФјтФАтФАтФАтФАтФАтФАтФАтФАтФР

    +6      2   тФВ     Резеpв      тФВ           Заpезеpвиpовано

                тФФтФАтФАтФАтФАтФАтФАтФАтФАтФґтФАтФАтФАтФАтФАтФАтФАтФАтФШ

     8      Размеp дескpиптоpа

тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Поле  "Длина" содеpжит  pазмеp сегмента  (от 1  байта до 64

Кбайт).   Поле  "База"   содеpжит  24-pазpядный   базовый  адpес

                            - 90 -

сегмента. Байт "Права" описывает тип  сегмента и права доступа к

нему.  Заpезеpвиpованное  слово  должно  быть  нулем для совмес-

тимости с МП 80386.

      Дескрипторы сегментов - источника и приемника - должны быть

заполнены следующим образом:

      - поле "Длина" должно содержать значение не менее 2 * (CX -

1);

      - поля "База" должны  содержать полный (24-разрядный) адрес

источника и приемника соответственно;

      -  байт прав  доступа  должен  содержать значение  93h, что

означает  сегмент  данных,  доступный  для  чтения  и  записи, с

уровнем привилегий 0.

      Примечание: Во  время передачи блока  прерывания запрещены,

поэтому пересылка длинного блока  может привести к потере преры-

ваний.

      E2.6.21. Фн 88h - Получить размер расширенной памяти

                 (AT, XT-286, PS/2)F

      Вход: AH = 88h

      Выход: на PC и PCjr:

             AH = 80h

             CF = 1

             на XT, PC Convertible и PS/2 модель 30:

             AH = 86h

             CF = 1

             на остальных ПЭВМ:

             AX = размер расширенной памяти в килобайтах

             CF = 0 - успешное завершение

                  1 - ошибка

      Описание: Эта  фн возвращает размер  расширенной памяти, т.

е. памяти,  адресуемой свыше 1 Mбайта  (с адреса 100000h). Такая

память поддерживается  процессорами 80286 и  80386 при работе  в

защищенном режиме, поэтому эта фн  доступна только на AT, XT-286

и PS/2, кроме  модели 30. Сама  пользовательская программа может

работать в  реальном режиме, т.  е. в режиме  совместимости с МП

8086/8088.

      Примечание: Размер расширенной памяти извлекается из памяти

CMOS, куда он заносится в процессе POST.

      См. также: Int 12h

                 Int 15h, фн 88h

                            - 91 -

      F2.6.22. Фн 89h - Переключение в защищенный режим

                (AT, XT-286, PS/2)F

      Вход: AH = 89h

            BH = индекс в таблице дескрипторов прерываний (IDT),

                 указывающий на IRQ 0

            BL = индекс в IDT, указывающий на IRQ 8

            ES:SI = указатель на глобальную таблицу дескрипторов

                   (GDT), описанную ниже

      Выход: на PC и PCjr:

             AH = 80h

             CF = 1

             на XT, PC Convertible и PS/2 модель 30:

             AH = 86h

             CF = 1

             на остальных ПЭВМ:

             AH = 00h - успешное завершение

                  иначе - ошибка

             AX, BP и все регистры сегментов разрушены

      Описание:  Эта   фн  переключает  МП  80286   или  80386  в

защищенный режим  и передает управление  в заданый пользователем

сегмент кодов. Она  доступна только на AT, XT-286  и PS/2, кроме

модели 30.

      BH должен  содержать индекс элемента  GDT, соответствующего

первому прерыванию от первого контроллера прерываний (IRQ 0). BL

должен содержать  индекс элемента GDT,  соответствующего первому

прерыванию  от  второго  контроллера  прерываний  (IRQ 8). ES:SI

должны  указывать  на  следующую  таблицу,  состоящую  из восьми

8-байтовых дескрипторов:

                            - 92 -

             тФМтФАтФАтФАтФАтФАтФАтФАтФАтФР

             V        тФВ

+00h  тФМтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФР  тФВ "Пустой" дескриптор. Инициализируется

       тФВ  Пустой   тФВ  тФВ пользователем в 0.

+08h  тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд  тФВ

       тФВ Сегмент   тФЬтФАтФАтФШ Дескриптор GDT как сегмента данных. Ини-

       тФВданных GDT тФВ    циализируется пользователем.

+10h  тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд

       тФВДескриптор тФВ    Дескриптор IDT, инициализируется

       тФВ   IDT     тФВ    пользователем.

+18h  тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд

       тФВДескриптор тФВ    Дескриптор сегмента данных, инициали-

       тФВ    DS     тФВ    зируется пользователем.

+20h  тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд

       тФВДескриптор тФВ    Дескриптор сегмента ES, инициализируется

       тФВ    ES     тФВ    пользователем.

+28h  тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд

       тФВДескриптор тФВ    Дескриптор сегмента стека,

       тФВ    SS     тФВ    инициализируется пользователем.

       тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд

+30h  тФВДескриптор тФВ    Дескриптор сегмента кодов,

       тФВ    CS     тФВ    инициализируется пользователем.

       тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФд

+38h  тФВ Временный тФВ    Дескриптор сегмента кодов BIOS.

       тФВCS для BIOSтФВ    Инициализируется пользователем в 0,

       тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФШ    модифицируется BIOS.

40h   Длина таблицы

      Дескриптор  занимает  8  байтов  памяти  и  имеет следуюшую

структуру:

Смещение Длина         Содержимое            Комментарий

тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

                тФМтФАтФАтФАтФАтФАтФАтФАтФАтФмтФАтФАтФАтФАтФАтФАтФАтФАтФР

    +0      2   тФВ      Длина      тФВ           Размеp сегмента

                тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФјтФАтФАтФАтФАтФАтФАтФАтФАтФјтФАтФАтФАтФАтФАтФАтФАтФАтФР

    +2      3   тФВ           База           тФВ  Его базовый адpес

                тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФјтФАтФАтФАтФАтФАтФАтФАтФАтФґтФАтФАтФАтФАтФАтФАтФАтФАтФШ

    +5      1   тФВ Пpава  тФВ                    Пpава доступа

                тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФјтФАтФАтФАтФАтФАтФАтФАтФАтФР

    +6      2   тФВ     Резеpв      тФВ           Заpезеpвиpовано

                тФФтФАтФАтФАтФАтФАтФАтФАтФАтФґтФАтФАтФАтФАтФАтФАтФАтФАтФШ

     8      Размеp дескpиптоpа

тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Поле  "Длина" содеpжит  pазмеp сегмента  (от 1  байта до 64

Кбайт).   Поле  "База"   содеpжит  24-pазpядный   базовый  адpес

сегмента. Байт "Права" описывает тип  сегмента и права доступа к

нему.  Заpезеpвиpованное  слово  должно  быть  нулем для совмес-

тимости с МП 80386.

                            - 93 -

      Байт  пpав  доступа  в  дескpиптоpе  пpогpаммного  сегмента

состоит из следующих полей:

тФМ7тФм6тФм5тФм4тФм3тФм2тФм1тФм0тФР

тФВPтФВDPLтФВSтФВTYPE тФВAтФВ Бит:                                   Маска:

тФФтФмтФґтФАтФјтФАтФґтФмтФґтФАтФґтФмтФґтФАтФґтФмтФШ

  тФВ  тФВ  тФВ   тФВ   тФФтФАтФА> 0:0=доступа к сегменту не было       01h

  тФВ  тФВ  тФВ   тФВ          1=селектор сегмента загружен

  тФВ  тФВ  тФВ   тФФтФАтФАтФАтФАтФАтФА> 1-3: Тип сегмента (см. ниже)         0Eh

  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 4: Тип дескриптора: 1=прог. сегмент  10h

  тФВ  тФВ                  0=системный сегнент или шлюз

  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 5-6: Уровень привилегии дескриптора  60h

  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 7: 1=сегмент отображен в физическую  80h

                        память, 0=нет

      Тип сегмента имеет следующие значения:

      0 - сегмент  данных, только  для чтения, расширяется  вверх

          (смещение должно быть меньше длины)

      1 - сегмент данных, для чтения и записи, расширяется  вверх

          (смещение должно быть меньше длины)

      2 - сегмент  данных, только  для чтения,  расширяется  вниз

          (смещение должно быть больше или равно длины)

      3 - сегмент данных, для чтения и записи,  расширяется  вниз

          (смещение должно быть больше или равно длины)

      4 - сегмент кодов, только для выполнения

      5 - сегмент кодов, для выполнения и чтения

      6 - разделяемый сегмент кодов, только для выполнения

      7 - разделяемый сегмент кодов, для  выполнения и  чтения

      Примечания:

      1.  В  защищенном   режиме  BIOS  недоступен  пользователю,

который обязан сам выполнять все операции ввода-вывода.

      2.  Область  векторов  прерываний  должна  быть перенесена,

чтобы не перекрываться с зарезервированной областью процессора.

      3.  Контроллеры  прерываний  должны  быть  инициализированы

заново по той же причине.

      4.  Пользователь  должен  инициализировать  таблицу  исклю-

чительных ситуаций и их обработчики.

      5. Таблица IDT не  должна перекрываться с областью векторов

прерываний реального режима.

                            - 94 -

      E2.6.23. Фн 90h - Устройство занятоF

      Вход: AH = 90h

            AL = Тип устройства (см. ниже)

      Выход: на PC и PCjr:

             AH = 80h

             CF = 1

             на XT от 11/08/82:

             AH = 86h

             CF = 1

             на остальных ПЭВМ:

             CF = 0 - запрос на ожидание не удовлетворен

                  1 - выдержано минимальное время ожидания

      Описание: Эта фн сообщает системе, что устройство не готово

к работе.  Она доступна  на всех  ПЭВМ, кроме  PC, PCjr  и XT от

11/08/82.

      Все устройства разбиты на три класса:

      - коды 00h - 7Fh отведены для устройств, которые могут быть

последовательно повторно-используемы; это означает, что доступ к

драйверам этих  устройств должен быть ограничен  одной задачей в

каждый  момент,  и  операционная  система  должна  гарантировать

постановку запросов к устройству в очередь;

      - коды  80h -BFh отведены  для повторно-входимых устройств,

для  которых  нет  ограничений   на  число  задач,  одновременно

обращающихся  к  устройству;  ES:BX  указывает на дополнительную

информацию, позволяющую различить запросы от разных задач;

      -  коды C0h  - FFh  отведены для  запросов на  ожидание без

прерывания от  устройства; диспетчер должен  выполнить действия,

ликлвидирующие причину ожидания, и  выйти из цикла ожидания. Для

этих кодов нет события  "конец ожидания", они управляются только

временем таймаута, зависящим от устройства.

      BIOS поддерживает следующие типы устройств:

Тип  Устройство                                   Таймаут

тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

00h  Жесткий диск                                 Есть

01h  НГМД                                         Есть

02h  Клавиатура                                   Нет

03h  Указывающее устройство (мышь)                Есть

80h  Сеть                                         Нет

      (ES:BX - указатель на управляющий блок сети)

FCh  Сброс жесткого диска (только в PS/2)         Есть

FDh  Запуск двигателя НГМД                        Есть

FEh  Принтер                                      Есть

тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

                            - 95 -

      Если  процесс обратился  к устройству,  которое по какой-то

причине занято, ОС может переключиться на другую задачу,поставив

текущий  процесс в  очередь ожидания.  Именно таково  назначениe

этой  фн в  многозадачных системах.  См. также  фн 91h,  которая

сообщает о готовности устройства.

      См. также: Int 15h, фн 91h

                 Многозадачная работа

      E2.6.24. Фн 91h - Прерывание завершеноF

      Вход: AH = 91h

            AL = тип устройства (см. 2.6.23)

      Выход: на PC и PCjr:

             AH = 80h

             CF = 1

             на XT от 11/08/82:

             AH = 86h

             CF = 1

             на остальных ПЭВМ:

             CF = 0 - запрос на ожидание не удовлетворен

                  1 - выдержано минимальное время ожидания

      Описание: Эта фн сообщает  системе, что устройство готово к

работе.  Она доступна  на всех  ПЭВМ,  кроме  PC, PCjr  и XT  от

11/08/82.

      Если  процесс обратился  к устройству,  которое по какой-то

причине занято, ОС может переключиться на другую задачу,поставив

текущий процесс  в очередь ожидания. Таково  назначениe фн 90h в

многозадачных  системах.  Данная  фн  сообщает  ОС  о готовности

устройства, после  чего система должна  переключиться обратно на

приостановленную задачу.

      Так, например, Int 09h вызывает эту фн при нажатии клавиши.

Если в системе имеется задача, ждущая ввода клавиши, то ОС может

передать ей управление.

      См. также: Int 09h

                 Int 15h, фн 90h

                 Многозадачная работа

                            - 96 -

      E2.6.25. Фн C0h - Получить конфигурацию системыF

      Вход: AH = C0h

      Выход: на PC и PCjr:

             AH = 80h

             CF = 1

             на XT от 11/08/82 и AT от 01/10/84:

             AH = 86h

             CF = 1

             на остальных ПЭВМ:

             AH = C0h

             CF = 0

             ES:BX = адрес дескриптора системы в ПЗУ

      Описание: Эта фн поддерживается на  XT от 01/10/86 и позже,

AT  от 06/10/85  и позже,   XT-286, PC  Convertible и  PS/2. Она

возвращает  адрес  системного   дескриптора,  содержащего  много

полезной информации о ПЭВМ, а именно:

Смещение Длина         Содержимое            Комментарий

тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

                тФМтФАтФАтФАтФАтФАтФАтФАтФАтФмтФАтФАтФАтФАтФАтФАтФАтФАтФР

    +0      2   тФВ      Длина      тФВ Длина таблицы (не менее 8)

                тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФјтФАтФАтФАтФАтФАтФАтФАтФАтФШ

    +2      1   тФВ        тФВ           Модель ПЭВМ

                тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФд

    +3      1   тФВ        тФВ           Подмодель ПЭВМ

                тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФд

    +4      1   тФВ        тФВ           Уровень ревизии BIOS

                тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФд

    +5      1   тФВ        тФВ           Конфигурация системы

                тФЬтФАтФАтФАтФАтФАтФАтФАтФАтФд

    +6      4   тФВ        тФВ           Зарезервировано

                тФФтФАтФАтФАтФАтФАтФАтФАтФАтФШ

    +0Ah    Размеp дескpиптоpа

тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Идентификаторы модели, подмодели и ревизии BIOS приведены в

п.   5.2.6.   Байт   конфигурации   системы  содержит  следующую

информацию:

                            - 97 -

  7  6  5  4  3  2  1  0

тФМтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФР

тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФВX тФВ Биты:

тФФтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФАтФАтФШ тФАтФАтФАтФА

  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФА> 1: 1=Micro Channel, 0=шина типа PC

  тФВ  тФВ  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФА> 2: 1=есть дополнительная область

  тФВ  тФВ  тФВ  тФВ  тФВ                  данных BIOS

  тФВ  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 3: 1=есть поддержка внешнего события

  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 4: 1=Int 09h вызывает ловушку

  тФВ  тФВ  тФВ                        клавиатуры

  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 5: 1=есть часы реального времени

  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 6: 1=есть 2-й контроллер прерываний

  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 7: 1=жесткий диск использует

                                 3-й канал контроллера ПДП

      Примечания:

      1. XT от 01/10/86 содержат неверную конфигурацию системы: в

ней указано,  что есть второй  контроллер прерываний и  что BIOS

жесткого диска  не использует третий канал  ПДП. Для обхода этой

ошибки  действуйте так:  если идентификатор  модели равен  FBh и

уровень ревизии равен 1, то второго контроллера прерываний нет и

жесткий диск использует 3-й канал ПДП.

      2.  Программы,   использующие  третий  канал   ПДП,  должны

учитывать, что им могут пользоваться и другие адаптеры, например

адаптер локальной сети IBM PC Network.

      3.  Если PS/2  (кроме модели  30) не  может определить  тип

модели, то они возвращают AH=86h, CF=1, не изменяя ES:BX.

      4. Биты  1 и 2  конфигурации системы используются  только в

PS/2.

      5. Об ожидании внешнего события (бит 3) см. п. 2.6.8.

      6. О ловушке клавитуры (бит 4) см. п. 2.6.12.

      См. также: Int 15h, фн 41h

                 Int 15h, фн 4Fh

                 Int 09h

                 Идентификация ПЭВМ

                            - 98 -

      E2.6.26. Фн C1h - Взять адрес дополнительной области

                 данных BIOS (PS/2)F

      Вход: AH = C1h

      Выход: на PC и PCjr:

             AH = 80h

             CF = 1

             на XT, AT, XT-286 и PC Convertible:

             AH = 86h

             CF = 1

             на остальных ПЭВМ:

             CF = 0 - нормальное завершение

                  1 - ошибка

             ES = сегментный адрес дополнительной области

                  данных BIOS

      Описание:  Эта  фн  реализована  только  в  PS/2,  где  она

возвращает  адрес  сегмента  памяти,  содержащей  дополнительную

область данных BIOS.

      См. также: Дополнительная область данных BIOS

      E2.6.27. Фн C2h - Управление мышью (PS/2)F

      Вход: AH = C2h

            AL = номер подфн:

                 00h - разрешить/запретить мышь

                 01h - сброс мыши в начальное состояние

                 02h - задать скорость выборки

                 03h - задать разрешение

                 04h - получить тип устройства

                 05h - инициализировать интерфейс

                 06h - расширенные команды

                 07h - задать обработчик прерываний

            прочие - зависят от подфн

      Выход: на PC и PCjr:

             AH = 80h

             CF = 1

             на XT, AT, XT-286 и PC Convertible:

             AH = 86h

             CF = 1

             на остальных ПЭВМ:

             CF = 0 - успешное завершение

                  1 - ошибка

             AH = код ошибки:

                  00h - нет ошибки

                  01h - неверный вызов функции

                  02h - неверные входные параметры

                  03h - ошибка интерфейса

                            - 99 -

                  04h - повтор передачи

                  05h - не установлен обработчик прерываний

             прочие - определяется подфн

      Описание:  Эта  фн  реализована  только  в  PS/2,  где  она

обеспечивает   управление   указывающим   устройством  (pointing

device),  которым  обычно  является  мышь.  Она  имеет восемь

подфункций.

      Подфн 00h: Разрешить/запретить мышь

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: BH = 00h - запретить мышь

                 01h - разрешить мышь

      Выход: нет

      Описание:  Разрешает  или   запрещает  работу  указывающего

устройства.

      Подфн 01h: Сброс мыши в исходное состояние

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: нет

      Выход: при успешном завершении

             BH = 0 - идентификатор устройства

             BL разрушен

      Описание:  Указывающее  устройство  приводится  в  исходное

состояние, а именно:

      - мышь запрещена;

      - скорость выборки = 100 отчетов в секунду;

      - разрешение = 4 шага на миллиметр;

      - масштаб = 1 : 1;

      - размер пакета данных не изменяется.

      Подфн 02h: Задать скорость выборки

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: BH = Скорость выборки:

                 00h - 10 отчетов в секунду

                 01h - 20 отчетов в секунду

                 02h - 40 отчетов в секунду

                 03h - 60 отчетов в секунду

                 04h - 80 отчетов в секунду

                 05h - 100 отчетов в секунду

                 06h - 200 отчетов в секунду

      Выход: нет

      Описание: Задает  новую скорость выборки, т.  е. частоту, с

которой ПЭВМ опрашивает указывающее устройство.

                            - 100 -

      Подфн 03h: Задать разрешение

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: BH = Разрешение:

                 00h - 1 шаг на миллиметр

                 01h - 2 шаг на миллиметр

                 02h - 4 шаг на миллиметр

                 03h - 8 шаг на миллиметр

      Выход: нет

      Описание: Задает новое разрешение перемещающего устройства.

      Подфн 04h: Получить тип устройства

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: нет

      Выход: при успешном завершении

             BH = 0 - идентификатор устройства

      Описание: Возвращает тип устройства (всегда нуль).

      Подфн 05h: Инициализировать интерфейс

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: BH = Размер пакета данных в байтах (1 - 8)

      Выход: нет

      Описание:   Изменяет  размер   пакета  данных.  Указывающее

устройство сбрасывается в следующее состояние:

      - мышь запрещена;

      - скорость выборки = 100 отчетов в секунду;

      - разрешение = 4 шага на миллиметр;

      - масштаб = 1 : 1.

      Подфн 06h: Расширенные команды

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: BH = код команды:

                 00h - Вернуть состояние

                 01h - Задать масштаб 1 : 1

                 02h - Задать масштаб 2 : 1

      Выход: для команд 01h и 02h - нет

             для команды 00h при успешном завершении:

             BL = байт состояния 1

             CL = байт состояния 2

             DL = байт состояния 3

      Описание: Эта  подфн выполняет три  команды. Команды 01h  и

02h  задают  новое  значение  масштаба,  команда  00h возвращает

текущее состояние указывающего устройства  в виде трех следующих

                            - 101 -

байтов.

      Байт состояния 1:

  7  6  5  4  3  2  1  0

тФМтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФР

тФВ0 тФВ  тФВ  тФВ  тФВ0 тФВ  тФВ0 тФВ  тФВ Биты:

тФФтФАтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФАтФАтФґтФмтФАтФґтФАтФАтФґтФмтФАтФШ тФАтФАтФАтФА

     тФВ  тФВ  тФВ     тФВ     тФФтФАтФА> 0: 1=нажата правая кнопка

     тФВ  тФВ  тФВ     тФФтФАтФАтФАтФАтФАтФАтФАтФА> 2: 1=нажата левая кнопка

     тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 4: Масштаб: 0=1:1, 1=2:1

     тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 5: 1=разрешено, 0=запрещено

     тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 6: Режим: 1=потока, 0=удаленный

      Байт состояния 2:

      00h - 1 шаг на миллиметр

      01h - 2 шаг на миллиметр

      02h - 4 шаг на миллиметр

      03h - 8 шаг на миллиметр

      Байт состояния 3:

               0Ah - 10 отчетов в секунду

               14h - 20 отчетов в секунду

               28h - 40 отчетов в секунду

               3Ch - 60 отчетов в секунду

               50h - 80 отчетов в секунду

               64h - 100 отчетов в секунду

               C8h - 200 отчетов в секунду

      Подфн 07h: Задать обработчик прерываний

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: ES:BX = адрес обработчика

      Выход: нет

      Описание:   Пользователь  задает   адрес  своей   программы

обработки  прерываний от  мыши.  Всякий  раз, когда  данные мыши

готовы,  BIOS  будет  вызывать  эту  программу.  При этом в стек

заносятся следующие параметры:

      Состояние    - Первое слово, втолкнутое в стек (см. ниже)

      Координата X - Второе слово, втолкнутое в стек (0 - 255)

      Координата Y - Третье слово, втолкнутое в стек (0 - 255)

      Координата Z - Четвертое слово, втолкнутое в стек (всегда 0)

      Слово состояния имеет следующий  формат (старший байт равен

нулю):

                            - 102 -

  7  6  5  4  3  2  1  0

тФМтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФР

тФВ  тФВ  тФВ  тФВ  тФВ1 тФВ0 тФВ  тФВ  тФВ Биты:

тФФтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФАтФАтФґтФАтФАтФґтФмтФАтФґтФмтФАтФШ тФАтФАтФАтФА

  тФВ  тФВ  тФВ  тФВ        тФВ  тФФтФАтФА> 0: 1=нажата левая кнопка

  тФВ  тФВ  тФВ  тФВ        тФФтФАтФАтФАтФАтФА> 1: 1=нажата правая кнопка

  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 4: Знак X: 1=минус, 0=плюс

  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 5: Знак Y: 1=минус, 0=плюс

  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 6: 1=переполнение координаты X

  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 7: 1=переполнение координаты Y

      Эта программа вызывается командой FAR CALL и должна поэтому

завершаться командой  RETF. Она не  должна выталкивать параметры

из стека.

      E.2.6.28. Фн C3h - Управление сторожем (PS/2)F

      Вход: AH = C3h

            AL = номер подфн:

                 00h - запретить таймаут сторожа

                 01h - разрешить таймаут сторожа

            BX = счетчик таймера для сторожа (1 - 255)

                 (для подфн 01h)

      Выход: на PC и PCjr:

             AH = 80h

             CF = 1

             на XT, AT, XT-286, PC Convertible и PS/2 модель 30:

             AH = 86h

             CF = 1

             на остальных ПЭВМ:

             CF = 0 - успешное завершение

                  1 - ошибка

      Описание: Запрещает или  разрешает "сторожевое" прерывание.

При разрешении прерывания необходимо  задать время таймаута. Эта

фн реализована на PS/2 кроме модели 30.

      E2.6.29. Фн C4h - Выбор программируемых опций (PS/2)F

      Вход: AH = C4h

            AL = номер подфн:

                 00h - получить базовый адрес адаптера POS

                 01h - разрешить установку блока расширения

                 02h - разрешить адаптер POS

      Выход: на PC и PCjr:

             AH = 80h

             CF = 1

             на XT, AT, XT-286, PC Convertible и PS/2 модель 30:

             AH = 86h

             CF = 1

                            - 103 -

             на остальных ПЭВМ:

             CF = 0 - успешное завершение

                  1 - ошибка

             прочие - зависят от подфн

      Описание: Обеспечивает управление адаптером программируемых

опций (POS). Эта фн реализована на PS/2 кроме модели 30.

      Подфн 00h: Получить базовый адрес адаптера POS

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: нет

      Выход: AL = 00h

             DX = базовый адрес адаптера POS

      Описание: Возвращает базовый адрес адаптера программируемых

опций.

      Подфн 01h: Разрешить установку блока расширения

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: BL = номер блока

      Выход: AL = 01h

             BL = номер блока

      Описание: Подключает к адаптеру заданный блок расширения.

      Подфн 02h: Разрешить адаптер POS

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: нет

      Выход: AL = 02h

      Описание: Разрешает работу адаптера POS.

                            - 104 -

            E2.7. Int 16h - Обслуживание клавиатурыF

      Для управления клавиатурой используются следующие функции:

Функция  Назначение

тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

  00h     Чтение клавиатуры

  01h     Опрос клавиатуры

  02h     Состояние клавиатуры

  03h     Задание скорости клавиатуры          (PCjr, AT, PS/2)

  04h     Управление щелчком клавиш         (PCjr, Convertible)

  05h     Запись в буфер клавиатуры                    (многие)

  10h     Расширенное чтение клавиатуры                (многие)

  11h     Расширенный опрос клавиатуры                 (многие)

  12h     Расширенное состояние клавиатуры             (многие)

тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      E2.7.1. Фн 00h - Чтение клавиатурыF

      Вход: AH = 00h

      Выход: AL = ASCII-код клавиши

             AH = скан-код клавиши

      Описание: Возвращает очередной символ из буфера клавиатуры;

если буфер пуст, то ожидает нажатия клавиши.

      Примечания:

      1. Если  нажатая клавиша не  имеет ASCII-кода, то  AL равно

нулю, а AH содержит расширенный скан-код клавиши.

      2.  Для  различения  клавиш,  имеющих одинаковые ASCII-коды

(например, плюс в верхней части клавиатуры и серый плюс в правой

части) используйте скан-коды.

      3. После извлечения кода клавиши из буфера указатель на его

начало (по  адресу 0041Ah) увеличивается на  2. Если после этого

он указывает за конец буфера,  то в него засылается адрес начала

буфера.

      4.  Если   буфер  клавиатуры  пуст,   то  AT,  XT-286,   PC

Convertible и PS/2 вызывают Int  15h, фн 90h (устройство занято)

с AH=02h,  сообщая системе  о цикле  ожидания клавиатуры.  После

ввода  очередной  клавиши  эти  ПЭВМ  вызывают  Int  15h, фн 91h

(прерывание завершено).

      5.  Для расширенной  (101/102-клавишной) клавиатуры  см. фн

10h.

      См. также: Int 16h, фн 10h

                 ASCII-коды и скан-коды клавиш

                            - 105 -

      E2.7.2. Фн 01h - Опрос клавиатурыF

      Вход: AH = 01h

      Выход: ZF = 1, если буфер клавиатуры пуст

                  0, если в буфере есть символ, и тогда

             AL = ASCII-код клавиши

             AH = скан-код клавиши

      Описание: Проверяет  наличие символов в  буфере клавиатуры.

Если буфер пуст, возвращает флаг ZF=1. В противном случае ZF=0 и

AX  содержит  код  клавиши.  Символ  не  извлекается  из  буфера

клавиатуры; для этого следует использовать фн 00h.

      Эта фн  удобна для очистки  буфера клавиатуры и  для опроса

клавиатуры без ожидания ввода.

      Примечание: Для  расширенной (101/102-клавишной) клавиатуры

см. фн 11h.

      См. также: Int 16h, фн 11h

                 ASCII-коды и скан-коды клавиш

      E2.7.3. Фн 02h - Состояние клавиатурыF

      Вход: AH = 02h

      Выход: AL = состояние клавиатуры

      Описание:  Возвращает в  AL следующую  информацию о текущем

состоянии клавиатуры:

  7  6  5  4  3  2  1  0

тФМтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФР

тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ Биты:                           Маска:

тФФтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФШ тФАтФАтФАтФА                            тФАтФАтФАтФАтФАтФА

  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФФтФАтФА> 0: 1=нажата правая клавиша Shift a&01

  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФА> 1: 1=нажата левая клавиша Shift  a&02

  тФВ  тФВ  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФА> 2: 1=нажата клавиша Ctrl         a&04

  тФВ  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 3: 1=нажата клавиша Alt          a&08

  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 4: 1=нажата клавиша ScrollLock   a&10

  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 5: 1=нажата клавиша NumLock      a&20

  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 6: 1=нажата клавиша CapsLock     a&40

  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 7: 1=нажата клавиша Ins          a&80

      Примечания:

      1. Этот  байт извлекается из области  данных BIOS с адресом

00417h.

      2.  Для расширенной  (101/102-клавишной) клавиатуры  см. фн

12h.

      См. также: Int 16h, фн 12h

                 ASCII-коды и скан-коды клавиш

                            - 106 -

      E2.7.4. Фн 03h - Задание скорости клавиатуры

                (PCjr, AT, PS/2)F

      Вход: AH = 03h

            AL = номер подфн:

                 0 - Сброс клавиатуры в исходное состояние (PCjr)

                 1 - Увеличить начальную задержку          (PCjr)

                 2 - Уменьшить скорость вдвое              (PCjr)

                 3 - Выполнить подфн 1 и 2                 (PCjr)

                 4 - Отключить повтор символов             (PCjr)

                 5 - Задать скорость и задержку (AT, XT-286,PS/2)

      Выход: нет

      Описание: Эта фн  состоит из шести подфункций. Подфн  0 - 4

поддерживаются только на PCjr. Подфн  5 доступна только на AT от

11/15/85 и позже, XT-286 и PS/2.

      Подфн 00h: Сброс клавиатуры в исходное состояние (PCjr)

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: нет

      Выход: нет

      Описание:  Восстанавливает  исходное  состояние  клавиатуры

PCjr,  т.  е.  начальную   задержку  перед  повтором  клавиши  и

начальную скорость повторов.

      Подфн 01h: Увеличить начальную задержку (PCjr)

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: нет

      Выход: нет

      Описание:  Увеличивает  начальную  задержку  перед повтором

клавиши на PCjr.

      Подфн 02h: Уменьшить скорость вдвое (PCjr)

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: нет

      Выход: нет

      Описание: Уменьшает скорость повторов клавиши в два раза на

PCjr.

                            - 107 -

      Подфн 03h: Выполнить подфн 01h и 02h (PCjr)

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: нет

      Выход: нет

      Описание: Уменьшает скорость повторов  клавиши в два раза и

увеличивает  задержку перед началом повторов на PCjr.

      Примечание:  Если   подфн  00h  -   04h  изменяют  скорость

повторов,  то  все  остальные  изменения  параметров  клавиатуры

теряются. Поэтому для уменьшения  скорости и увеличения задержки

нужно вызывать не фн 01h и следом фн 02h, а фн 03h.

      Подфн 04h: Отключить повтор символов (PCjr)

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: нет

      Выход: нет

      Описание: Отменяет повтор нажатия клавиши на PCjr.

      Подфн 05h: Задать скорость и задержку (AT, XT-286,PS/2)

      тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Вход: BL = количество повторов в сек (см. ниже)

            BH = задержка перед повторами в мсек:

                 0 = 250, 1 = 500, 2 = 750, 3 = 1000

      Выход: нет

      Описание:  Задает  новую  скорость  и  задержку клавиатуры.

Количество повторов задается следующей таблицей:

тФМтФАтФАтФАтФАтФАтФАтФмтФАтФАтФАтФАтФАтФАтФАтФАтФмтФАтФАтФАтФАтФАтФАтФмтФАтФАтФАтФАтФАтФАтФАтФАтФмтФАтФАтФАтФАтФАтФАтФмтФАтФАтФАтФАтФАтФАтФАтФАтФР

тФВ  BL  тФВСкоростьтФВ  BL  тФВСкоростьтФВ  BL  тФВСкоростьтФВ

тФЬтФАтФАтФАтФАтФАтФАтФјтФАтФАтФАтФАтФАтФАтФАтФАтФјтФАтФАтФАтФАтФАтФАтФјтФАтФАтФАтФАтФАтФАтФАтФАтФјтФАтФАтФАтФАтФАтФАтФјтФАтФАтФАтФАтФАтФАтФАтФАтФд

тФВ 00h  тФВ 30.0   тФВ 0Bh  тФВ 10.9   тФВ 16h  тФВ 4.3    тФВ

тФВ 01h  тФВ 26.7   тФВ 0Ch  тФВ 10.0   тФВ 17h  тФВ 4.0    тФВ

тФВ 02h  тФВ 24.0   тФВ 0Dh  тФВ  9.2   тФВ 18h  тФВ 3.7    тФВ

тФВ 03h  тФВ 21.8   тФВ 0Eh  тФВ  8.6   тФВ 19h  тФВ 3.3    тФВ

тФВ 04h  тФВ 20.0   тФВ 0Fh  тФВ  8.0   тФВ 1Ah  тФВ 3.0    тФВ

тФВ 05h  тФВ 18.5   тФВ 10h  тФВ  7.5   тФВ 1Bh  тФВ 2.7    тФВ

тФВ 06h  тФВ 17.1   тФВ 11h  тФВ  6.7   тФВ 1Ch  тФВ 2.5    тФВ

тФВ 07h  тФВ 16.0   тФВ 12h  тФВ  6.0   тФВ 1Dh  тФВ 2.3    тФВ

тФВ 08h  тФВ 15.0   тФВ 13h  тФВ  5.5   тФВ 1Eh  тФВ 2.1    тФВ

тФВ 09h  тФВ 13.3   тФВ 14h  тФВ  5.0   тФВ 1Fh  тФВ 2.0    тФВ

тФВ 0Ah  тФВ 12.0   тФВ 15h  тФВ  4.6   тФВ      тФВ        тФВ

тФФтФАтФАтФАтФАтФАтФАтФґтФАтФАтФАтФАтФАтФАтФАтФАтФґтФАтФАтФАтФАтФАтФАтФґтФАтФАтФАтФАтФАтФАтФАтФАтФґтФАтФАтФАтФАтФАтФАтФґтФАтФАтФАтФАтФАтФАтФАтФАтФШ

                            - 108 -

      E2.7.5. Фн 04h - Управление щелчком клавиш

                (PCjr, Convertible)F

      Вход: AH = 04h

            AL = 0 - выключить щелчок клавиш

                 1 - включить щелчок клавиш

      Выход: нет

      Описание: Разрешает или  запрещает звуковой сигнал (щелчок)

при нажатии клавиши.  Эта фн поддерживается только на  PCjr и PC

Convertible.

      E2.7.6. Фн 05h - Запись в буфер клавиатурыF

      Вход: AH = 05h

            CH = скан-код символа

            CL = ASCII-код символа

      Выход: AL = 00h - успешное завершение

                  01h - буфер клавиатуры полон

      Описание:  Подставляет  заданный  символ  (скан-код  и  код

ASCII)  в  буфер  клавиатуры,   позволяя  тем  самым  "обмануть"

программу,  которая  будет  считать,  что  этот  символ введен с

клавиатуры. Эта фн реализована на XT  от 01/10/86 и позже, AT от

11/15/85 и позже, XT-286 и PS/2.

      См. также: ASCII-коды и скан-коды клавиш

      E2.7.7. Фн 10h - Расширенное чтение клавиатурыF

      Вход: AH = 10h

      Выход: AL = ASCII-код клавиши

             AH = скан-код клавиши

      Описание: Возвращает очередной символ из буфера клавиатуры;

если буфер  пуст, то ожидает нажатия  клавиши. Эта фн предназна-

чена для  расширенной (101/102-клавишной) клавиатуры  и реализо-

вана на XT от 01/10/86 и позже, AT от 11/15/85 и позже, XT-286 и

PS/2.

      Примечания:

      1. Если  нажатая клавиша не  имеет ASCII-кода, то  AL равно

нулю, а AH содержит расширенный скан-код клавиши.

      2.  Для  различения  клавиш,  имеющих одинаковые ASCII-коды

(например, плюс в верхней части клавиатуры и серый плюс в правой

части) используйте скан-коды.

      3. После извлечения кода клавиши из буфера указатель на его

начало (по  адресу 0041Ah) увеличивается на  2. Если после этого

он указывает за конец буфера,  то в него засылается адрес начала

                            - 109 -

буфера.

      4. Если  буфер клавиатуры пуст,  то вызывается Int  15h, фн

90h  (устройство  занято)  с  AH=02h,  сообщая  системе  о цикле

ожидания клавиатуры. После  ввода очередной клавиши генерируется

Int 15h, фн 91h (прерывание завершено).

      5. Для стандартной (84-клавишной) клавиатуры см. фн 00h.

      См. также: Int 16h, фн 00h

                 ASCII-коды и скан-коды клавиш

      E2.7.8. Фн 11h - Расширенный опрос клавиатурыF

      Вход: AH = 11h

      Выход: ZF = 1, если буфер клавиатуры пуст

                  0, если в буфере есть символ, и тогда

             AL = ASCII-код клавиши

             AH = скан-код клавиши

      Описание: Проверяет  наличие символов в  буфере клавиатуры.

Если буфер пуст, возвращает флаг ZF=1. В противном случае ZF=0 и

AX  содержит  код  клавиши.  Символ  не  извлекается  из  буфера

клавиатуры; для этого следует использовать фн 00h.

      Эта фн  удобна для очистки  буфера клавиатуры и  для опроса

клавиатуры без ожидания ввода. Она предназначена для расширенной

(101/102-клавишной) клавиатуры и реализована на XT от 01/10/86 и

позже, AT от 11/15/85 и позже, XT-286 и PS/2.

      Примечание:  Для стандартной  (84-клавишной) клавиатуры см.

фн 01h.

      См. также: Int 16h, фн 01h

                 ASCII-коды и скан-коды клавиш

      E2.7.9. Фн 12h - Расширенное состояние клавиатурыF

      Вход: AH = 12h

      Выход: AL = состояние клавиатуры

             AH = расширенное состояние клавиатуры

      Описание:   Возвращает  информацию   о  текущем   состоянии

клавиатуры.

     Эта  фн  предназначена  для  расширенной (101/102-клавишной)

клавиатуры  и  реализована  на  XT  от  01/10/86  и позже, AT от

11/15/85 и позже, XT-286 и PS/2.

      Информация возвращается в следующем формате.

      AL - состояние клавиатуры:

                            - 110 -

  7  6  5  4  3  2  1  0

тФМтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФР

тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ Биты:                           Маска:

тФФтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФШ тФАтФАтФАтФА                            тФАтФАтФАтФАтФАтФА

  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФФтФАтФА> 0: 1=нажата правая клавиша Shift a&01

  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФА> 1: 1=нажата левая клавиша Shift  a&02

  тФВ  тФВ  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФА> 2: 1=нажата клавиша Ctrl         a&04

  тФВ  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 3: 1=нажата клавиша Alt          a&08

  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 4: 1=нажата клавиша ScrollLock   a&10

  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 5: 1=нажата клавиша NumLock      a&20

  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 6: 1=нажата клавиша CapsLock     a&40

  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 7: 1=нажата клавиша Ins          a&80

      AH - расширенное состояние клавиатуры:

  7  6  5  4  3  2  1  0

тФМтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФР

тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ Биты:                           Маска:

тФФтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФШ тФАтФАтФАтФА                            тФАтФАтФАтФАтФАтФА

  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФФтФАтФА> 0: 1=нажата левая клавиша Ctrl  a&01h

  тФВ  тФВ  тФВ  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФА> 1: 1=нажата левая клавиша Alt   a&02h

  тФВ  тФВ  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФА> 2: 1=нажата правая клавиша Ctrl a&04h

  тФВ  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 3: 1=нажата левая клавиша Alt   a&08h

  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 4: 1=нажата клавиша ScrollLock  a&10h

  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 5: 1=нажата клавиша NumLock     a&20h

  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 6: 1=нажата клавиша CapsLock    a&40h

  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 7: 1=нажата клавиша SysReq      a&80h

      Примечания:

      1. Состояние клавиатуры извлекается  из области данных BIOS

с адресом 00417h.

      2. Для стандартной (84-клавишной) клавиатуры см. фн 02h.

      См. также: Int 16h, фн 02h

                 ASCII-коды и скан-коды клавиш

                            - 111 -

              E2.8. Int 17h - Управление принтеромF

      Для  управления  печатающим  устройством  имеются следующие

функции:

Функция  Назначение

тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

  00h     Вывод символа на печать

  01h     Инициализация принтера

  02h     Опрос состояния принтера

тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Примечания: Эти функции поддерживаются всеми версиями BIOS,

но при этом существуют следующие особенности.

      BIOS AT, датированный ранее 11/15/85, PCjr, PC и BIOS XT от

11/08/82  проверяют  базовый  порт  принтера  с  номером  DX  на

совпадение с  нулем. Если порт  равен нулю, никакие  действия не

выполняются. В противном  случае выполняется требуемая операция.

Никаких дополнительных  действий по проверке  корректности порта

принтера,  хранящегося в  области  данных  по адресу  00408h, не

предпринимается.

      BIOS XT от 01/10/86 и позже выполняет следующие проверки:

если DX больше 3 или базовый порт принтера с номером DX равен 0,

то никакие действия не выполняются и на выходе AH=29h.

      BIOS  PC  Convertible  проверяет  базовый  порт  принтера с

номером DX на совпадение с  нулем. Если порт равен нулю, никакие

действия не  выполняются и на выходе  AH=01h. В противном случае

выполняется требуемая операция.  Никаких дополнительных действий

по проверке  корректности порта принтера,  хранящегося в области

данных по адресу 00408h, не предпринимается.

      BIOS AT от 11/15/85 и XT-286 выполняют следующие проверки:

если DX больше 3 или базовый порт принтера с номером DX равен 0,

то никакие действия не выполняются и AH возвращается неизменным.

      BIOS PS/2  выполняет следующие проверки:  если DX больше  2

или  базовый порт  принтера с   номером DX  равен 0,  то никакие

действия не выполняются и AH возвращается неизменным.

      См. также: Многозадачная работа

                 Int 15h, фн 90h

                 Рабочая область данных BIOS

      E2.8.1. Фн 00h - Вывод символа на печать

      Вход: AH = 00h

            AL = печатаемый символ

            DX = номер принтера (0 - LPT1, 1 - LPT2 и т. д.)

      Выход: AH = состояние принтера (см. фн 02h)

      Описание:  Выводит  символ  из  AL  на  заданный  принтер и

                            - 112 -

возвращает состояние принтера.

      Примечание:  На  AT,  XT-286,  PC  Convertible  и PS/2 если

принтер  занят, то  BIOS  вызывает  Int 15h,  AH=90h (устройство

занято)   с   AL=FEh   (тип   устройства   =  принтер),  сообщая

операционной системе о начале цикла таймаута.

      См. также: Int 17h, фн 02h

      E2.8.2. Фн 01h - Инициализация принтера

      Вход: AH = 01h

            DX = номер принтера (0 - LPT1, 1 - LPT2 и т. д.)

      Выход: AH = состояние принтера (см. фн 02h)

      Описание: Инициализирует заданный  принтер и возвращает его

состояние.

      Примечание: Инициализация состоит в выводе байтов 08h и 0Ch

в регистр  управления принтером.  При этом  происходит начальная

установка всех параметров печатающего устройства.

      См. также: Int 17h, фн 02h

      E2.8.3. Фн 02h - Опрос состояния принтера

      Вход: AH = 02h

            DX = номер принтера (0 - LPT1, 1 - LPT2 и т. д.)

      Выход: AH = состояние принтера

      Описание:   Возвращает  состояние   заданного  принтера   в

следующем формате:

  7  6  5  4  3  2 1 0

тФМтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФАтФмтФАтФмтФАтФмтФАтФАтФР

тФВ  тФВ  тФВ  тФВ  тФВ  тФВ0тФВ0тФВ  тФВ Бит:

тФФтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФмтФАтФґтФАтФґтФАтФґтФмтФАтФШ тФАтФАтФАтФА

  тФВ  тФВ  тФВ  тФВ  тФВ      тФФтФАтФА> 0: 1=ошибка таймаута

  тФВ  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФА> 3: 1=при печати возникла ошибка

  тФВ  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 4: 0=принтер в автономном режиме

  тФВ  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 5: 1=сигнал "конец бумаги"

  тФВ  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 6: 1=принтер готов к печати

  тФВ                            следующего символа

  тФФтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА> 7: 0=принтер занят, находится в

                             автономном режиме или

                             произошла ошибка

                            - 113 -

             E2.9. Int 18h - Интерпретатор БейсикаF

      В этом  векторе хранится адрес точки  входа в интерпретатор

Бейсика,  прошитый   в  ПЗУ.  Если   POST  не  может   загрузить

операционную систему  ни с дискеты,  ни с жесткого  диска, то он

вызывает это прерывания для входа в Бейсик.

      Примечание. На  IBM PC адрес входа  в Бейсик равен F600h:0.

PC-совместимые ПЭВМ не имеют встроенного Бейсик-интерпретатора и

должны  взамен  использовать  его  дисковую  версию  - программу

GW-BASIC.

      См. также: Int 19h

                            - 114 -

               E2.10. Int 19h - Загрузка системыF

      Вызов этого прерывания производится в конце POST и приводит

к попытке  чтения  начального  загрузчика  операционной  системы

сначала  с  первого  НГМД,  а  затем  (при  неудаче) - с первого

жесткого  диска. Загрузочный  сектор ОС  располагается в  первом

секторе дорожки 0, головка 0.  Он считывается по адресу 0:7C00h,

и управление  передается  по  этому  адресу. Дальнейщие действия

зависят  от  типа  носителя:  загрузочный  сектор жесткого диска

анализирует  таблицу  разделов,  загружает  загрузчик  активного

раздела  и передает  ему управлению;  загрузочный сектор дискеты

считывает непосредственно операционную систему и запускает ее.

      Если  загрузка ОС  ни с   дискеты, ни  с жесткого  диска не

уадется,  то  управление  передается  Бейсику,  прошитому  в ПЗУ

вызовом Int 18h.

      Примечание: Это  прерывание не эквивалентно  нажатию клавиш

Ctrl+Alt+Del.  Оно  является  лишь  последним  шагом  в  цепочке

действий, вызываемых по нажатию  этой комбинации клавиш, поэтому

прямой вызов  int 19h из  прикладной программы может  привести к

зависанию  ПЭВМ.  Корректная  перезгрузка  системы  из программы

состоит  в  передаче  управления  по  адресу  F000h:FFF0h. Таким

образом  Вы можете  произвести  как  "холодную", так  и "теплую"

перезагрузку системы.

      Холодная  перезагрузка эквивалентна  загрузке по  включению

ПЭВМ, теплая - перезагрузке по нажатию Ctrl+Alt+Del и отличается

от холодной  пропуском теста ОЗУ. Для  выполнения теплой переза-

грузки до  передачи управления на  F000h:FFF0h нужно заслать  по

адресу 00472h слово 1234h.

      См. также: Int 18h

                 Область данных в ПЗУ

                            - 115 -

             E2.11. Int 1Ah - Обслуживание таймераF

      Int  1Ah  используется  для  чтения  и установки системного

таймера  и  часов  реального  времени  (RTC).  Для этого имеются

следующие функции:

Функция  Назначение

тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

  00h     Чтение системного таймера

  01h     Установка системного таймера

  02h     Чтение текущего времени RTC                     (AT)

  03h     Установка текущего времени RTC                  (AT)

  04h     Чтение текущего даты RTC                        (AT)

  05h     Установка текущего даты RTC                     (AT)

  06h     Задание времени побудки RTC                     (AT)

  07h     Сброс времени побудки RTC                       (AT)

  08h     Задание времени включения ПЭВМ         (Convertible)

  09h     Чтение параметров побудки     (Convertible, PS/2-30)

  0Ah     Чтение количества дней          (некоторые XT, PS/2)

  0Bh     Установка количества дней       (некоторые XT, PS/2)

  80h     Управление звукогенератором                   (PCjr)

тФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФАтФА

      Фн 00h и 01h доступны на всех  ПЭВМ; фн 02h - 07h - на всех

ПЭВМ, оснащенных часами реального времени,  т. е. на AT, XT-286,

PC  Convertible  и  PS/2.  Фн  08h  поддерживается  только на PC

Convertible, 09h - на PC Convertible  и PS/2 модель 30. Фн 0Ah и

0Bh - доступны на XT от 01/10/86 и PS/2. Наконец, фн 80h поддер-

живается только PCjr.

      E2.11.1. Фн 00h - Чтение системного таймераF

      Вход: AH = 00h

      Выход: CX = старшее слово счетчика таймера

             DX = младшее слово счетчика таймера

             AL = 1, если с момента включения ПЭВМ прошло 24 часа

                  0, в противном случае

      Описание: Возвращает текущее  содержимое системного таймера

и флаг его  переполнения по достижении суток.  AL=1, если прошло

24 часа с момента любого из трех событий:

      - включения ПЭВМ;

      - перезгрузки системы;

      - последнего чтения или установки таймера.

      Примечания:

      1.   Для   получения   текущего   времени  дня  пользуйтесь

следующими формулами:

      Часы = счетчик / 65543 (1007h); остаток = счетчик % 65543;

      Минуты = счетчик / 1092 (444h); остаток = остаток % 1092;

      Секунды = счетчик / 18.21; остаток = остаток % 18.21;

                            - 116 -

      Сотые доли секунды = целая часть( остаток * 100 );

      2.  Системный  таймер   увеличивает  значение  счетчика  на

единицу  с  частотой  1193180  /  65536  =  18.21 раз в секунду.

Значения счетчика теряются при  выключении ПЭВМ или перезагрузке

системы.

      3.  Текущее значение  счетчика хранится  по адресу  0046Ch,

флаг переполнения - по адресу  00470h. После вызова этой фн флаг

переполнения сбрасывается.

      См. также: Int 1Ah, фн 01h

                 Область данных BIOS

      E2.11.2. Фн 01h - Установка системного таймераF

      Вход: AH = 01h

            CX = старшее слово счетчика таймера

            DX = младшее слово счетчика таймера

      Выход: нет

      Описание:  Задает  новое   содержимое  счетчика  системного

таймера.

      Примечания:

      1.  Для  преобразования  текущего  времени  дня  в значение

счетчика пользуйтесь следующей формулой:

Счетчик =  (Часы * 65543.33) +  (Минуты * 1092.38) +  (Секунды *

18.21) + (Сотые доли секунды * .182)

      2. См. примечания 2 - 3 к п. 2.11.1.

      См. также: Int 1Ah, фн 00h

                 Область данных BIOS

      E2.11.3. Фн 02h - Чтение текущего времени RTC (AT)F

      Вход: AH = 02h

      Выход: CF = 1 - часы реального времени неисправны, иначе:

             CH = часы

             CL = минуты

             DH = секунды

             DL = 1 - летнее время

                  0 - календарное время

      Описание:  Считывает  текущее   время  из  часов  реального

времени   (RTC).   Часы,   минуты   и   секунды  возвращаются  в

двоично-десятичном   формате,  например   время  09:24:12  будет

возвращено в виде: CH=09h, CL=24h, DH=12h.

                            - 117 -

      Примечания:

      1.  Эта фн  доступна на  ПЭВМ, оснащенных  часами реального

времени,  а  именно:  AT,  XT-286,  PC  Convertible  и  PS/2. На

остальных машинах ее результат непредсказуем (включая содержимое

флага CF).

      2.  Тип времени  в DL  не возвращается  на AT, датированных

ранее  06/10/85.  Остальные  ПЭВМ  сообщают  в  DL,  является ли

текущее   время   календарным   или   летним   (на   час  вперед

календарного).

      3. Часы реального времени питаются от автономного источника

питания CMOS и продолжают идти даже при выключенной ПЭВМ.

      См. также: Int 1Ah, фн 03h

      E2.11.4. Фн 03h - Установка текущего времени RTC (AT)F

      Вход: AH = 03h

            CH = часы

            CL = минуты

            DH = секунды

            DL = 1 - летнее время

                 0 - календарное время

      Выход: нет

      Описание:  Засылает новое  текущее время  в часы  реального

времени   (RTC).    Часы,   минуты   и    секунды   задаются   в

двоично-десятичном формате, например  время 09:24:12 должно быть

задано в виде: CH=09h, CL=24h, DH=12h.

      Примечания:

      1.  Эта фн  доступна на  ПЭВМ, оснащенных  часами реального

времени,  а  именно:  AT,  XT-286,  PC  Convertible  и  PS/2. На

остальных машинах ее результат непредсказуем (включая содержимое

флага CF).

      2. Тип  времени в DL  не поддерживается на  PS/2 модель 30.

Остальные  ПЭВМ  извлекают  из  DL,  является  ли  текущее время

календарным или летним (на час вперед календарного).

      3. Часы реального времени питаются от автономного источника

питания CMOS и продолжают идти даже при выключенной ПЭВМ.

      См. также: Int 1Ah, фн 02h

                            - 118 -

      E2.11.5. Фн 04h - Чтение текущей даты RTC (AT)F

      Вход: AH = 04h

      Выход: CF = 1 - часы реального времени неисправны, иначе:

             CH = век (19 или 20)

             CL = год

             DH = месяц

             DL = день

      Описание: Считывает текущую дату из часов реального времени

(RTC).  Все  данные  возвращаются  в двоично-десятичном формате,

например 15 ноября  1990 г. будет возвращено в  виде: CX= 1990h,

DH=11h, DL=15h.

      Примечания:

      1.  Эта фн  доступна на  ПЭВМ, оснащенных  часами реального

времени,  а  именно:  AT,  XT-286,  PC  Convertible  и  PS/2. На

остальных машинах ее результат непредсказуем (включая содержимое

флага CF).

      2. Часы реального времени питаются от автономного источника

питания CMOS и продолжают идти даже при выключенной ПЭВМ.

      См. также: Int 1Ah, фн 05h

      E2.11.6. Фн 05h - Установка текущей даты RTC (AT)F

      Вход: AH = 05h

            CH = век (19 или 20)

            CL = год

            DH = месяц

            DL = день

      Выход: нет

      Описание:  Засылает  новую  текущую  дату  в часы реального

времени (RTC). Все данные задаются в двоично-десятичном формате,

например 15 ноября 1990 г. должно быть задано в виде: CX= 1990h,

DH=11h, DL=15h.

      Примечания:

      1.  Эта фн  доступна на  ПЭВМ, оснащенных  часами реального

времени,  а  именно:  AT,  XT-286,  PC  Convertible  и  PS/2. На

остальных машинах ее результат непредсказуем (включая содержимое

флага CF).

      2. Часы реального времени питаются от автономного источника

питания CMOS и продолжают идти даже при выключенной ПЭВМ.

      См. также: Int 1Ah, фн 04h

                            - 119 -

      E2.11.7. Фн 06h - Задание времени побудки RTC (AT)F

      Вход: AH = 06h

            CH = часы

            CL = минуты

            DH = секунды

      Выход: CF = 1, если часы реального времени неисправны

                  0, в противном случае

      Описание: Задает время побудки, т.  е. время дня, в которое

часы реального  времени вызовут Int 4Ah.  Часы, минуты и секунды

задаются в  двоично-десятичном формате, например  время 09:24:12

должно быть задано в виде: CH=09h, CL=24h, DH=12h.

      Примечания:

      1.  Эта фн  доступна на  ПЭВМ, оснащенных  часами реального

времени,  а  именно:  AT,  XT-286,  PC  Convertible  и  PS/2. На

остальных машинах ее результат непредсказуем (включая содержимое

флага CF).

      2. ПЭВМ  генерирует Int 4Ah,  как только текущее  время RTC

совпадет с заданным временем побудки. Поэтому перед вызовом этой

фн программа должна установить свой обработчик Int 4Ah.

      3. Часы реального времени питаются от автономного источника

питания  CMOS  и  продолжают  идти  даже  при  выключенной ПЭВМ.

Поэтому  прерывание  побудки  будет  происходить  каждый  день в

заданное время до тех пор, пока не будет вызвана фн 07h.

      4. В  каждый момент времени может  быть активно только одно

время побудки.

      См. также: Int 1Ah, фн 07h

                 Int 1Ah, фн 09h

                 Int 4Ah

      E2.11.8. Фн 07h - Сброс времени побудки RTC (AT)F

      Вход: AH = 07h

      Выход: нет

      Описание: Сбрасывает запрос на побудку, заданный фн 06h, т.

е. отменяет вызов Int 4Ah.

      Примечания:

      1.  Эта фн  доступна на  ПЭВМ, оснащенных  часами реального

времени,  а  именно:  AT,  XT-286,  PC  Convertible  и  PS/2. На

остальных машинах ее результат непредсказуем (включая содержимое

флага CF).

      2. Часы реального времени питаются от автономного источника

                            - 120 -

питания  CMOS  и  продолжают  идти  даже  при  выключенной ПЭВМ.

Поэтому  прерывание  побудки  будет  происходить  каждый  день в

заданное время до тех пор, пока не будет вызвана фн 07h.

      См. также: Int 1Ah, фн 06h

                 Int 4Ah

      2.11.9. Фн 08h - Задание времени включения ПЭВМ

             (Convertible)F

      Вход: AH = 08h

            CH = часы

            CL = минуты

            DH = секунды

      Выход: CF = 1, если часы реального времени неисправны

                     или время включения уже задано;

                  0, в противном случае

      Описание:  Задает  время,   в  которое  ПЭВМ  автоматически

включится. Часы, минуты и  секунды задаются в двоично-десятичном

формате,  например время  09:24:12  должно  быть задано  в виде:

CH=09h, CL=24h, DH=12h.

      Примечания:

      1. Эта  фн поддерживается только  на PC Convertible.  AT от

06/10/85  и позже,  XT-286 и  PS/2 возвращают  CF=1, указывая на

ошибочный  запрос.  Остальные  ПЭВМ  возвращают  непредсказуемые

результаты, включая содержимое флага CF.

      2.   При  достижении   RTC  заданного   времени  происходит

автоматическое включение  ПЭВМ. Если ПЭВМ уже  была включена, то

генерируется Int 4Ah.

      3. Часы реального времени питаются от автономного источника

питания  CMOS  и  продолжают  идти  даже  при  выключенной ПЭВМ.

Поэтому включение ПЭВМ или  прерывание Int 4Ah будут происходить

каждый день в  заданное время до тех пор,  пока не будет вызвана

фн 07h.

      См. также: Int 1Ah, фн 09h

                 Int 4Ah

                            - 121 -

      2.11.10. Фн 09h - Чтение параметров побудки

               (Convertible, PS/2-30)F

      Вход: AH = 09h

      Выход: CF = 1 - часы реального времени неисправны, иначе:

             CH = часы

             CL = минуты

             DH = секунды

             DL = состояние побудки:

                  0 - побудка не задана;

                  1 - задана побудка без включения ПЭВМ;

                  2 - задано время включения ПЭВМ.

      Описание:  Возвращает  параметры   времени  побудки.  Время

возвращается в двоично-десятичном коде.

      Примечания:

      1. Эта  фн поддерживается только  на PC Convertible  и PS/2

модель  30. AT  от 06/10/85  и позже,  XT-286 и  PS/2 возвращают

CF=1,  указывая на  ошибочный запрос.  Остальные ПЭВМ возвращают

непредсказуемые результаты, включая содержимое флага CF.

      2. PS/2  модель 30 не поддерживает  времени включения ПЭВМ,

но позволяет считать время побудки.

      См. также: Int 1Ah, фн 06h

                 Int 1Ah, фн 07h

                 Int 1Ah, фн 08h

                 Int 4Ah

      E2.11.11. Фн 0Ah - Чтение количества дней

                  (некоторые XT, PS/2)F

      Вход: AH = 0Ah

      Выход: CX = количество дней с 1 января 1980 г.

      Описание: Возвращает количество дней,  прошедших с 1 января

1980 г. на основе показаний системного таймера.

      Примечания:

      1. Эта фн поддерживается только на XT от 01/10/86 и позже и

PS/2. AT и XT-286 возвращают CF=1, указывая на ошибочный запрос.

Остальные  ПЭВМ возвращают  непредсказуемые результаты,  включая

содержимое флага CF.

      2.  Значения  счетчика  теряются  при  выключении  ПЭВМ или

перезагрузке  системы.  XT  от  01/10/86  и  позже, а также PS/2

модель 30 сбрасывают счетчик дней в нуль в процессе POST.

      См. также: Int 1Ah, фн 0Bh

                            - 122 -

      E2.11.12. Фн 0Bh - Установка количества дней

                  (некоторые XT, PS/2)F

      Вход: AH = 0Bh

            CX = количество дней с 1 января 1980 г.

      Выход: нет

      Описание: Задает количество дней,  прошедших с 1 января

1980 г.

      Примечания:

      1. Эта фн поддерживается только на XT от 01/10/86 и позже и

PS/2. AT от 06/10/85 и  позже и XT-286 возвращают CF=1, указывая

на ошибочный  запрос. Остальные ПЭВМ  возвращают непредсказуемые

результаты, включая содержимое флага CF.

      2.  Значения  счетчика  теряются  при  выключении  ПЭВМ или

перезагрузке  системы.  XT  от  01/10/86  и  позже, а также PS/2

модель 30 сбрасывают счетчик дней в нуль в процессе POST.

      См. также: Int 1Ah, фн 0Ah

      E2.11.13. Фн 80h - Управление звукогенератором (PCjr)F

      Вход: AH = 80h

            AL = Источник звука:

                 0 - канал 2 системного таймера 8253

                 1 - вход кассетного магнитофона

                 2 - линия "Audio In" в канале ввода-вывода

                 3 - микросхема звукогенератора TI76496

      Выход: нет

      Описание:   Задает  источник   звука  (линию   "Audio  Out"

модулятора  звука).   После  включения  ПЭВМ   источником  звука

является второй канал таймера.

      Примечания:

      1. Эта фн  поддерживается только на PCjr. AT  от 06/10/85 и

позже, XT-286,  PC Convertible и PS/2  возвращают CF=1, указывая

на ошибочный  запрос. Остальные ПЭВМ  возвращают непредсказуемые

результаты, включая содержимое флага CF.

Вместе с этим смотрят:

Обработка массивов
Обработка экономической информации средствами языка Pascal
Общая идеология POWER POINT
Общая характеристика MS-DOS