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