Программные средства базовой системы ввода-вывода
        1. Структура и функции БСВВ
        2. Прерывания БСВВ
        3. INT 0 - деление на ноль
        4. INT 1 - режим пошагового выполнения программы
        5. INT 2 - немаскируемое прерывание
        6. INT 3 - точка прекращения
        7. INT 4 - арифметическое переполнение
        8. INT 5 - печать экрана
        9. INT 8 - прерывание от системного таймера
        10. INT 9 - прерывание от клавиатуры
        11. INT 10H - функции дисплея
           11.1. Установка режима дисплея
           11.2. Установка типа курсора
           11.3. Установка позиции курсора.
           11.4. Получить позицию и размер курсора
           11.5. Получить позицию и состояние светового пера
           11.6. Установка активной страницы дисплея
           11.7. Скроллинг окна вверх
           11.8. Скроллинг окна вниз
           11.9. Чтение знака и атрибута
           11.10. Запись знака с атрибутом
           11.11. Запись знака без изменения атрибута
           11.12. Установка палитры
           11.13. Запись точки
           11.14. Чтение точки
           11.15. Вывод знаков в режиме телетайпа
           11.16. Получить режим дисплея
           11.17. Дополнительные средства управления цветом
           11.18. Установка знакогенератора
           11.19. Дополнительные функции поддержки адаптера EGA
           11.20. Вывод строки
           11.21. Загрузка знакогенератора LCD
           11.22. Получение физических параметров активного дисплея
           11.23. Получить или установить код типа дисплея
           11.24. Получить информацию о состоянии
           11.25. Сохранение и восстановление состояния дисплея.
        12. INT 11H - определение набора подключенного оборудования
        13. INT 12H - определение объема памяти
        14. INT 13H - функции дисковых устройств
           14.1. Сброс дисков
           14.2. Получить состояние
           14.3. Чтение секторов
           14.4. Запись секторов
           14.5. Проверка секторов
           14.6. Разметка дорожки
           14.7. Разметка дефектной дорожки
           14.8. Разметка диска, начиная с указанной дорожки.
           14.9. Получить параметры устройства
           14.10. Установка параметров жесткого диска
           14.11. Установка жесткого диска
           14.12. Альтернативный сброс диска
           14.13. Проверка готовности устройства
           14.14. Установка диска на дорожку 0
           14.15. Получить тип диска
           14.16. Получить состояние линии замены дискеты
           14.17. Установить тип устройства для разметки
           14.18. Установить тип носителя для разметки
           14.19. Парковать головки
           14.20. Разметка устройства
        15. INT 14H - функции асинхроннной связи
           15.1. Инициализация порта асинхронной связи.
           15.2. Передача байта
           15.3. Прием байта
           15.4. Получить состояние канала.
           15.5. Расширенная инициализация
           15.6. Расширенное управление портом связи
        16. Функции прерывания 15H
           16.1. Включение двигателя кассетного устройства
           16.2. Выключение двигателя кассетного устройства
           16.3. Чтение блоков с кассеты
           16.4. Запись блоков на кассету
           16.5. Периодические прерывания разметки диска.
           16.6.  Установка области для ошибок теста при включении питания
           16.7. Чтение и модификация системных параметров
           16.8. Ожидание внешнего события
           16.9. Запрос сброса системы
           16.10. Чтение состояния системы
           16.11. Включение или выключение питания внутреннего модема
           16.12. Перехват клавиатурных кодов
           16.13. Открыть устройство
           16.14. Закрыть устройство
           16.15. Прекратить программу устройства
           16.16. Ожидание события
           16.17. Поддержка координатных ручек
           16.18. Поддержка клавиши SysReq
           16.19. Задержка
           16.20. Перемещение блока памяти
           16.21. Определение объема дополнительной памяти
           16.22. Переключение процессора в привилегированный режим
           16.23. Сообщение о занятости устройства
           16.24. Сообщение о готовности устройства
           16.25. Получить параметры модели компьютера
           16.26. Получить сегмент расширения области данных БСВВ
           16.27. Интерфейс с устройствами типа "мышь"
           16.28. Разрешение или запрещение "сторожевого пса"
           16.29. Выбор программируемых режимов
        17. INT 16H - функции клавиатуры
           17.1. Чтение знака
           17.2. Проверка наличия знака
           17.3. Состояние регистров клавиатуры
           17.4. Установка частоты повторений.
           17.5. Управление звуковым сигналом
           17.6. Запись в буфер клавиатуры
           17.7. Расширенная функция чтения
           17.8. Расширенная проверка наличия знака
           17.9. Расширенное состояние регистров
        18. INT 17H - функции устройства печати
           18.1. Вывод знака
           18.2. Инициализация порта устройства печати.
           18.3. Получить состояние
         19. INT 19H - прерывание начальной загрузки
         20. INT 1AH - функции таймера и часов реального времени
           20.1. Чтение счетчика циклов таймера
           20.2. Установка счетчика циклов таймера
           20.3. Получить реальное время
           20.4. Установить реальное время
           20.5. Получить реальную дату
           20.6. Установить реальную дату
           20.7. Установить сигнал тревоги
           20.8. Сбросить сигнал тревоги.
           20.9. Установить время включения питания
           20.10. Получить время и состояние сигнала тревоги
           20.11. Чтение счетчика дней
           20.12. Установка счетчика дней
           20.13. Установить звуковой генератор.
        21. INT 1BH - прерывание прекращения
        22. INT 1CH - обработчик пользователя прерываний от таймера
        23. INT 1DH -
        24. INT 1EH - указатель таблицы параметров дискеты
        25. INT 1FH -
        26. INT 40H - функции дискетных устройств
        27. INT 41H - указатель таблицы параметров жестких дисков
        28. INT 46H - указатель таблицы параметров второго жесткого диска
        29. INT 4AH -
        30. INT 70H - прерывание от часов реального времени
        31. Область данных БСВВ
        32. Область сохранения параметров дисплея
           32.1. Первичная область сохранения параметров EGA и System/2
           32.2. Вторичная область сохранения параметров дисплея System/2
        33. Специальные средства и возможности
           33.1. Разделение прерываний
           33.2. Адаптеры в ПЗУ
           33.3. Совместимость функций дисплеев.
           33.4. Обеспечение мультизадачности
           33.5. Идентификация модели компьютера
           33.6. Клавиатурные коды

назад

                Программные средства базовой системы ввода-вывода

     Базовая система ввода-вывода (БСВВ) содержит минимальный набор программных
млдулей, необходимый для запуска и функционирования ПП ЭВМ и, прежде всего, для
обслуживания основных периферийных устройств. С системной точки зрения, средства
БСВВ располагаются между  аппаратурой и средствами АДОС. Применение их в
прикладных программах позволяет в некоторых случаях добиться значительной
эффективности, по сравнению с применением средств АДОС, и в то же время
несравненно безопаснее, чем прямое управление периферийными устройствами.

назад

        1. Структура и функции БСВВ

     Архитектура ПП ЭВМ на основе 16-битовых микропроцессоров Intel
8086 , использующих 20-битовый адрес, предусматривает выделение части
адресного пространства для блоков постоянной памяти (ПЗУ),
содержащих, в частности, модули БСВВ.  Фактически, основная память
таких компьютеров не превышает 640 Кбайт, а адресное пространство за
этой границей (сегменты A - F) адресует ПЗУ, либо блоки специальной
памяти адаптера дисплея.
     Весь 64-Кбайтовый сегмент F адресного пространства обычно
выделяется под ПЗУ БСВВ, где располагаются тесты самопроверки
компьютера, инициируемые включением питания или системным сбросом,
модули управления основными периферийными устройствами и загрузчик
операционной системы.  Некоторые ПП ЭВМ содержат в этом сегменте
также интерпретатор языка Бейсик.
     Сегменты C, D и Е адресного пространства резервируются под расширения
БСВВ и могут содержать блоки ПЗУ с программами управления дополнительными
устройствами. В частности, модули инициализации и драйвер жестких
(винчестерских) дисков обычно располагаются в блоке ПЗУ (объемом от 2 до 8
Кбайт) с сегментным адресом 0C800H. Блок ПЗУ с сегментным адресом 0C000H
часто используется для модулей инициализации и драйвера дисплея с расширенными
возможностиями (например для адаптера EGA или IBM LCD). В модуле инициализации
основного ПЗУ предусмотрены средства для распознавания и инициализации
расширений ПЗУ БСВВ.
     Сегменты A и B адресного пространства отводятся под память адаптера дисплея.
Объем установленных блоков памяти зааисит от типа дисалея и составляет от 2 до
128 Кбайт.
     АДОС не позволяет использовать ОЗУ с сегментыми адресами, большими 0A000H.
Если в компьюьере имеются такие блоки ОЗУ, то их память может использовться
только специально написанными программами.

назад

        2. Прерывания БСВВ

     Система прерываний ПП ЭВМ предусматривает три типа прерываний:
     - внутренние прерывания, происходящие при возниконовении
определенных состояний процессора;
     - внешние прерывания, возникающие по сигналам от специального контроллера
прерываний, связанного с периферийным оборудованием;
     - программыне прерывания, являющиеся результатом выполнения специальных
команд процессора (INT).
     Во всех случаях обработчик прерывания вызывается по значению указателя,
расположенному в младших адресах памяти; абсолютный адрес вектора получается
умножением на 4 номера прерывания (номера вектора). Внутренние прерывания
могут вызываться через векторы 0 - 7, для внешних прерываний выделены векторы
8 - 15 (установкой режима контроллера прерываний), программые прерывания могут
происходить через векторы 0 - 255. Таким образом, первый килобайт ОЗУ
выделяется для хранения адресов модулей обработки прерываний. Прерывания всех
типов выполняются совершенно аналогично, что позволяет, в частности, программно
моделировать аппаратные прерывания, используя отведенные для аппаратуры векторы.
     БСВВ устанавливает обработчики прерываний 0 - 31. На некоторых моделях
компьютеров БСВВ может инициировать и другие обработчики прерываний (с номерами
64, 65, 74, 112, возможно, и другие), в зависимости от установленного
оборудования, однако векторы 32 - 63 резервируются АДОС, и их значения будут
установлены при загрузке АДОС независимо от присоединенного оборудования.
     В табл. 1 перечислены обработчики прерываний, устанавливаемые БСВВ всех
или многих моделей ПП ЭВМ. Не следует считать, что в таблице перечислены
все обработчики прерываний БСВВ. При присоединении дополнительного оборудования
могут определяться и новые векторы прерываний. При отсутствии некоторого
оборудования могут отсутствовать и соответствующие обработчики прерываний.
Только векторы 0 - 31 устанавливаются БСВВ во всех случаях. Следует
также отметить, что некоторые обработчики прерываний БСВВ не выполняют
никаких действий, кроме возврата из прерывания (IRET), и становятся
способными выполнять свое назначение только после загрузки АДОС или даже
некоторых транзитных команд (системных программ) АДОС. При загрузке АДОС
могут переопределяться и другие векторы. Не следует считать, что какой-либо
вектор всегда установлен на адрес БСВВ.

     |------------------|-------|-----------------------------------------|
     | номер прерывания | адрес |            назначение                   |
     |                  |вектора|                                         |
     |------------------|-------|-----------------------------------------|
     |   0     (0)      | 0000H | деление на ноль                         |
     |   1     (1)      | 0004H | пошаговое выполнение инструкций         |
     |                  |       | процессора                              |
     |   2     (2)      | 0008H | немаскируемое прерывание: в некоторых   |
     |                  |       | моделях прерывание от схем контроля или |
     |                  |       | от арифметического сопроцессора         |
     |   3     (3)      | 000CH | точка прекращения                       |
     |   4     (4)      | 0010H | переполнение                            |
     |   5     (5)      | 0014H | печать экрана                           |
     |   6     (6)      | 0018H | резервируется                           |
     |   7     (7)      | 001CH | резервируется                           |
     |   8     (8)      | 0020H | прерывание от системного таймера        |
     |   9     (9)      | 0024H | прерывание от клавиатуры                |
     |  10    (0AH)     | 0028H | прерывания от подчиненного ПКП (IBM AT) |
     |                  |       | резервируется для других моделей        |
     |  11    (0BH)     | 002CH | в некоторых моделях прерывание от       |
     |                  |       | второго адаптера асинхронной связи      |
     |  12    (0CH)     | 0030H | прерывание от (первого) адаптера        |
     |                  |       | асинхронной связи                       |
     |  13    (0DH)     | 0034H | во многих моделях прерывание от жесткого|
     |                  |       | диска; прерывание от второго адаптера   |
     |                  |       | синхронной связи IBM AT                 |
     |  14    (0EH)     | 0038H | прерывание от контроллера дискеты       |
     |  15    (0FH)     | 003CH | в некоторых моделях прерывание от       |
     |                  |       | устройства параллельной печати; в IBM AT|
     |                  |       | прерывание от (первого) адаптера        |
     |                  |       | синхронной связи                        |
     |  16    (10H)     | 0040H | функции дисплея                         |
     |  17    (11H)     | 0044H | определение набора подключенного        |
     |                  |       | оборудования                            |
     |  18    (12H)     | 0048H | определение объема ОЗУ                  |
     |  19    (13H)     | 004CH | функции дисковых устройств              |
     |  20    (14H)     | 0050H | функции устройств асинхронной связи     |
     |  21    (15H)     | 0054H | функции кассетной ленты и функции       |
     |                  |       | дополнительного оборудования (зависят   |
     |                  |       | от модели компьютера)                   |
     |  22    (16H)     | 0058H | функции клавиатуры                      |
     |  23    (17H)     | 005CH | функции печати                          |
     |  24    (18H)     | 0060H | загрузка системы с альтернативного      |
     |                  |       | устройства или загрузка Бейсика ПЗУ     |
     |  25    (19H)     | 0064H | загрузка операционной системы с диска   |
     |  26    (1AH)     | 0068H | функции системного таймера; в некоторых |
     |                  |       | моделях - функции часов                 |
     |  27    (1BH)     | 006CH | прерывание, вызываемое пользователем с  |
     |                  |       | клавиатуры (ввод BREAK)                 |
     |  28    (1CH)     | 0070H | резерв для прикладного обработчика      |
     |                  |       | прерываний от системного таймера        |
     |  29    (1DH)     | 0074H | указатель на таблицу параметров экрана  |
     |  30    (1EH)     | 0078H | указателль на таблицу параметров        |
     |                  |       | дискетного устройства                   |
     |  31    (1FH)     | 007CH | указатель на таблицу изображений знаков |
     |                  |       | на экране                               |
     | 32-63 (20H-3FH)  |       | зарезервированы для ДОС                 |
     |  64    (40H)     | 0100H | функции дискетных устройств (в моделях  |
     |                  |       | с жесткими дисками)                     |
     |  65    (41H)     | 0104H | указатель таблицы параметров жестких    |
     |                  |       | дисков                                  |
     |  70    (46H)     | 0118H | в некоторых моделях (AT) указатель на   |
     |                  |       |таблицу параметров второго жесткого диска|
     |  74    (4AH)     | 0128H | в некоторых моделях прерывание от       |
     |                  |       | сигнала тревоги                         |
     |96-103 (60H-67H)  |       | резервируются для пользователей         |
     | 112    (70H)     | 01C0H | в некоторых моделях прерывание от       |
     |                  |       | часов реального времени                 |
     | 117    (75H)     | 01D4H | в некоторых моделях программный вызов   |
     |                  |       | немескируемого прерывания               |
     |128-240 (80H-F0H) |       | используются или зарезервированы для    |
     |                  |       | Бейсика                                 |
     |241-255 (F1H-FFH) |       | резервируются для пользователей         |
     |------------------|-------|-----------------------------------------|
         Таблица 1. Прерывания базовой системы ввода-вывода

назад

        3. INT 0 - деление на ноль

     Прерывание через вектор 0 генерируется процессором в ситуации, когда
результат выполнения инструкции DIV или IDIV не помещается в регистр или
ячейку памяти, а также при попытке деления на 0. БСВВ устанавливает пустой
обработчик прерывания 0, возвращающий управление следующей инструкции
процессора. При загрузке АДОС устанавливается другой обработчик INT 0. Он
выводит на экран сообщение "Деление на ноль" и возвращает управление АДОС.
Обычно АДОС прекращает выполнение прикладной программы, вызвавшей это
прерывание.

     Замечание: в компьютерах на основе микропроцессоров Intel 80286 и 80386
обработчик INT 0, аналогичный обработчику АДОС, устанавливается БСВВ, поскольку
эти микропроцессоры при прерывании 0 зыгружают в стек адрес инструкции DIV
(IDIV), а не адрес следующей инструкции.

назад

        4. INT 1 - режим пошагового выполнения программы

     Прерывание через вектор 1 генерируется после выполнения любой инструкции
в тех случаях, когда флаг TF процессора установлен в 1. Флаг TF сбрасывается
любым прерыванием, так что обработчик пошагового режима не будет сам выполняться
в этом режиме, но после выхода из него TF будет вновь установлен.
     БСВВ устанавливает пустой обработчик INT 1, так что установка флага TF
приведет лишь к (значительному) замедлению выполнения программы. АДОС не
изменяет и не использует INT 1, но это прерывание используется в большинстве
отладчиков,  в частности, в отладчике DEBUG АДОС.

назад

        5. INT 2 - немаскируемое прерывание

     Прерывание генерируется при выполнении некоторых, зависящих от модели
компьютера условий, обычно связанных с ошибками. Во многих моделях комптютеров
немаскируемое прерывание генерируется при сбоях памяти. В некоторых моделях
это прерывание используется для сигналов процессору от арифметического
сопроцессора. Обработчик прерывания 2, устанавливаемый БСВВ, зависит от модели
компьютера. В ПП ЭВМ "Искра-1030", где немаскируемое прерывание связано с
ошибками памяти, на экран выводится сообщение "НП", и процессор входит в
бесконечный цикл. В других компьютерах сообщение может содержать адрес
ячейки памяти, вызвавшей ошибку.
     АДОС не изменяет и не использует обработчик немаскируемого прерывания,
однако выполняемые под управлением АДОС программы, распознающие и использующие
арифметический сопроцессор, могут устанавливать собственные обработчики INT 2
для его поддержки.
     Прерывание 2 - единственное прерывание, которое нельзя замаскировать
очисткой флага IF процессора (инструкцией CLI). Во многих компьюьерах,
предусмотрен специальный порт (в "Искра-1030" порт 0A0H) для маскирования
этого прерывания.

     Замечания: 1. В PC jr немаскируемое прерывание присоединено к прерыванию
от клавиатуры.
     2. В System/2, исключая модель 30, немаскируемое прерывание выдает на экран
один из четырех кодов ошибки:
     110 - сбой памяти на системной плате;
     111 - активна проверка канала ввода-вывода (предполагается наличие
памяти в канале);
     112 - тайм-аут сторожа (Watchdog) - обнаружено прерывание от некоторого
таймера, мешающее работе системы;
     113 - тайм-аут шины НДП - некоторое устройство пытается захватить шину
данных больше чем на 7.8 мксек.
     3. В PC Convertible немаскируемое прерывание присоединено к прерываниям от
клавиатуры, дискетных устройств, часов, и вызывается проверкой канала
ввода-вывода.
     4. В системах с сопроцессором 8087 ошибка сопроцессора вызывает
немаскируемое прерывание.
     В системах с сопроцессором 80287 или 80387 ошибка сопроцессора
вызывает прерывание через линию IRQ 13; обработчик этого прерывания для
совместимости вызывает прерывание 2.
     5. Если пользователь хочет обрабытывать немаскируемые прерывания
от сопроцессора, то он должен обрабатывать и другие ошибки. В частности,
если при выполнении oьработчика немаскируемого прерывания происходит
ошибка немаскируемого прерывания, то управление должно быть передано
системному обработчику INT 2.

назад

        6. INT 3 - точка прекращения

     Для вызова прерывания 3 предусмотрена специальная инструкция процессора
INT 3, отличающаяся от других инструкций INT тем, что она имеет длину один байт.
Это позволяет многим отладчикам (в частности, DEBUG) использовать прерывание 3
для установки точки прекращения программы. Отладчик заменяет байт инструкции
в точке прекращения байтом инструкции INT 3 и восстанавливает его при
достижении точки прекращения.
     БСВВ устанавливает пустой обработчик INT 3, который не заменяется и не
используется АДОС.

назад

        7. INT 4 - арифметическое переполнение

     Прерывание через вектор 4 вызывается специальной инструкцией INTO, если
при ее выполнении установлен в 1 флаг OF пройессора. Оно может быть также
вызвано обычной инструкцией прерывания (INT 4) независимо от состояния OF.
     БСВВ устанавливает пустой обработчик INT 4, который не заменяется и не
используется АДОС. Многие программы, в частности, компиляторы и программы,
ими генерируемые, устанавливают собственные обработчики INT 4, сигнализирующие
об арифметическом переполнении.

назад

        8. INT 5 - печать экрана

     Прерывание 5 устанавливается БСВВ ПП ЭВМ любой модели на выполнение
функции печати экрана. При выполнении этого прерывания, которое может быть
вызвано инструкцией INT 5 программы или нажатием специальной клавиши или
комбинации клавиш на клавиатуре компьютера, содержимое экрана выводится
на устройство печати LPT1.
     Вызов INT 5 не требует и не возвращает никакой информации в регистрах
процессора, но устанавливает код состояния печати экрана в байте памяти
с адресом 0000:0500H:
        00H - функция не вызвана или завершена;
        01H - функция выполняется;
        0FFH - обнаружена ошибка при выполнении функции (обычно, устройство
печати выключено).
     Функция печати экрана выполняется при разрешенных прерываниях, так что,
вообще говоря, состояние экрана может быть изменено во время печати. Позиция
курсора на экране сохраняется перед выполнением функции и восстанавливается
при ее завершении.
     Функция выполняется независимо от установленного режима дисплея (см.
функцию 0 INT 10H), но на печать выводится только содержимое текстового
экрана. В графических режимах области экрана, не содержащие изображений
символов, отображаюся пробелами.
     АДОС не заменяет обработчик прерывания 5, но команда АДОС GRAPHICS
устанавливает резидентным обработчик, позволяющий копировать графический
экран.

     Замечание: на PC Convertible обнаружение ошибки состояния функции
прекращает вывод на печать и выдает звуковой сигнал. Печать экрана
прекращается также по BREAK.

назад

        9. INT 8 - прерывание от системного таймера

     Через вектор 8 выполняется аппаратное прерывание (IRQ 0), активируемое
системным таймером 18.2 раза в секунду (примерно через 55 мсек). БСВВ
устанавливает обработчик прерывания, который:
     - инкрементирует счетчик прерываний от системного таймера;
     - декрементирует счетчик времени до выключения двигателя дискетных
устройств;
     - генерирует прерывание 1CH.
     Cчетчик прерываний от системного таймера хранится в формате длинного
целого (32 бита, младшее слово предшествует старшему) в ячейке памяти по
адресу 0000:046СH. Когда содержимое счетчика достигнет значения, соответствующего
24 часам, то оно сбрасывается в 0, а в байте с адресом 0000:0470 устанавливается
флаг этого события.
     Счетчик времени до выключения двигателя дискетных устройств устанавливается
в значение, обычно соответствующее двум секундам, после выполнения любой
операции доступа к дискете. Каждое прерывание от системного таймера
декрементирует счетчик до тех пор, пока он не сбросится в 0. В этот момент
двигатель дискетных устройств будет выключен. Счетчик времени до выключения
двигателя располагается в слове по адресу 0000:0440.
     Прерывание 1CH резервируется для прикладных программ, желающих использовать
системный таймер для своих целей.
     АДОС не заменяет обработчик прерывания 8.

     Замечание: Для PC Convertible этот обработчик прерываний вызывает модуль
пользователя через прерывание 4AH всякий раз, когда распознается прерывание
тревоги.

назад

        10. INT 9 - прерывание от клавиатуры

     Контроллер клавиатуры генерирует запрос на прерывание 9 (IRQ 1) всякий раз,
когда нажимается или отпускается какая-либо клавиша. Если какая-либо клавиша,
исключая некоторые регистровые клавиши, остается нажатой более 0.5 сек, то
контроллер выдает повторные прерывания, как бы по новому ее нажатию, каждые
0.1. сек. Контроллер содержит внутренний буфер, способный хранить информацию
o нескольких (обычно, о двадцати) клавиатурных действиях, при переполнении
внутреннего буфера информация теряется.
     БСВВ устанавливает вектор 9 на адрес обработчика клавиатурных прерываний,
который принимает и удаляет из внутреннего буфера клавиатуры код нажатия или
отпускания клавиши (скан-код) и преобразует его в код символа по следующим
правилам:
     1. Если нажата клавиша, которой соответствует какой-либо символ кода
ПП ЭВМ, то скан-код клавиши и код символа размещаются в буфере. Буфер
клавиатуры длиной 32 байта располагается в области памяти, начиная с адреса
0000:041EH, и представляет собой кольцевой буфер. Указатель конца буфера
(т.е. указатель свободной памяти в буфере) располагается в слове по адресу
0000:041CH. После приема знака указатель буфера увеличивается на 2 и, если
он начинает указывать за пределы буфера, то устанавливается на начало.
Вырабатываемый код символа зависит от состояния регистров
клавиатуры.
     2.  Если нажата нажата или отпущена регистровая клавиша, то в
буфер не заносится никакой информации, а изменяются байты состояния
регистров клавиатуры 0000:0417H и 0000:0418H.  Из регистровых клавиш
высший приоритет имеет клавиша Alt, затем Ctl и, наконец, клавиша
перехода на верхнмй регистр Shift.  Соответствующие состояния
устанавливаются только на время, пока нажата регистровая клавиша, и
сбрасываются при ее отпускании.  Остальные регистровые клавиши -
CapsLock, Num Lock, Scroll Lock - действуют как триггеры:  каждое
нажатие переключает соотвествующее состояние.  Регистр Shift
действует только на алфавитные клавиши, набор которых зависит от
текущей установки алфавита (состояния РУС/ЛАТ), инвертируя для них
смысл нажатой клавиши перехода на верхний регистр.  Регистр Num Lock
аналогично действует на клавиши цифровой клавиатуры, позволяя
вырабатывать цифровые коды без перехода на верхний регистр (обычно в
таком случае вырабатываются расширенные коды управления курсором -
см.  табл.  ??).
     3.  Последовательность нажатий цифровых клавиш в состоянии Alt
рассматривается как поступление десятичных цифр кода одного символа,
и сохраняется в драйвере.  При отпускании клавиши Alt остаток от
деления на 256 введенного числа помещается в буфер вместе со
скан-кодом 0.
     4.  Нажатие клавиши Del в состоянии Alt+Ctrl (т.е.  при
одновременно нажатых клавишах Alt и Ctrl) вызывает системный сброс:
флаг сброса - слово по адресу 0000:0472 - устанавливается в 1234H, и
управление передается на тесты самопроверки.  Поскольку флаг
клавиатурного сброса установлен, то при выполнении тестов обходятся
тесты ОЗУ.
      5. Нажатие клавиши Num lock в состоянии (т.е. вместе с) Ctrl приостанавливает
выполнение любой программы до нажатия какой-либо клавиши.
     6.  Нажатие клавиши Print Screen на верхнем регистре вызывает
прерывание 5, т.е.  вывод на печать копии экрана.
     7.  Нажатие клавиши Scroll Lock в состоянии Ctrl вызывает
прерывание 1BH (Break).
      8. Отпускание любой клавиши, кроме некоторых регистровых,
игнорируется.

     Замечания: здесь приведено описание работы обработчика клавиатурных
прерываний ПП ЭВМ "Искра-1030". Большая часть сказанного справедлива для
клавиатурных драйверов любой ПП ЭВМ. В частности, все, что не имеет отношения
к русскому алфавиту, справедливо для компьютеров IBM PC и IBM XT. Однако,
ввиду отсутствия международного стандарта на клавиатуры ПП ЭВМ, в некоторых
моделях нарушается соответствие между скан-кодами клавиш и кодами символов.
АДОС не использует это соответствие, обрабатывая только коды символов или
расширенные коды (см. табл.??? в п. ??), но для работы некоторых программ
(например, Бейсик-интерпретатора) такое соответствие может оказаться
необходимым.
      Для AT, PC Convertible, System/2 и некоторых моделей XT (БСВВ 1986 г.)
перед выполнением системного сброса вызывается функция (AH)=85H прерывания 15H,
чтобы информировать систему о подготовленном сбросе. Кроме того, клавиатурное
прерывание может вызывать прерывание 15H с (AX) = 9102H, чтобы сообщить
системе о наличии знака в буфере.
      В некоторых моделях компьютеров (включая перечисленные выше)
БСВВ обеспечивает возможность преобразования скан-кодов клавиш перед
размещением их в буфере. Для этого после приема каждого знака от клавиатуры
вызывается функция (AH) = 4FH прерывания 15H, позволяющая перекодировать
байт, принятый от клавиатуры (из порта 60H).

назад

        11. INT 10H - функции дисплея

     БСВВ предоставляет пользователю ряд функций для управления дисплеем.
Эти функции вызываются через прерывание 10H. Функции дмсплея перечислены
в табл. 2. Набор допустимых функий определяется типом дисплея и его
адаптера, но функции с номерами 0 - 15 поддерживаются любым адаптером,
допускающим графику.

        |---------|--------------------------------------------------|
        |  номер  |            функция                               |
        |---------|--------------------------------------------------|
        |  0 (00H)| установка режима дисплея                         |
        |  1 (01H)| установка типа курсора                           |
        |  2 (02H)| установка позиции курсора                        |
        |  3 (03H)| получить позицию и размер курсора                |
        |  4 (04H)| получить позицию и состояние светового пера      |
        |  5 (05H)| установка активной страницы дисплея              |
        |  6 (06H)| скроллинг окна вверх                             |
        |  7 (07H)| скроллинг окна вниз                              |
        |  8 (08H)| чтение знака с атрибктом                         |
        |  9 (09H)| запись знака с атрибутом                         |
        | 10 (0AH)| запись знака                                     |
        | 11 (0BH)| установка палитры                                |
        | 12 (0CH)| чтение точки                                     |
        | 13 (0DH)| запись точки                                     |
        | 14 (0EH)| вывод знака в режиме телетайпа                   |
        | 15 (0FH)| получить режим дисплея                           |
        | 16 (10H)| установка регистров палитры                      |
        | 17 (11H)| установка знакогенератора                        |
        | 18 (12H)| дополнительные функции поддержки EGA             |
        | 19 (13H)| вывод строки                                     |
        | 20 (14H)| загрузка фонтов LCD                              |
        | 21 (15H)| получить физические параметры активного дисплея  |
        | 26 (1AH)| получить или установить код типа дисплея         |
        | 27 (1BH)| получение информации о состоянии                 |
        | 28 (1CH)| сохранение и восстановление состояния дисплея    |
        |---------|--------------------------------------------------|
           Таблица 2. Функции БСВВ для управления дисплеем.

назад
     11.1. Установка режима дисплея

     Параметры: (AH) = 0,
                (AL) - режим дисплея
     Результатов нет.
     Вызов разрушает регистры AX, BP, SI, DI.

     Допустимые режимы наиболее распространенных в ПП ЭВМ дисплеев (адаптеров)
перечислены в табл.3.

|-------|-----------|------------|--------------|-----------|---------|
| режим |   тип     | разрешение |поддерживается|   цвет    | адрес   |
| (AL)  |           |            |  адаптерами  | знак/фон  | буфера  |
|-------|-----------|------------|--------------|-----------|---------|
|   0   | текстовый |   40*25    |все, кроме MDA|16 оттенков|  B8000  |
|   1   | текстовый |   40*25    |все, кроме MDA|   16/8    |  B8000  |
|   2   | текстовый |   80*25    |все, кроме MDA|16 оттенков|  B8000  |
|   3   | текстовый |   80*25    |все, кроме MDA|   16/8    |  B8000  |
|   4   |графический|  320*200   |все, кроме MDA|     4     |  B8000  |
|   5   |графический|  320*200   |все, кроме MDA| 4 оттенка |  B8000  |
|   6   |графический|  640*200   |все, кроме MDA|     2     |  B8000  |
|   7   | текстовый |   80*25    |     MDA      |    нет    |  B0000  |
|   8   |графический|  160*200   |     PCjr     |    16     |  B0000  |
|   9   |графический|  320*200   |     PCjr     |    16     |  B0000  |
|  10   |графический|  640*200   |     PCjr     |     4     |  B0000  |
|  11   |  резерв   |         внутренний режим EGA                    |
|  12   |  резерв   |         внутренний режим EGA                    |
|  13   |графический|  320*200   |   EGA,LCD    |    16     |  A0000  |
|  14   |графмческий|  640*200   |   EGA,LCD    |    16     |  A0000  |
|  15   |графический|  640*350   |   EGA,LCD    |    нет    |  A0000  |
|  16   |графический|  640*350   |     LCD      |    16     |  A0000  |
|  17   |графический|  640*480   |     LCD      |     2     |  A0000  |
|  18   |графический|  640*480   |     LCD      |    16     |  A0000  |
|  19   |графический|  320*200   |     LCD      |   256     |  A0000  |
|-------|-----------|------------|--------------|-----------|---------|
              Таблица 3. Режимы адаптеров дисплея

     Режимы дисплея подразделяются на текстовые и графические. В текстовых
режимах буфер дисплея содержит коды символов ПП ЭВМ, интерпретируемые
знакогенератором, а также байты атрибутов, определяющие цвет и другие
харатеристики изображений знаков (мерцание, интенсивность, иногда,
подчеркивание). В текстовых режимах экран рассматривается как 25 строк
текста по 40 или 80 знаков в строке.
     В графических режимах возможен доступ к отдельным точкам (точнее,
элементам изображения) экрана. Экран рассиатривается как 200 (или 350)
линий по 320 или 640 точек на каждой из них. Буфер дисплея содержит
атрибут каждого элемента изображения. Вывод текстовой информации в графических
режимах поддерживается специальными модулями БСВВ.
     Большинство используемых в ПП ЭВМ адаптеров дисплея совместимо с
каким-либо адаптером семейства компьютеров IBM PC. Так адаптер, используемый
в ПП ЭВМ "Искра-1030", с точки зрения программиста является копией адаптера
CGA IBM PC. В табл. 3 приведены режимы работы следующих адаптеров:
     CGA - адаптер цветового графического дисплея IBM (наиболее распространен
           в ПП ЭВМ);
     MDA - адаптер черно-белого дисплея IBM;
     EGA - расширенный адаптер цветового графического дисплея;
     PCjr - специальный адаптер IBM цветового графического дисплея для
          малых моделей компьютеров;
     LCD - адаптер IBM для System/2.
     В адаптере дисплея "Искра-1030" (как и в адаптере CGA) имеется
специальный порт управления режимом (3D8H). Запись байта в этот порт
режим экрана. Табл. 4 показывает кодировку байта управления режимом.

   |-------|-------------------------------|-------------------------|
   | режим |       биты порта 3D8H         |                         |
   |       | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 |  x - неиспользуемый бит |
   |-------|---|---|---|---|---|---|---|---|  b - бит мерцания:      |
   |   0   | x | x | b | 0 | c | 1 | 0 | 0 |    0 - выключено,       |
   |   1   | x | x | b | 0 | c | 0 | 0 | 0 |    1 - включено.        |
   |   2   | x | x | b | 0 | c | 1 | 0 | 1 |  c - бит видимости:     |
   |   3   | x | x | b | 0 | c | 0 | 0 | 1 |    0 - изображение не   |
   |   4   | x | x | b | 0 | c | 1 | 1 | x |      выводится на экран,|
   |   5   | x | x | b | 0 | c | x | x | x |    1 - изображение      |
   |   6   | x | x | b | 1 | c | x | x | x |      выводится на экран |
   |-------|---|---|---|---|---|---|---|---|-------------------------|
                Таблица 4. Кодировка битов порта управления
                             режимом дисплея CGA

     Режимы 0, 2 и 5 аналогичны режимам 1, 3 и 4, за исключением того, что
в первых подавляется цвет. Фактически, подавление цвета возможно только
в дисплеях определенного типа (так называемых, составных мониторах); в
наиболее распространенных мониторах (RGB), в которых каждый основной цвет
управляется своим сигналом, такое подавление невозможно, так что режим 1,
например, ничем не отличается от режима 0.
     При установке режима экран очищается даже в случае, когда режим не
изменяется. Вызов функции 0, однако, не лучший способ очистки экрана;
функция 6 или 7 работает несколько быстрее. Некоторые адаптеры (EGA,PCjr,
LCD) позволяют избежать очистки экрана при смене режима. Такой режим
кодируется единицей в старшем бите (AL).
     Отметим еще, что при изменении режима меняется и размер курсора, в
в частности, в графических режимах курсор не отображается на экране.
     При включении питания или системном сбросе устанавливается режим
дисплея, определяемый переключателями конфигурации (обычно режим 0),
АДОС при загрузке устанавливает режим 2. Текущая установка режима хранится
в области данных БСВВ, и может быть прочитана, однако предпочтительно
воспользоваться для получения режима функцией (AH)=15 INT 10H.

     Замечания: 1. EGA, PC jr, PC Convertible, System/2 модель 30.
Если бит 7 (AL) = 1, то буфер экрана не очищается при установке режима.
     2. EGA. Начальный режим (при включении питания) определяется
переключателями в  адаптере.
     3. PC Convertible. Начальный режим при работе с цветным монитором - 2,
с черно-белым - 7. Режим 7 используется как черно-белый для дисплея LCD (640*200)
или для MDA (640*350).
     4. System/2 модель 30. Начальный режим дисплея - 3. Для всех режимов, кроме
режима 19, инициализируются первые 16 регистров управления цветом; значения
остальных 240 регистров управления цветом не определены.
     5. System/2 (кроме модели 30). Начальный режим диспеля 3 (цветовой дисплей)
или 7 (черно-белый). Для всех режимов, кроме режима 19, инициализируются первые
64 регистра управления цветом; значения остальных 192 регистров управления
цветом не определены. О числе скан-линий в текстовых режимах - см. 11.19.

назад

     11.2. Установка типа курсора

     Параметры: (AH) = 1,
                (CH) - номер верхней линии курсора,
                (CL) - номер нижней линии курсора.
     Результатов нет.
     Вызов разрушает регистры AX, BP, SI, DI.

     Вывод текстовой информации на экран средствами БСВВ производится с позиции
курсора. В текстовых режимах положение и размер курсора фиксируются во
внутренних регистрах адаптера дисплея (аппаратный курсор), в графических
режимах - моделируются средствами БСВВ. При выводе знака курсор не
перемещается автоматически.
     Для установки размера курсора используется функция 1 INT 10H. Размер
и форма курсора определяются параметрами в четырех младших битах регистров
CH и CL. Строки знакоместа на экране нумеруются свеху вниз, начиная с 0,
и курсор представляет собой прямоугольник, состоящий из всех точек
указанных линий. Если (CL) < (CH), то курсор будет состоять из двух частей.
     Допустимые значения параметров CH и CL определяются типом адаптера и
размером знакоместа на экране: для CGA знакоместо составляется из 8 строк,
так что параметры не должны превышать 7, для MDA и EGA они не должны превышать
13. При включении питания или системном сбросе устанавливается размиер курсора:
     (CH) = 6 и (CL) = 7 для CGA и EGA в режиме, отличном от режима MDA,
     (CH) = 11 и (CL) = 12 для MDA и EGA в режиме MDA.
     Биты 5 и 6 (CH) в некоторых адаптерах можно использовать для указания
частоты мерцания курсора, в частности, можно с их помощью сделать курсор
невидимым. Однако, использование этого средства нельзя рекомендовать, поскольку
оно не будет работать на некоторых комптютерах. Проще сделать курсор невидимым,
установив его (функцией 2 - см. ниже) за пределами экрана.
     Функция 1 устанавливает размер курсора для всех страниц дисплея. Невозможно
установить различные курсоры для разных страниц. В графических режимах нет
аппаратного видимого курсора, и функция просто сообщает БСВВ размер курсора,
который будет использоваться, когда режим экрана станет текстовым.

     Замечание. System/2 модель 30. Перед записью в регистры адаптера
значение (CH) удваивается, а (CL) удваивается и инкрементируется.

назад

        11.3. Установка позиции курсора.

     Параметры: (AH) = 2,
                (BH) - номер страницы дисплея,
                (DH) - номер строки,
                (DL) - номер столбца.
     Результатов нет.
     Вызов разрушает регистры AX, BP, SI, DI.

     Функция устанавлиает позицию курсора на указанной странице дисплея.
Страница может быть активной, и тогда в текстовом режиме изображение курсора
переместится на экране, или неактивной. Для графических режимов номер страницы
должен быть равен 0. Допустимые номера страниц для текстовых режимов
приведены в 11.5. Корректность номера страницы не проверяется, и использование
неверного номера приводит к непредсказуемым результатам.
     Координаты курсора во всех режимах задаются в текстовых единицах. Строки
экрана нумеруются сверху вниз от 0 до 24, а столбцы - слева направо от 0 до
40 или 80. Допускается (DH)=25, такое указание выводит курсор за пределы
видимого экрана.
     В графических режимах вызов функции 2 сообщает БСВВ позицию, с которой
будет выведен следующий текстовый знак. Поскольку в этих режимах нет
аппаратного курсора, не будет никакого изменения изображения на экране.
Программы, использующие (видимый) курсор в графических режимах, моделируют
его изображение.

     |---------|----------|-----------|--------|--------|------------------|
     |  режим  | размер   | текстовый | размер |  число |      адаптер     |
     |         | экрана   |   размер  | знака  | страниц|                  |
     |---------|----------|-----------|--------|--------|------------------|
     |  0, 1   | 320*200  |  40*25    |  8*8   |   8    |кроме MDA и модели|
     |         |          |           |        |        |модели 30 System/2|
     |         | 320*350  |           |  8*14  |   8    | EGA, System/2    |
     |         |          |           |        |        | кроме модели 30  |
     |         | 320*400  |           |  8*16  |   8    |System/2 модель 30|
     |         | 360*400  |           |  9*16  |   8    | System/2 кроме   |
     |         |          |           |        |        | модели 30        |
     |---------|----------|-----------|--------|--------|------------------|
     |  2, 3   | 640*200  |  80*25    |  8*8   |   4    | PC-jr, CGA,      |
     |         |          |           |        |        | PC Convertible   |
     |         | 640*200  |           |  8*8   |   8    | EGA, System/2    |
     |         |          |           |        |        | кроме модели 30  |
     |         | 640*350  |           |  8*14  |   8    | EGA, System/2    |
     |         |          |           |        |        | кроме модели 30  |
     |         | 640*400  |           |  8*16  |   8    |System/2 модель 30|
     |         | 720*400  |           |  9*16  |   8    | System/2 кроме   |
     |         |          |           |        |        | модели 30        |
     |---------|----------|-----------|--------|--------|------------------|
     |  4, 5   | 320*200  |  40*25    |  8*8   |   1    |   кроме MDA      |
     |---------|----------|-----------|--------|--------|------------------|
     |    6    | 640*200  |  80*25    |  8*8   |   1    |    кроме MDA     |
     |---------|----------|-----------|--------|--------|------------------|
     |    7    | 720*350  |  80*25    |  9*14  |   1    | MDA, PC Convert. |
     |         | 720*350  |           |  9*14  |   8    | EGA, System/2    |
     |         |          |           |        |        | кроме модели 30  |
     |         | 720*400  |           |  9*16  |   8    | System/2 кроме   |
     |         |          |           |        |        | модели 30        |
     |         | 640*200  |           |   8*8  |   4    | PC Convertible   |
     |---------|----------|-----------|--------|--------|------------------|
     |    8    | 160*200  |  20*25    |   8*8  |   1    | PC-jr            |
     |---------|----------|-----------|--------|--------|------------------|
     |    9    | 160*200  |  40*25    |   8*8  |   1    | PC-jr            |
     |---------|----------|-----------|--------|--------|------------------|
     |   10    | 160*200  |  80*25    |   8*8  |   1    | PC-jr            |
     |---------|----------|-----------|--------|--------|------------------|
     |   13    | 320*200  |  40*25    |   8*8  |   8    | EGA, System/2    |
     |         |          |           |        |        | кроме модели 30  |
     |---------|----------|-----------|--------|--------|------------------|
     |   14    | 640*200  |  80*25    |   8*8  |   4    | EGA, System/2    |
     |         |          |           |        |        | кроме модели 30  |
     |---------|----------|-----------|--------|--------|------------------|
     | 15, 16  | 640*350  |  80*25    |  8*14  |   2    | EGA, System/2    |
     |         |          |           |        |        | кроме модели 30  |
     |---------|----------|-----------|--------|--------|------------------|
     |   17    | 640*480  |  80*30    |  8*16  |   1    |   System/2       |
     |---------|----------|-----------|--------|--------|------------------|
     |   18    | 640*480  |  80*30    |  8*16  |   1    | System/2 кроме   |
     |         |          |           |        |        | модели 30        |
     |---------|----------|-----------|--------|--------|------------------|
     |   19    | 320*200  |  40*25    |   8*8  |   1    |    System/2      |
     |---------|----------|-----------|--------|--------|------------------|
        Таблица 5. Аппаратные спецификации режимов дисплея

назад

        11.4. Получить позицию и размер курсора

     Параметры: (AH) = 3,
                (BH) - номер страницы дисплея.
     Результат: (CH) - номер верхней линии курсора,
                (CL) - номер нижней линии курсора,
                (DH) - номер строки,
                (DL) - номер столбца.
     Вызов разрушает регистры AX, BP, SI, DI.

     Функция возвращает размер и положение курсора в той же форме, которая
требуется для установки этих значений функциями 1 и 2. Страница, для
которой возвращается позиция курсора, может и не быть активной. Для
графических режимов номер страницы должен быть равен 0. Допустимые
номера страниц для текстовых режимов приведены в 11.5. Корректность
номера страницы не проверяется, и использование неверного номера приводит к
непредсказуемым результатам.

назад

        11.5. Получить позицию и состояние светового пера

     Параметры: (AH) = 4.
     Результат: (AH) - состояние светового пера:
                       0 - неактивно,
                       1 - активно, и
                (BX) - координата пера по горизонтали;
                (CH) - координата пера по вериткали (для режимов 15 - 18 - (CX));
                (DH) - номер строки;
                (DL) - номер столбца.
     Вызов разрушает регистры AX, BP, SI, DI. При (AH) = 0 содержимое регистров
BX, CX и DX не определено.

     Координаты светового пера возвращаются в двух формах: позиция знакоместа
(номер строки и номер столбца) и координаты на графическом экране. Графические
координаты неточны: вертикальная координата всегда четна, а горизонтальная
делится на 4 или на 8 в зависимости от режима экрана.
     Некоторые компьютеры возвращают (AH) = 0 как признак того, что световое
перо не установлено.

     Замечание. PC Convertible, System/2. Функция не поддержтвается; всегда
возвращается (AH) = 0; (BX), (CX), (DX) разрушается.

назад

        11.6. Установка активной страницы дисплея

     Параметры: (AH) = 5,
                (AL) - номер страницы.
     Результатов нет.
     Вызов разрушает регистры AX, BP, SI, DI.
     Номер страницы отсчитывается от нуля. Число страниц зависит от режима
дисплея и типа адаптера - см. табл. 5.

     Замечание. PC-jr. Поддерживаются четыре подфункции:
        (AL) = 80H - читать регистры страницы. Выход:
               (BL) - регистр страницы микропроцессора,
               (BH) - регистр страницы дисплея;
        (AL) = 81H - установить регистр страницы микропроцессора. Вход:
               (BL) - номер сттаницы;
        (AL) = 82H - установить регистр страницы дисплея. Вход:
               (BL) - номер страницы;
        (AL) = 83H - установить регистры страницы. Вход:
               (BL) - регистр страницы микропроцессора,
               (BH) - регистр страницы дисплея.

назад

        11.7. Скроллинг окна вверх

     Параметры: (AH) = 6,
                (AL) - величина сдвига,
                (BH) - атрибут заполнителя пустой строки,
                (CH) - номер строки левого верхнего угла окна,
                (CL) - номер столбца левого верхнего угла окна,
                (DH) - номер строки правого нижнего угла окна,
                (DL) - номер столбца правого нижнего угла окна.
     Результатов нет.
     Вызов разрушает регистры AX, BP, SI, DI.

     Все параметры задаются в текстовой форме даже для графических режимов.
Прямоугольное окно экрана, определенное координатами (CX) и (DX), перемещается
вверх на (AL) строк. Информация, выходящая за пределы экрана, теряется, а
освобождаемая область заполняется знаком пробела (код 20H) с атрибутом (BH).
В графических режимах область заполняется нулевыми кодами.  При (AL) = 0
окно очищается.
     Замечание: фактически координатами левого верхнего угла являются
min {(CH),(DH)} и min{(CL),(DL)}, а координатами верхнего правого угла -
max {(CH),(DH)} и max {(CL),(DL)}.

назад

        11.8. Скроллинг окна вниз

     Параметры: (AH) = 7,
                (AL) - величина сдвига,
                (BH) - атрибут заполнителя пустой строки,
                (CH) - номер строки левого верхнего угла окна,
                (CL) - номер столбца левого верхнего угла окна,
                (DH) - номер строки правого нижнего угла окна,
                (DL) - номер столбца правого нижнего угла окна.
     Результатов нет.
     Вызов разрушает регистры AX, BP, SI, DI.

     Функция совершенно аналогично функции (AL) = 6 скроллинга вверх.

назад
        11.9. Чтение знака и атрибута

     Параметры: (AH) = 8,
                (BH) - номер страницы дисплея.
     Результат: (AL) - код знака,
                (AH) - атрибут знака.
     Вызов разрушает регистры BP, SI, DI.

     Функция возвращает код и атрибут знака в позиции курсора на указанной
странице дисплея. Страница не обязана быть активной. Для графических
режимов необходимо (BH) = 0.
     В текстовых режимах дисплея в его буфере хранятся коды и атрибуты знаков,
а изображения знаков вырабатываются знакогенератором дисплея. Знакоместу
экрана соответствуют два смежных байта в памяти дисплея, первый из которых
содержит код знака, второй - его атрибут. Если n - номер строки, m - номер
стообца и p - номер страницы, то адрес кода знака в буфере дисплея CGA для
определяется формулами:
        для режимои 0 и 1       B8000H+2048*p+80*n+2*m;
        для режимов 2 и 3       B8000H+4096*p+160*n+2*m.
Атрибуты знака кодируются в следующем байте памяти:
        биты 2 - 0 - цвет знака: 000 - черный,
                                 001 - синий,
                                 010 - зеленый,
                                 011 - голубой,
                                 100 - красный,
                                 101 - оранжевый,
                                 110 - коричневый,
                                 111 - белый;
        бит 3 - бит интенсивности: 0 - нормальная интенсивность,
                                   1 - высокая интенсивность;
        биты 6 - 4 - цвет фона (прямоугольного окна, в котором изображается
                     знак); кодируется аналогично цвету знака;
        бит 7 - бит мерцания: 0 - нормальное изображение,
                              1 - мерцающее изображение.
     В цветовых текстовых режимах атрибут прямо используется для управления
изображением на экране; в режимах подавления цвета любой код, отличный от 000,
дает белый цвет (см., однако, замечание о типах дисплеев в п. 11.1).
     Другие адаптеры используют сходную кодировку байта атрибутов, но могут
допускать другое использование битов 3 и 7 и программируемый выбор набора
цветов знака и фона.
     В графических режимах используется совершенно другая кодировка информации
(см. 11.12); когда функция (AL) = 8 применяется в графических режимах, она
использует для распознавания знаков (знакоместо может и не содержать кода
никакого знака) таблицу изображений знаков. Изображения знаков с кодами 0 -
7FH хранятся в ПЗУ БСВВ; таблица изображений остальных знаков (80H - 0FFH)
указывается вектором 1FH. БСВВ не устанавливает этот вектор, точнее,
устанавлиает его на некоторый случайный адрес ПЗУ. Для использования
в графических режимах знаков с кодами 80H - 0FFH необходиима загрузка
специальной программы GRAFTABL, которая резидентно загружает таблицу изображений
дополнительных знаков и устанавливает вектор 1FH на ее начало.
     Если функция 8 не распознает графического изображения знака, то
возвращается (AL) = 0.

назад

        11.10. Запись знака с атрибутом

     Параметры: (AH) = 9,
                (AL) = код знака,
                (BH) - номер страницы дисплея,
                (BL) - атрибут знака,
                (CX) - счетчик повторений.
     Результатов нет.
     Вызов разрушает регистры AX, BP, SI, DI.

     Функция копирует знак и его атрибут в память дисплея. Если (BH) указывает
на активную страницу, то изображение знака немедленно появится на экране.
     Регистр CX указывает число повторений вывода знака. Следует отметить, что
для вывода одного знака нужно указать (CX) = 1; при (CX) = 0 выводится до
65536 знаков. Знаки выводятся в последовательные адреса, начиная с адреса,
соответствующего позиции курсора на странице. Позици курсора при выводе не
изменяется. Если при выводе в графическом режиме установить бит 7 BL
в единицу, то атрибут знака будет поразрядно складываться с текущим атрибутом
знакоместа экрана (инструкцией XOR).
     Для режима 19 в (BH) передается цвет фона.
     Вывод знака с одновременнным изменением позиции курсора выполняется
функцией 14.

назад

        11.11. Запись знака без изменения атрибута

     Параметры: (AH) = 10,
                (AL) = код знака,
                (BH) - номер страницы дисплея,
                (CX) - счетчик повторений.
     Результатов нет.
     Вызов разрушает регистры AX, BP, SI, DI.

     Функция аналогична предыдущей, но атрибуты знаков в памяти дисплея не
заменяются. Не рекомендуется пользоваться этой функцией в графических режимах.

назад

        11.12. Установка палитры

     Параметры: (AH) = 11,
                (BH) - код подфункции (0 или 1),
                (BL) - номер основного цвета или номер палитры.
     Результатов нет.
     Вызов разрушает регистры AX, BP, SI, DI.

     Подфункция (BH) = 0 применима для любого режима дисплея. В текстовых
режимах она устанавливает цвет бордюра экрана; (BL) может принимать любое
значение от 0 до 16. В графических режимах подфункция не только определяет
цвет бордюра, но также в режимах среднего разрешения (320*200) задает
основной цвет. Этому цвету соответствует в выбранной палитре (см. ниже)
код 0. В графических режимах высокого разрешения (где допускается только
два цвета) подфункция 0 устанавливает цвет фона и цвет бордюра.
     Подфункция (BH) = 1 используется для установки палитры (цветового набора)
в графических режимах. Для адаптера CGA допускается ее использование
только в режимах 4 и 5, для других адаптеров (EGA, PCjr) она может применяться
и в других режимах. В (BL) задается код палитры (0 или 1 для адаптера CGA).
     Каждая палитре состоит из четырех цветов. Для палитры 0 это:
        0 - основной цвет (устанавливаемый отдельно),
        1 - зеленый,
        2 - красный,
        3 - коричневый;
для палитры 1 -
        0 - основной цвет,
        1 - синий,
        2 - голубой,
        3 - белый.

     Замечание. EGA, System/2. Если функция выполняется вграфическом
режиме 640*400 и (BH) = 0, то устанавливается цвет фона.

назад

        11.13. Запись точки

     Параметры: (AH) = 12,
                (AL) - атрибут (цвет) точки,
                (CX) - позиция по горизонтали,
                (DH) - позиция по вертикали.
     Результатов нет.
     Вызов разрушает регистры AX, BP, SI, DI.

     Функция применима только в графических режимах.
     Атрибутом точки является код ее цвета: в режимах среднего разрешения
код цвета согласно выбранной палтире, в режимах высокого разрешения 0
обозначает белый (или основной) цвет, 1 - черный.
     Буфер графического дисплея заполнен атрибутами точек, причем первые
8 Кбайт соответствуют линиям сканирования экрана с четными номерами
(0,2,...,198), следующие 8 Кбайт - линиям с нечетными номерами. В режимах
среднего разрешения точке экрана соответствуют два бита буфера, в режимах
высокого разрешения - один бит. Позиция атрибута точки с горизонтальной
координатой m и вертикальной координатой m определяется следующим образом:
     - для режимов среднего разрешения - биты 2*(m mod 4) и 2*(m mod 4)+1
байта с адресом

                B8000H+8192*(n mod 2)+80*(n/2)+m/4

     - для режимов высокого разрешения - бит 7-(m mod 8) байта с адресом

                B8000H+8192*(n mod 2)+80*(n/2)+m/8

(деление здесь целочисленное, а mod обозначает отстаок от деления).
     Выполниние функции зависит от старшего бита (AL): если он равен 0,
то атрибут точки просто помещается в буфер дисплея, если же этот бит равен 1,
то выполняется поразрядное сложение (операцией XOR) атрибута с соответствующими
битами буфера дисплея.
     Замечание: для адаптеров, поддерживающих несколько графических страниц,
номер страницы указывается в (BH).

назад

        11.14. Чтение точки

     Параметры: (AH) = 13,
                (CX) - позиция по горизонтали,
                (DH) - позиция по вертикали.
     Результат: (AL) - атрибут (цвет) точки,
     Вызов разрушает регистры AX, BP, SI, DI.

     Функция применима только в графических режимах и возвращает атрибут точки
графического дисплея в младших битах (AL). Старшие биты (AL) сбрасываются в 0.
     Замечание: для адаптеров, поддерживающих несколько графических страниц,
номер страницы указывается в (BH).

назад

        11.15. Вывод знаков в режиме телетайпа

     Параметры: (AH) = 14,
                (AL) - знак для вывода,
                (BL) - атрибут знака (используется только в графических режимах).
     Результатов нет.

     Знак выводится в текущую позицию курсора на активной страницы и курсор
продвигается с учетом возможного перехода на новую строку и скроллинга при
достижении конца страницы.
     Знаки "возврат каретки" (0DH), "перевод строки" (0AH), "звонок" (07) и
"возврат на шаг" (08) обрабатываются особо и не появляются на экране.
     Замечания: в некоторых моделях компьюьера требуется указание номера
активной страницы в BH.

назад

        11.16. Получить режим дисплея

     Параметры: (AH) = 15.
     Результат: (AH) - ширина экрана в текстовом формате;
                (AL) - режим дисплея;
                (BH) - номер активной страницы.
     Вызов разрушает регистры BP, SI, DI.

     В графических режимах возвращается (BH) = 0.

назад

        11.17. Дополнительные средства управления цветом

     Четыре следующие подфункции применимы только для адаптеров EGA, PCjr
в System/2 (кроме модели 30).

     1. Установка регистра палитры.

     Параметры: (AX) = 1000H,
                (BL) - номер регистра,
                (BH) - значение для установки.
     Результатов нет.

     Каждый из 16 регистров управления палитрой может принимать одно из 64
значений. Биты (BH) кодируются следующим образом:
     бит 0 - голубая компонента нормальной интенсивности,
     бит 1 - зеленая компонента нормальной интенсивности,
     бит 2 - красная компонента нормальной интенсивности,
     бит 3 - голубая компонента меньшей интенсивности,
     бит 4 - зеленая компонента меньшей интенсивности,
     бит 5 - красная компонента меньшей интенсивности,
     биты 6 и 7 резервируются.
     Нормальный основной цвет получается установкой нормальной компоненты,
интенсивный основной цвет - установкой обеих коmпонент, но допускается любая
комбинация бит. Значения регистров управления палитрой определяют набор
используемых оттенков. Атрибут знака и фона используется как индекс регистра.
Так, адаптер EGA определяет следующие умолчания для значений регистрв управления
палитрой:

        |---------|---------|----------------------|
        | регистр |   код   |         цвет         |
        |---------|---------|----------------------|
        |    0    |   00H   | черный               |
        |    1    |   01H   | синий                |
        |    2    |   02H   | зеленый              |
        |    3    |   03H   | голубой              |
        |    4    |   04H   | красный              |
        |    5    |   05H   | оранжевый            |
        |    6    |   14H   | коричневый           |
        |    7    |   07H   | белый                |
        |    8    |   38H   | темно-серый          |
        |    9    |   39H   | светло-голубой       |
        |   10    |   3AH   | светло-зеленый       |
        |   11    |   3BH   | светло-синий         |
        |   12    |   3CH   | розовый              |
        |   13    |   3DH   | палевый              |
        |   14    |   0EH   | желтый               |
        |   15    |   3FH   | интенсивный белый    |
        |---------|---------|----------------------|
        Таблица 6. Умолчания для регистров управления
               палитрой адаптера EGA

     2. Установка цвета бордюра.

     Параметры: (AX) = 1001H,
                (BH) - значение для установки.
     Результатов нет.

     3. Установка регистров палитры и цвета бордюра.

     Параметры: (AX) = 1002H,
                (ES:DX) - указатель на 17-байтовый блок данных, первые 16
                       байтов которого содержат значения, посылаемые в регистры
                       палитры, а последний байт - цвет бордюра.
     Результатов нет.

     4. Выбор интенсивности или мерцания.

     Параметры: (AX) = 1003H,
                (BL) = 0 - разрешение интенсивности,
                (BL) = 1 - разрешение мерцания.

    Функция поддерживается для адаптеров, в которых интесивность цвета и
мерцание знаков управляются одним и тем же битом в регистре адаптера.

     Следующие функции применммы только в System/2 (исключая модель 30).

     5. Чтение регистра палитры.

     Параметры: (AX) = 1007H,
                (BL) - номер регистра палитры (0 - 15).
     Результат: (BH) - прочитанное значение.

     6. Чтение регистра бордюра.

     Параметры: (AX) = 1008H.
     Результат: (BH) - прочитанное значение.

     7. Чтение регистров палитры и бордюра.

     Параметры: (AX) = 1009H,
                (ES:DX) - указатель 17-байтовой области для результатов.
     Резульат: байты 0 - 15 области результатов - значения регистров
палитры;
               байт 16 - значение регистра бордюра.

     8. Установка регистра управления цветом.

     Параметры: (AX) = 1010H,
                (BX) - номер регистра,
                (DH) - значение красной компоненты,
                (CH) - значение зеленой компоненты,
                (CL) - значение голубой компоненты.
     Результатов нет.

     9. Установка блока регистров управления цветом.

     Параметры: (AX) = 1012H,
                (ES:DX) - указатель таблицы значений цветовых компонент;
                (BX) - номер первого из регистров управления цветом,
                (CX) - число устанавливаемых регистров.
     Результатов нет.
     Таблица значений содержит три байта для каждого из устанавлмваемых
регистров: значения красной, зеленой и голубой компонент цвета.

     10. Выбор режима управления цветом.

     Параметры: (AX) = 1013H,
                (BL) = 0,
                (BH) - режим:
         0 - устанавливается 4 блока по 64 регистра управления цветом;
         1 - устанавливается 16 блоков по 16 регистров управления цветом.
     Резульатов нет.
     Функция недопустима в режиме 19 дисплея.

     11. Выбор палитры.

     Параметры: (AX) = 1013H,
                (BL) = 1,
                (BH) - номер блока регистров управления цветом
(0 - 3 или 0 - 15 в зависимости от ранее выбранного режима).
     Резульаттов нет.

     Замечание. Функция (AH) = 0 устанавливает умолчания для первых
64 регистров управления цветом и 64-регистровые блоки. Значения
регистров в трех других блоках не определены.

     12. Чтение регистра управления цветом.

     Параметры: (AX) = 1015H,
                (BX) - номер регистра,
     Результаты:(DH) - значение красной компоненты,
                (CH) - значение зеленой компоненты,
                (CL) - значение голубой компоненты.

     13. Чтение блока регистров управления цветом.

     Параметры: (AX) = 1017H,
                (ES:DX) - указатель таблицы значений цветовых компонент;
                (BX) - номер первого из регистров управления цветом,
                (CX) - число регистров
     Результаты: таблица значений содержит три байта для каждого из
устанавлмваемых регистров: значения красной, зеленой и голубой компонент цвета.

     14. Чтение режима управления цветом.

     Параметры: (AX) = 101AH,
     Результаты: (BL) - режим управления цветом (0 или 1):
                 (BH) - номер активного блока регистров управления цветом.

     15. Суммирование компонент цвета в оттенки серого.

     Параметры: (AX) = 101BH,
                (BX) - номер первого из регистров управления цветом
                (CX) - число регистров.
     Результов нет.
     Функция читает компоненты цвета из указанных регистров, выполняет
взвешенное суммирование (30% красной компоненты, 59% зеленой и 11% голубой)
и записывает результат в эти регистры.

     Следующие функции применимы в модели 30 System/2:
     (AX) = 1000H, (BX) = 0712H - установка регистров управления цветом
соответственно восьми основным цветам; резульаттов нет;
     (AX) = 1003H - см. 11.17.4;
     (AX) = 1010H - см. 11.17.8;
     (AX) = 1012H - см. 11.17.9;
     (AX) = 1015H - см. 11.17.12;
     (AX) = 1017H - см. 11.17.13;
     (AX) = 101BH - см. 11.17.15.

назад

        11.18. Установка знакогенератора

     Следующие подфункции функции (AH) = 11H позволяют пользователю
определять изображения наборов знаков в текстовых и графмческих режимах
дисплея. Эти функции поддерживаются только адаптером EGA, и допкстимые значения
параметров определяются объемом буфера адаптера.
     Каждые 64 Кбайта буферной памяти позволяют определить один блок изображений
знаков. Таким образом, допускается от одной до четырех таблиц изображений,
каждая из которых хранит изображения 256 знаков. По умолчанию все блоки
инициируются одной и той же стандартной таблицей. В режимах 4 - 6 адаптер
использует изображения только первых 128 знаков, в других режимах - изображения
всех 256 знаков.

     1. Загрузка таблицы знакогенератора (текстовые режимы).

     Параметры: (AX) = 1100H,
                (ES:BP) - указатель на таблицу изображений знаков,
                (CX) - число знаков,
                (DX) - смещение в таблице знаков,
                (BL) - номер блока (таблицы знакогенератора),
                (BH) - длина изображения знака (байт).
    Результатов нет.

     2. Установка стандартной монохромной таблицы.

     Параметры: (AX) = 1101H,
                (BL) - номер блока (таблицы знакогенератора).
     Результатов нет. Загружается таблица фонтов 8*14.

     3. Установка стандартной цветовой таблицы.

     Параметры: (AX) = 1102H,
                (BL) - номер блока (таблицы знакогенератора).
     Результатов нет. Загружается таблица фонтов 8*8.

     4. Установка указателя блока для текстовых режимов.

     Параметры: (AX) = 1103H,
                (BL) - выбор блоков:
                     биты 3 - 2 - номер блока для использования в случае,
                                  когда бит 3 байта атрибутов знака равен 1,
                     биты 1 - 0 - номер блока для использования в случае,
                                  когда бит 3 байта атрибутов знака равен 0.
     Результатов нет.

     Вызовы функций 1100H - 1102H завершают установку (текстового) режима EGA.
позволяя, кроме того, определить таблицу пользователя изображений знаков.
В сочетании с функцией 1103H они позволяют использовать набор из 512 знаков.
     Если, например, пользователь хочет работать с набором знаков блока 3,
он может вызвать функцию 1103H с (BL) = 0FH. Будет установлен набор 3, а бит
3 байта атрибутов будет управлять интенсивностью знака (см. 16.11). Вообще,
если при вызове функции 1103H бит 2 (BL) равен биту 0 и бит 3 равен биту 1,
то бит 3 байта атрибутов будет управлять интенсивностью.
     Вызов функции 1103H, например, с (BL) = 0CH, позволяет определить набор
из 512 знаков. Если бит 3 байта атрибутов знака равен 0, то изображение
знака будет выбираться из блока 0, если ьит 3 равен 1 - то из блока 1.
Если используется набор из 512 знаков, то рекомендуется вызвать функцию
1000H с (BX) = 0712H для установки подходящей цветовой палитры.

     5. Подфункции (AX) = 1110H, 1111H и 1112H аналогичны соответственно
подфункциям (AX) = 1100H, 1101H и 1102H со следующими отличиями:
     - они могут использоваться только непосредственно после установки
режима дисплея (функцией 0);
     - при вызове должна быть активна страница 0;
     - при вызове переопределяется число байтов на знак, число строк экрана
и длина буфера и соответственно программируются регистры адаптера.
     Эти подфункции также применимы только в текстовых режимах.

     6. Загрузка дополнительной таблицы знаков графики.

     Параметры: (AX) = 1120H,
                (ES:BP) - указатель таюлицы изображений знаков с кодами
                         80H - 0FFH (в формате 8*8 точек).
     Результатов нет.

     7. Загрузка таблицы знакогенератора (графические режимы).

     Параметры: (AX) = 1121H,
                (ES:BP) - указатель таблицы изображений знаков,
                (CX) - длина изображения знака (байт),
                (BL) - число строк текстового экрана:
                     0 - число строк указано в (DL),
                     1 - 14 строк,
                     2 - 25 строк,
                     3 - 43 строки.
     Результатов нет.

     8. Установка стандартной таблицы знаков размера 8*14 точек.

     Параметры: (AX) = 1122H,
                (BL) - число строк текстового экрана (как в функции 1121H).
     Результатов нет.

     9. Установка стандартной таблицы знаков размера 8*8 точек.

     Параметры: (AX) = 1123H,
                (BL) - число строк текстового экрана (как в функции 1121H).
     Результатов нет.

     Таблица пользователя для подфункции 1121H должна определять все 256
знаков с кодами 00 - 0FFH, а указатель таблицы для подфункции 1120H должен
совпадать с вектором прерывания 1FH. Как и пожфункции 1110H - 1112H, данные
подфункции программируют регистры адаптера, и могут быть вызваны только
непосредственно после установки режима дисплея.

     10. Получить информацию о знакогенераторе.

     Параметры: (AX) = 1130H,
                (BH) - код возвращаемого указателя:
                       0 - указатель INT 1FH,
                       1 - указатель INT 44H,
                       2 - указтель стандартной таблицы формата 8*14 (ПЗУ),
                       3 - указатель стандартной таблицы формата 8*8 (ПЗУ),
                       4 - указатель вершины стандартной таблицы формата 8*8,
                       5 - указатель альтернативной таблицы формата 9*14 (ПЗУ).
     Результат: (CX) - длина изображения знака (байт),
                (DL) - число строк текстового экрана,
                (ES:BP) - указатель на таблицу изображений знаков.

     Следующие подфункции применимы в System/2 (исключая модель 30):
     подфункции (AX) = 1100H, 1101H, 1102H (см. 11.18.1 - 11.18.3);
     подфункции (AX) = 1120H, 1121H, 1122H,1123H (см. 11.18.6 - 11.18.9);

     11. Установка указателя блока для текстовых режимов.

     Параметры: (AX) = 1103H,
                (BL) - выбор блоков:
                     биты 4,1,0 - номер блока для использования в случае,
                                  когда бит 3 байта атрибутов знака равен 0,
                     биты 5,3,2 - номер блока для использования в случае,
                                  когда бит 3 байта атрибутов знака равен 1.
     Результатов нет.

     Вызовы функций 1100H - 1102H завершают установку (текстового) режима,
позволяя, кроме того, определить таблицу пользователя изображений знаков.
В сочетании с функцией 1103H они позволяют использовать набор из 512 знаков.
     Если, например, пользователь хочет работать с набором знаков блока 6,
он может вызвать функцию 1103H с (BL) = 03AH. Будет установлен набор 6, а бит
3 байта атрибутов будет управлять интенсивностью знака (см. 16.11). Вообще,
если при вызове функции 1103H бит 2 (BL) равен биту 0, бит 3 равен биту 1 и
бит 5 равен биту 4, то бит 3 байта атрибутов будет управлять интенсивностью.
     Вызов функции 1103H, например, с (BL) = 28H, позволяет определить набор
из 512 знаков. Если бит 3 байта атрибутов знака равен 0, то изображение
знака будет выбираться из блока 0, если бит 3 равен 1 - то из блока 6.
Если используется набор из 512 знаков, то рекомендуется вызвать функцию
1000H с (BX) = 0712H для установки подходящей цветовой палитры.

     12. Установка стандартной таблицы фонтов 8*16.

     Параметры: (AX) = 1104H,
                (BL) - число строк текстового экрана (как в функции 1121H).
                (BL) - номер блока (таблицы знакогенератора).
     Результатов нет. Загружается таблица фонтов 8*16.

     13. Подфункции (AX) = 1110H - 1112H и 1114H аналогичны соответственно
подфункциям (AX) = 1100H - 1102H и 1104H со следующими отличиями:
     - они могут использоваться только непосредственно после установки
режима дисплея (функцией 0);
     - при вызове должна быть активна страница 0;
     - при вызове переопределяется число байтов на знак, число строк экрана
и длина буфера и соответственно программируются регистры адаптера.
     Эти подфункции также применимы только в текстовых режимах.

     14. Установка стандартной таблицы фонтов 8*16.

     Параметры: (AX) = 1124H,
                (BL) - число строк текстового экрана (как в функции 1121H).
     Результатов нет. Загружается таблица фонтов 8*16.

     15. Получить информацию о знакогенераторе.

     Параметры: (AX) = 1130H,
                (BH) - код возвращаемого указателя:
                       0 - указатель INT 1FH,
                       1 - указатель INT 44H,
                       2 - указтель стандартной таблицы формата 8*14 (ПЗУ),
                       3 - указатель стандартной таблицы формата 8*8 (ПЗУ),
                       4 - указатель вершины стандартной таблицы формата 8*8,
                       5 - указатель альтернативной таблицы формата 9*14 (ПЗУ).
                       6 - указатель таблицы 8*16 ПЗУ
                       7 - указатель альтернативной таблицы 9*16.
     Результат: (CX) - длина изображения знака (байт),
                (DL) - число строк текстового экрана,
                (ES:BP) - указатель на таблицу изображений знаков.


     Следующие подфункции применимы в модели 30 System/2:
     (AX) = 1100H, 1102H, 1103H (см. 11.18.1, 11.18.3,11.8.4);
     (AX) = 1104H (см. 11.18.12);
     (AX) = 1120H, 1121H, 1123H (см. 11.18.6, 11.18.7, 11.18.9);
     (AX) = 1124, 1130H (см. 11.18.14 и 11.18.15).

     Замечания. System/2 модель 30. Функции 1101H, 1110H - 1114H, 1122H,
если вызываются, эквивалентны соответственно 1104H, 1100H - 1104H, 1124H.
Если в функции 1100H указано (BH) = 14, то 14-байтовые знаки расширяются
двумя пустыми последними строками до 16-байтовых. Для функции 1130H не
недопустимы значения (BH) = 5 или 7.

назад

        11.19. Дополнительные функции поддержки адаптера EGA

     Две следующие подфункции применимы только для адаптеров EGA и
в System/2 (кроме модели 30).

     1. Получить информацию об установке адаптера.

     Параметры: (AH) = 12H,
                (BL) = 10H.
     Результат: (BH) = 0 - установлен режим цветового адаптера (порты 3DxH),
                       1 - монохромный режим (порты 3BxH),
                (BL) - объем буфера:
                       0 - 64 Кбайта,
                       1 - 128 Кбайт,
                       2 - 192 Кбайта,
                       3 - 256 Кбайт,
                (CH) - биты адаптера (имеют специальное применение),
                (CL) - установка переключателей на плате адаптера.

     2. Установить альтернативный обработчик печати экрана.

     Параметры: (AH) = 12H,
                (BL) = 20H.
     Результатов нет.
     Данная функция предназначениа для установки обработчика прерывания 5
(печать экрана), корректно работающего при изменении числа текстовых строк
дисплея.

     Остальные подфункции даного раздела применимы только в System/2.

     3. Установить число скан-линий для текстового режима.

     Параметры: (AH) = 12H,
                (BL) = 30H,
                (AL) = 0 - 200 скан-линий,
                       1 - 350,
                       2 - 400.
     Результат: (AL) = 12H, как признак того, что функция поддерживается.
     Эффект функции проявится только после установки тектового режима.
Функция не поддерживается в модели 30.

     4. Разрешение или запрет загрузки регистров палитры при смене режима

     Параметры: (AH) = 12H,
                (BL) = 31H,
                (AL) = 0 - разрешениезагрузки регистров палитры,
                       1 - запрет.
     Результат: (AL) = 12H, как признак того, что функция поддерживается.
     Если загрузка запрещена, то при последующей замене режима EGA
останутся неищменными 16 регистров палитры, регистр бордюра и 256 регистров
цвета.

     5. Разрешение или запрет дисплея.

     Параметры: (AH) = 12H,
                (BL) = 32H,
                (AL) = 0 - разрешение изображения,
                       1 - запрет.
     Результат: (AL) = 12H, как признак того, что функция поддерживается.
     Разрешается или запрещается доступ активного дисплея к буферу регенерации
и к портам ввода-вывода.

     6. Разрешение или запрет суммирования интенсивностей цвета при смене режима

     Параметры: (AH) = 12H,
                (BL) = 33H,
                (AL) = 0 - разрешение суммирования,
                       1 - запрет.
     Результат: (AL) = 12H, как признак того, что функция поддерживается.
     Если суммирование разрешено, то оно будет выполняться при вызове функций
(AH) = 0 (установить режим дисплея) и (AH) = 10H (установить регистры
палитры).

     7. Разрешение или запрет курсора.

     Параметры: (AH) = 12H,
                (BL) = 34H,
                (AL) = 0 - разрешение курсора,
                       1 - запрет.
     Результат: (AL) = 12H, как признак того, что функция поддерживается.
     Если курсор разрешен, то размер курсора, переданный при выполнении
функции (AH) = 1, будет масштабироваться при смене режима. Разрешение
курсора устанавливается при включении питания. Функция не поддерживается
в модели 30.

     8. Функции переключения дисплея.

     Параметры: (AH) = 12H,
                (AL) - код подфункции:
                0 - запрет доступа к дисплею со стороны адаптера,
                1 - разрешение доступа к дисплею со стороны системы,
                2 - переключение в активное состояние,
                3 - переключение в пассивное состояние.
                (ES:DX) - указатель на 128-байтовую область сохранения
                          (не используется при (AL) = 1).
     Результат: (AL) = 12H, как признак того, что функция поддерживается.
     Четыре перечисленные подфункции позволяют избежать конфликтов
аппаратной несовместимости и перекрытия области данных БСВВ при
несооответствии между системным управлением дисплеем и адаптером дисплея.
Если доступ со стороны системы и со стороны адаптера
к портам ввода-вывода, к буферу дисплея и, возможно, к области данных БСВВ
не приводит к каким-либо конфликтам, то в нет необходимости в применении
этих функций. Перед их применением должна быть вызвана функция (AH) =12H,
(BL) = 32H, чтобы запретить изображение на экране.
     При конфликтах доступа к оборудованию или к памяти со стороны адаптера и
со стороны системной платы, приоритет имеет адаптер. Функции системы остаются
запрещенными до тех пор, пока дисплей разрешен для адаптера.
     Переключение дисплея выполняется следующим образом:
     1. Инициируется запрещение дисплея для адаптера (AL) = 0;
     2. Инициируется доступ к дисплею со стороны системной платы.
     Эти функции можно корректно вызвать лишь один раз. После их вызова
становятся доступными функции, переключающие дисплей в активное
((AL) = 2) и в пассивное ((AL) = 3) состояние. При переключении в активное
состояние запрещается выполнение текущей функции и вывод изображения.
Состояние дисплея сохраняется в указанной области. При переключении
в пассивное состояние информация из буфера сохранения используется
для восстановления состояния дисплея.

        9. Разрешение или запрет изображения.

     Параметры: (AH) = 12H,
                (BL) = 36H,
                (AL) = 1 - запретить вывод изображения,
                       0 - разрешить изображение.
     Результат: (AL) = 12H, как признак того, что функция поддерживается.
     Функция не поддерживается в модели 30 Systrm/2.

назад

        11.20. Вывод строки

     Параметры: (AH) = 13H,
                (AL) - код подфункции:
                       0 - вывод с атрибутом (BL) без перемещения курсора,
                       1 - вывод с атрибутом (BL) с перемещением курсора,
                       2 - вывод с указанными атрибутами без перемещения
                           курсора,
                       3 - вывод с указанными атрибутами и перемещением
                           курсора;
                (BH) - номер страницы дисплея,
                (BL) - атрибут для вывода знаков (при (AL) = 0 или 1),
                (CX) - длина строки знаков (байт),
                (DH) - номер строки для первого знака,
                (DL) - номер столбца для первого знака,
                (ES:BP) - указатель строки знаков.
     Результатов нет.

     Для подфункций 2 и 3 атрибут каждого знака следует за знаком в строке.
Подфункции 0 и 2 не изменяют позиции курсора, подфункции 1 и 3 устанавливают
курсор в за последний выведенный знак. Подобно функции 14, данная функция
особым образом обрабатывает знаки "возврат каретки" (0DH), "перевод строки"
(0AH), "звонок" (07) и "возврат на шаг" (08); остальные знаки изображаются
на экране.
    Функция 13H поддерживается не во всех компьюьерах и ее поддержка зависит
не от типа дисплея, а от версии БСВВ.

назад

        11.21. Загрузка знакогенератора LCD

     Функции этого раздела поддерживаются только в PC Convertible.

     1. Загрузка фонтов пользователя.

     Параметры: (AX) = 1400H,
                (ES:DI) - указатель на первый знак в таблице пользователя
                        изображений знаков,
                (CX) - число изображений знаков в таблице (1 - 256),
                (DX) - смещение знака в области для знакогенератора (ОЗУ),
                (BL) = 0 - загружается основная таблица,
                       1 - загружается альтернативная таблица,
                       иначе - пустая функция;
                (BH) - длина изображения знака в байтах.
     Результатов нет.

     2.Загрузка системных фонтов из ПЗУ

     Параметры: (AX) = 1401H,
                (BL) = 0 - загружается основная таблица,
                       1 - загружается альтернативная таблица,
                       иначе - пустая функция;
     Результатов нет.

     3. Управление битом интенсивности LCD.

     Параметры: (AX) = 1402H,
                (BL) = 0 - игнорировать бит интенсивности,
                       1 - использовать как бит обратной контрастности,
                       2 - использовать как бит подчеркивания,
                       3 - использовать как бит выбора альтернативной
                           таблицы изображений,
                      иначе - пустая функция.

назад

        11.22. Получение физических параметров активного дисплея

     Следующая функция поддерживается только в PC Convertible:

     Параметры: (AH) = 15H,
     Результаты:(AX) - тип альтернативного адаптера:
                  0 - нет альтернативного адаптера,
                  5140 - LCD,
                  5153 - типа CGA,
                  5151 - типа монохромного адаптера;
                (ES:DI) - указывает на таблицу:
        слово 1 - номер модели дисплея;
              2 - число PEL по вертикали (на метр);
              3 - число PEL по горизонтали (на метр);
              4 - число PEL по вертикали,
              5 - число PEL по горизонтали,
              6 - расстояние между PEL по горизонтали (мм)
              7 - растояние между PEL по вертикали (мм).
     В PC Convertible определены типы дисплеев, перечисленные в табл. 7.

        |-----|-------------|------------|------------|------------|
        |слово| монохромный |    CGA     | LCD как CGA| LCD как    |
        |     |   дисплей   |            |            | монохромный|
        |-----|-------------|------------|------------|------------|
        |  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    |   01B8H    |     0      |
        |  7  |      0      |   0184H    |   019AH    |     0      |
        |-----|-------------|------------|------------|------------|
             Таблица 7. Типы дисплеев PC Convertible.

назад

        11.23. Получить или установить код типа дисплея

     Две следующие функции поддерживаются только в System/2.

     1. Получить код типа дисплея

     Параметры: (AX) = 1A00H.
     Результат: (AL) = 1AH, как признак того, что функция поддерживается,
                (BL) - код активного дисплея,
                (BH) - код альтернативного дисплея.

     Следующие коды дисплеев определены для System/2:
        0 - нет дисплея,
        1 - монохромный адаптер с 5151,
        2 - CGA с 5153/4,
        4 - EGA с 5153/4,
        5 - EGA с 5151,
        6 - система професстональной графики с 5175
        7 - аналог адаптера System/2 (кроме модели 30) c аналогичным
монохромным дисплеем;
        8 - аналог адаптера System/2 (кроме модели 30) c аналогичным
цветовым дисплеем;
       11 - аналог адаптера System/2 модели 30 c аналогичным
монохромным дисплеем;
       12 - аналог адаптера System/2 модели 30 c аналогичным
цветовым дисплеем;
       255 - неизвестный адаптер;
       остальные коды резервируются.

     2. Установить код типа дисплея

     Параметры: (AX) = 1A01H.
                (BL) - код активного дисплея,
                (BH) - код альтернативного дисплея.
     Результат: (AL) = 1AH, как признак того, что функция поддерживается,

назад

        11.24. Получить информацию о состоянии

     Следующая функция поддерживается только в System/2.

     Параметры: (AH) = 1BH,
                (BX) = 0,
                (ES:DI) - указатель буфера для результатов (40H байтов);
     Результат: (AL) = 1BH, как признак того, что функция поддерживается.

     Буфер (ES:DI) заполняется следующим образом:
     00H (слово) - смещение области статической информации;
     02H (слово) - сегмент области статической информации;
            Следующие поля устанавливаются динамически и отражают
            текуший режим дисплея:
     04H (байт)  - режим дисплея (см. функцию (AH) = 0);
     05H (слово) - число столбцов текстового режима;
     07H (слово) - длина буфера регенерации (байтов);
     09H (слово) - начальный адрес буфера регенерации;
     0BH (слова) - позиции курсора для восьми страниц (строка, столбец);
     1BH (слово) - тип (размер) курсора;
     1DH (байт)  - номер активной страницы;
     1EH (слово) - базовый адрес портов адаптера (3Bx - MDA, 3Dx - CGA);
     20H (байт)  - текущая установка регистра 3x8;
     21H (байт)  - текущая установка регистра 3x9;
     22H (байт)  - число текстовых строк на экране;
     23H (слово) - число скан-линий на знак;
     25H (байт)  - код активного дисплея;
     26H (байт)  - код альтернативного дисплея;
     27H (слово) - палитра, поддерживаемая для текущего режима дисплея;
     29H (слово) - страницы, поддерживаемые для текущего режима дисплея;
     2AH (байт)  - число скан-линий для активного режима:
                   0 - 200, 1 - 350, 2 - 400, 3 - 480, остальное - резерв;
     2BH (байт)  - блок первичного знака (см. функцию (AX) = 1103H);
     2CH (байт)  - блок вторичного знака (см. функцию (AX) = 1103H);
     2DH (байт)  - разное:
                   биты 7, 6 - резерв;
                   бит 5 = 0 - интерсивность фона,
                           1 - мерцание;
                   бит 4 = 1 - активность эмуляции курсора
                               (в модели 30 - всегда 0);
                   бит 3 = 1 - запрещен режим установки умолчания для палитры;
                   бит 2 = 1 - подключен монохромный дисплей;
                   бит 1 = 1 - активно суммирование цветовых интенсивностей;
                   бит 0 = 1 - активны все режимы дисплея
                               (в модели 30 - всегда 0);
     2EH (байты) - резерв;
     31H (байт)  - объем доступной памяти в буфере дисплея:
                   0 - 64K, 1 - 128K, 2 - 192K, 3 - 256K, остальное - резерв;
     32H (байт)  - сохраненная информация:
                   биты 7, 6 - резерв;
                   бит 5 = 1 - активно расширение DCC,
                   бит 4 = 1 - активно переопределение палитры,
                   бит 3 = 1 - активно переопределение графических фонтов;
                   бит 2 = 1 - активно переопределение текстовых фонтов;
                   бит 1 = 1 - активна динамическая область сохранения;
                   бит 0 = 1 - активен 512-байтовый набор знаков.
     33H (13 байт) - резерв.

     Область статической информации длиной 16 байтов заполнена следующим
образом (нулевое значение некоторого бита означает, что соответствующее
средство не поддерживается):
     00H - режимы дисплея:
           биты 7 - 0 - режимы 7 - 0;
     01H - режимы дисплея:
           биты 7 - 0 - режимы 15 - 8;
     02H - режимы дисплея:
           биты 3 - 0 - режимы 19 - 16,
           биты 7 - 4 - резерв;
     03H - 06H - резерв;
     07H - число скан-линий в текстовых режимах:
           бит 0 - 200,
           бит 1 - 350,
           бит 2 - 400,
           биты 3 - 7 - резерв;
     08H - блоки знака доступны в текстовых режимах
     09H - максимальное число активых блоков знаков в текстовых режимах
           (см. функцию (AH) = 11H);
     0AH - разное:
           бит 7 - страницы палирты (см. (AH) = 10H; для модели 30 - всегда 0),
           бит 6 - палитра (см. (AH) = 10H),
           бит 5 - палитра EGA (см. (AH) = 10H),
           бит 4 - эмуляция курсора (см. (AH) = 1),
           бит 3 - режим загрузки умолчания для палитры (см. (AH) = 12H),
           бит 2 - загрузка фонтов (см. (AH) = 11H),
           бит 1 - суммирование цветовых интенсивностей (см. (AH) = 10H и 12H),
           бит 0 - все режимы всех дисплеев (в модели 30 всегда 0);
     0BH - разное:
           биты 7 - 4 - резерв,
           бит 3 - DCC (см. (AH) = 1AH),
           бит 2 - управление интенсивностью и мерцанием фона (см. (AH) = 10H),
           бит 1 - сохранение и восстановление (см. (AH) = 1CH, в модели 30
                   всегда 0),
           бит 0 - световое перо (см. (AH) = 4);
     0CH - 0DH - резерв;
     0EH - функции сохранения:
                   биты 7, 6 - резерв;
                   бит 5 = 1 - расширение DCC (в модели 30 всегда 0),
                   бит 4 = 1 - переопределение палитры,
                   бит 3 = 1 - переопределение графических фонтов,
                   бит 2 = 1 - переопределение текстовых фонтов,
                   бит 1 = 1 - динамическая область сохранения,
                   бит 0 = 1 - 512-байтовый набор знаков;
     0FH - резерв.

назад

        11.25. Сохранение и восстановление состояния дисплея.

     Следующие функции поддерживаются только в System/2, исключая модель 30.

     1. Получить размер буфера для сохранения/восстановления.

     Параметры: (AX) = 1C00H,
                (CX) - код назначения буфера (см. ниже).
     Результат: (AL) = 1CH, как признак того, что функция поддерживается,
                (BX) - размер буфера ( в единицах по 64 байта).

     2. Сохранить состояние.

     Параметры: (AX) = 1C01H,
                (CX) - код назначения (см. ниже),
                (ES:BX) - указатель буфера для сохранения.
     Результат: (AL) = 1CH, как признак того, что функция поддерживается.

     3. Запрос сохраненного состояния.

     Параметры: (AX) = 1C02H,
                (CX) - код назначения (см. ниже),
                (ES:BX) - указатель буфера.
     Результат: (AL) = 1CH, как признак того, что функция поддерживается.
     Сохраненное состояние восстановлено.
     Код назначения (единичное значение бита указывает на сохранение/
восстановление соответствующих средств):
     биты 15 - 3 резервируются и должны быть нулевыми,
     бит 2 - динамическая область состояния (DAC) и регистры цвета,
     бит 1 - область данных БСВВ,
     бит 0 - аппаратное состояние.

     Замечание: при сохранении состояния оно изменяется; для продолжения
работы требуется выполнить его восстановление.

назад

        12. INT 11H - определение набора подключенного оборудования

     Прерывание 11H возвращает в регистре AX информацию оо оборудовании
компьюьера. Ту же информацию можно получить, прочитав слово с адресом
0000:0410H. Биты слова конфигурации оборудования кодируются следующим образом:
        биты  15 - 14 - число подключенных устройств печати ( 0 - 3);
        бит 13 (в некоторых моделях) - установлен внутренний модем;
        бит 12 (в некоторых моделях) - установлен адаптер игр;
        биты 11 - 9 - число адаптеров или портов данных асинхронной связи;
        бит 8 - не используется;
        биты 7 - 6 (только если бит 0 равен 1) - число дискетных устройств
                   (00 - 1, 01 - 2, 10 - 3, 11 - 4);
        биты 5 - 4 - режим экрана, устанавливаемый при инициализации БСВВ:
                   00 - резервируется,
                   01 - режим 1 (40*25, см. 11.1),
                   10 - режим 3 (80*25),
                   11 - режим 7 (80*25);
        биты 3 - 2 - резервируются (в некоторых моделях указывают объем памяти
                     на системной плате);
        бит 2 - установлено устройство типа "мышь";
        бит 1 - установлен арифметический сопроцессор;
        бит 0 - имеется хотя бы одно дискетное устройство, с которого
                возможна загрузка системы;
     Единичное значение бита указывает на установленное оборудование.

     Замечания: для определения числа установленных жестких дисков можно
использовать вызов функции 8 INT 13H.
     Наличие сопроцессора распознается только по установке соответствующего
переключателя на системной плате. Лучший способ проверить наличие сопроцессора -
попытаться выполнить его инструкцию и проверить результат.

назад

        13. INT 12H - определение объема памяти

     Прерывание 12H возвращает в регистре AX объем памяти в килобайтах. Ту же
информацию можно получить, прочитав слово с пдресом 0000:0413H. Независимо от
модели компьюьера, возвращается только объем системной памяти (до адреса
A000:0000); значение не может превосходить 640К. При определении объема
системной памяти БСВВ проверяет ее непрерывность и пригодность, но начальный
объем для проверки во многих компьюьерах определяется установкой переключателей
конфигурации на системной плате.
     Для определения объема дополнительной памяти служат функции 88H и 0C1H
прерывания 15H.

назад

        14. INT 13H - функции дисковых устройств

     БСВВ предоставляет ряд функций для работы с дискетами и с жесткими дисками.
Эти функции вызывваются через прерывание 13H; номер функции передается в (AH).
Большинство функций возвращает во флаге CF код завершения: (CF) = 0 - нормальное
завершение, (CF) = 1 - ошибка; в последнем случае в (AH) врзвращается код ошибки.
     Не рекомендуется  без необходимости использовать дисковые средства БСВВ
в прикладных программах, в особенности, по отношению к жестким дискам, поскольку
неверное их использование может разрушить всю информацию на носителе. Как правило,
для обслуживания дисков достаточно средств АДОС, использование INT 13H может
потребоваться лишь для нестандартных носителей или для обработки дискет,
защищенных от копирования.
     Дисковые функции БСВВ перечислены в табл. 8. Только функции 0 - 5 применимы
ко всем дискам, независимо от установленного контроллера и типа носителя. Как
правило, в регистре (DL) указывается номер устройства, при этом номера 0 - 7FH
отсылают к дискетным устройствам, номера 80H - 0FFH - к жестким дискам.
Корректность номера устройства проверяется при вызове каждой функции.
     В некоторых моделях компьютеров перед выполнением любой дискетной
функции, требующей включения двигателя, вызывается функция (AX) = 90FDH
прерывания 15H, информирующая систему, чтобы она могла выполнять другие
задачи во время разгона двигателя. Двигатели жестких дисков всегда включены.
     В некоторых моделях компьютеров при выполнении INT 13H БСВВ вызывает
функцию 90H прерывания 15H перед тем, как перейти к ожиданию аппаратного
прерывания от дискового устройства; вызов сообщает оппрационной системе,
что она должна ждать освобождения устройства. После обработки аппаратного
прерываний от диска вызывается функция 91H прерывания 15H, чтобы сообщить
о завершении джисковой операции. Вызовы функций 90H и 91H передают системе
тип диска (дискета, жесктий диск).

        |----------|--------------------------------------------|
        |  номер   |            функция                         |
        |----------|--------------------------------------------|
        |     0    |  сброс дисков                              |
        |     1    |  получить состояние                        |
        |     2    |  чтение секторов                           |
        |     3    |  запись секторов                           |
        |     4    |  проверка секторов                         |
        |     5    |  разметка дорожки                          |
        |     6    |  разметка дефектной дорожки                |
        |     7    |  разметка диска                            |
        |     8    |  получить параметры устройства             |
        |     9    |  установить параметры устройства           |
        |    10    |  резервируется для диагностики             |
        |    11    |  резервируется для диагностики             |
        |    12    |  установка                                 |
        |    13    |  альтернативный сброс диска                |
        |    14    |  резервируется для диагностики             |
        |    15    |  резервируется для диагностики             |
        |    16    |  проверка готовности устройства            |
        |    17    |  вывод диска на дорожку 0                  |
        |    18    |  резервируется для диагностики             |
        |    19    |  резервируется для диагностики             |
        |    20    |  резервируется для диагностики             |
        |    21    |  получить тип диска                        |
        |    22    |  состояние линии замены дискеты            |
        |    23    |  установить тип диска для разметки         |
        |    24    |  установить тип носителя для разметки      |
        |----------|--------------------------------------------|
                Таблица 8. Функции БСВВ для поддержки дисков

назад

        14.1. Сброс дисков

     Параметры: (AH) = 0,
                (AL) - номер устройства.
     Результат: (CF) = 0 - нормальное завершение,
                     = 1 - ошибка, и в AH ее код (см. табл. 7).

     Если (DL) < 80H, то сбрасываются только дискетные устройства, иначе -
все диски. В последнем случае в (AH) при ошибке возвращается состояние жесткого
диска; чтобы получить состояние дискеты, нужно прочитать байт с абсолютным
адресом 0000:0441H.
     Выполнение сброса состоит в сбросе контроллера, сбросе устройства,
выбранного контроллером (устройства, к которому было последнее обращение),
и в установке носителя на начальную дорожку. Сброс обысно вызывается после
ошибок выполнения других функций.

     Замечание: жесткие диски будут сбрасываться вызовом данной функции
лишь в том случае, если младшие 7 битов (DL) указывают номер жесткого
диска, фактически установленного в компьютере.

назад

        14.2. Получить состояние

     Параметры: (AH) = 1,
                (DL) - номер устройства.
     Результат: (AH) - состояние завершения последней дисковой операции,
                (CF) = 0 - состояние 0 (см. табл. 9)
                     = 1 - иначе.

     На результат оказывает влияние только старший бит (DL), определяющий
тип диска, но корректность номера устройства проверяется.
     Коды завершения дисковых функций БСВВ перечислены в табл. 9.

        |-------|------------------------------------|-----------|
        |  код  |            состояние               | тип диска |
        |-------|------------------------------------|-----------|
        |  00   | ошибки не распознаны               |  любой    |
        |  01   | неверный код функции               |  любой    |
        |  02   | не найден маркер адреса            |  любой    |
        |  03   | попытка нарушения защиты записи    |  любой    |
        |  04   | сектор не найден                   |  любой    |
        |  05   | ошибка сброса                      | жесткий   |
        |  06   | активность линии замены дискеты    | дискета   |
        |  07   | ошибка установки параметров диска  | жесткий   |
        |  08   | НДП не справляется с обменом       |  любой    |
        |  09   | попытка выйти за физический сегмент|  любой    |
        |       | при обмене через КНДП              |           |
        |  0A   | распознан флаг дефектного сектора  | жесткий   |
        |  0B   | распознан неверный номер цилиндра  | жесткий   |
        |  0C   | тип дискеты не распознан           | дискета   |
        |  0D   |неверное число секторов при разметке| жесткий   |
        |  0E   | распознан маркер управляющих данных| жесткий   |
        |  0F   | ошибка уровня управления КНДП      | жесткий   |
        |  10   | ошибка контрольной суммы данных    |  любой    |
        |  11   | исправленная ошибка контрольной    | жесткий   |
        |       | суммы данных                       |           |
        |  20   | общая неисправность контроллера    |  любой    |
        |  40   | ошибка поиска                      |  любой    |
        |  80   | устройство не готово               |  любой    |
        |  BB   | неопределенная ошибка              | жесткий   |
        |  CC   | ошибка записи                      | жесткий   |
        |  E0   | ошибка состояния контроллера       | жесткий   |
        |  FF   | ошибка получения состояния         | жесткий   |
        |-------|------------------------------------|-----------|
              Таблица 9. Коды завершения дисковых функций

     Замечание: состояние последней дискетной операции хранится в байте
памяти с адресом 0000:0441H, состояние последней операции с жестким диском -
в байте 0000:0474H.

назад

        14.3. Чтение секторов

     Параметры: (AH) = 2,
                (AL) - число секторов для чтения,
                (DL) - номер устройства,
                (DH) - номер головки,
                (CH) - номер дорожки,
                (CL) - номер сектора,
                (ES:BX) - адрес буфера.
     Результат: (CF) = 0 - нормальное выполнение,
                     = 1 - ошибка,
                (AH) - код завершения,
                (AL) - число фактически прочитанных секторов.

     Операция считывает данные указанного числа секторов в память. Значения
параметров, за исключением номера устройства, не проверяются. Для дискетных
устройств все запрашиваемые секторы должны располагаться на одной физической
дорожке дискеты, для жесткого диска такого ограничения нет.
     При обращении к жесткому диску (CH) содержит 8 младших бит номера
дорожки, два старших бита размещаются в битах 7 и 6 (CL).

     Замечание: указание (AL) = 0 приведет к чтению некоторого числа
секторов, определяемого контроллером.

назад

        14.4. Запись секторов

     Параметры: (AH) = 3,
                (AL) - число секторов для записи,
                (DL) - номер устройства,
                (DH) - номер головки,
                (CH) - номер дорожки,
                (CL) - номер сектора,
                (ES:BX) - адрес буфера.
     Результат: (CF) = 0 - нормальное выполнение,
                     = 1 - ошибка,
                (AH) - код завершения,
                (AL) - число фактически записанных секторов.

     Операция записывает  на носитель данные указанного числа секторов. Значения
параметров, за исключением номера устройства, не проверяются. Для дискетных
устройств все запрашиваемые секторы должны располагаться на одной физической
дорожке дискеты, для жесткого диска такого ограничения нет.
     При обращении к жесткому диску (CH) содержит 8 младших бит номера
дорожки, два старших бита размещаются в битах 7 и 6 (CL).

     Замечание: указание (AL) = 0 приведет к записи некоторого числа
секторов, определяемого контроллером.

назад

        14.5. Проверка секторов

     Параметры: (AH) = 4,
                (AL) - число секторов для проверки,
                (DL) - номер устройства,
                (DH) - номер головки,
                (CH) - номер дорожки,
                (CL) - номер сектора,
                (ES:BX) - адрес буфера
     Результат: (CF) = 0 - нормальное выполнение,
                     = 1 - ошибка,
                (AH) - код завершения,
                (AL) - число фактически обработанных секторов.

     Операция проверяет данные указанного числа секторов, выполняя
контрольное чтение. Данные не поступают в память компьюьера. Значения
параметров, за исключением номера устройства, не проверяются. Для дискетных
устройств все запрашиваемые секторы должны располагаться на одной физической
дорожке дискеты, для жесткого диска такого ограничения нет.
     При обращении к жесткому диску (CH) содержит 8 младших бит номера
дорожки, два старших бита размещаются в битах 7 и 6 (CL).

     Замечания: 1. Указание (AL) = 0 приведет к проверке некоторого числа
секторов, определяемого контроллером.
     2. ES:BX не требуется для многих контроллеров (AT, PC Convertible,
System/2).

назад

        14.6. Разметка дорожки

     Параметры: (AH) = 5,
                (AL) - число секторов на дорожке дискеты или
                       коэффициент чередования для жесткого диска,
                (CH) - номер цилиндра (для жесткго диска - 8 младших бит),
                (CL) - для жесткого диска в битах 6 - 7 старшие биты
                       номера цилиндра,
                (DL) - номер устройства,
                (DH) - номер головки,
                (ES:BX) - указатель буфера, содержащего информацию для
                          разметки (зависит от контроллера, см. ниже).
     Результат: (CF) = 0 - нормальное выполнение,
                (CF) = 1 - ошибка, и в AH ее код.

     Функция размечает одну дорожку дискеты или жесткого диска. Параметры,
за исключением номера устройства, не проверяются.
     Для дискеты ES:BX указывает на блок данных, содержащий четырехбайтовую
запись для каждого сектора, создаваемого на дорожке:
        байт 0 - номер цилиндра,
        байт 1 - номер головки,
        байт 2 - номер сектора,
        байт 3 - код размера сектора:
                0 - 128 байт,
                1 - 256 байт,
                2 - 512 байт,
                3 - 1024 байта.
     Для устройств, поддерживающих более одного формата дискеты, перед разметкой
необходимо вызвать функцию 17H или 18H прерывания 13H, иначе при разметке
будут использоваться максимальные параметры носителя, поддерживаемые устройством.
Некоторые компьюьеры не поддерживают этих функций; в этом случае перед разметкой
необходимо прямо изменить таблицу параметров БСВВ дискеты. Эта таблица адресуется
вектором прерывания 1EH. После разметки необходимо восстановить значения
параметров таблицы.
     Некоторые контроллеры (в частности, большинство контроллеров жестких
дисков) не позволяют произвольно нумеровать и располагать на дорожке секторы
диска. Для таких контроллеров в (AL) указывается коэффициент чередования,
определяющий физический порядок секторов на дорожке диска. Поле данных,
адресуемое ES:BX, в таких случаях либо не используется, либо (для жестких
дисков содержит другую информацию - см. ниже).
     Хотя контроллеры нумеруют секторы дискеты, начиная с 0, в БСВВ используется
нумерация с 1, так что стандартное поле для разметки девятисекторной дискеты
АДОС иммет вид:

                0 1 1 2 0 1 2 2 ... 0 1 9 2

     Для жестких дисков ES:BX указывает на 512-байтовое поле данных, первые байты
которого содержат информацию о разметке, а остальные игнорируются. Для каждого
сектора диска (в том порядке,  в каком они будут физически расположены на дорожке)
указывается:
        байт 0 = 00 - разметить как обычный сектор,
                 80H - разметить с флагом дефектного сектора;
        байт 1 - номер сектора.
     Некоторые контроллеры не пользуются этой информацией, используя только
коэффициент чередования в (AL) (см. также функцию 7).

    Замечание: в некоторых моделях компьюьеров функции разметки жестокго диска
не поддерживаются БСВВ; в этом случае вызов данной функции вернет код
завершения 01 (неверная функция).

назад

        14.7. Разметка дефектной дорожки

     Параметры: (AH) = 6,
                (AL) - коэффициент чередования для жесткого диска,
                (CH) - номер цилиндра (8 младших бит),
                (CL) - в битах 6 - 7 старшие биты номера цилиндра,
                (DL) - номер устройства,
                (DH) - номер головки,
     Результат: (CF) = 0 - нормальное выполнение,
                (CF) = 1 - ошибка, и в AH ее код.

     Функция размечает одну дорожку жесткого диска, отмечая все ее секторы
как дефектные. Параметры, за исключением номера устройства, не проверяются.

     Замечание: функция не поддерживается некоторыми контроллерами и БСВВ
некоторых компьютеров (см. функцию 5). Функция неприменима к дискетам.

назад

        14.8. Разметка диска, начиная с указанной дорожки.

     Параметры: (AH) = 7,
                (AL) - коэффициент чередования для жесткого диска,
                (CH) - начальный номер цилиндра (8 младших бит),
                (CL) - в битах 6 - 7 старшие биты номера цилиндра,
                (DL) - номер устройства,
                (DH) - начальный номер головки,
     Результат: (CF) = 0 - нормальное выполнение,
                (CF) = 1 - ошибка, и в AH ее код.

     Функция размечает жесткий диск, начиная с указанной дорожки. Параметры,
за исключением номера устройства, не проверяются.

     Замечание: функция не поддерживается многими контроллерами и БСВВ
некоторых компьютеров (см. функцию 5), в частности, в IBM AT и в System/2
вырабатывается код ошибки 01. Функция неприменима к дискетам.

назад

        14.9. Получить параметры устройства

     Параметры: (AH) = 8,
                (DL) - номер устройства.
     Результат: (CF) = 0 - нормальное выполнение,
                (ES:DI) - указатель на 11-байтовый блок параметров дискеты
                          (см. табл. 8), не используется для жестких дисков,
                (CH) - максимальный номер цилиндра (младшие 8 бит),
                (CL) - максимальное число секторов на дорожке в битах 5 - 0,
                       старшие биты максимального номера цилиндра в битах 6 - 7,
                (DH) - максимальный номер головки,
                (DL) - число жестких дисков, поддерживаемых контроллером, или
                       общее число дискетных устройств.
                (BH) = 0 (только для дискет),
                (BL) - тип дискетного устройства в битах 3 - 0:
                       001 - 360 Кбайт, 40 дорожек на стороне мини-дискеты,
                       010 - 1.2 Мбайта, 80 дорожек на стороне мини-дискеты,
                       011 - 720 Кбайт, 80 дорожек на стороне микродиска,
                       100 - 1.44 Мбайта, 80 дорожек на стороне микродиска.

     Для дискетных устройств функция поддерживается только некоторыми
компьютерами. При этом тип устройства в (BL) возвращается только в том
случае, если он известен компьюьеру (например, при использовании CMOS или
специальных переключателей конфигурации); в прочих случаях возвращается (BL) = 0.
     Вызов функции 8 возвращает максимальные параметры дискетных устройтсв,
независимо от установленного носителя. Для жестких дисков возвращаются
параметры установленных дисков (они должны быть одинаковыми для всех дисков,
подключенных к контроллеру). Структура таблицы параметров дискеты приведена в
п. 24, структура апараметров жесткого диска - в п. 27.

назад

        14.10. Установка параметров жесткого диска

     Параметры: (AH) = 9,
                (DL) - номер устройства.
     Результат: (CF) = 0 - нормальное выполнение,
                (CF) = 1 - ошибка, и в AH ее код.

     Функция поддерживается всеми компьютерами, но ее выполнение зависит от
модели и, прежде всего, от установленного контроллера жесткого диска. Для
большинства моделей параметры выбираются из таблицы параметров жестких дисков
в ПЗУ, соответственно установке переключателей на плате адаптера. Таблица
параметров адресуется вектором 41H, и после загрузки системы может быть
переопределена. Параметры жесткого диска перечислены в табл. 11.
моделях (IBM AT, System/2), допускающих присоединение к одному контроллеру двух
дисков с разными параметрами, параметры устройства 0 определяются вектором 41H,
параметры устройства 1 - вектором 46H. Наконец, для некоторых контроллеров
эта функция не вызывает никаких действий: контроллер получает параметры
непосредственно от устройства.

назад

        14.11. Установка жесткого диска

     Параметры: (AH) = 0CH,
                (DL) - номер устройства,
                (DH) - номер головки,
                (CH) - младшие биты номера цилиндра,
                (CL) - старшие биты номера цилиндра в битпх 6 - 7.
     Результат: (CF) = 0 - нормальное выполнение,
                (CF) = 1 - ошибка, и в AH ее код.

     Выполняется установка на указанную дорожку и выбор головки. Функция может
использоваться для увеличения производительности системы, если БСВВ и контроллер
допускают совмещение операций установки на разных дтсках.

назад

        14.12. Альтернативный сброс диска

     Параметры: (AH) = 0DH,
                (DL) - номер устройства.
     Результат: (CF) = 0 - нормальное выполнение,
                (CF) = 1 - ошибка, и в AH ее код.

     Функция применима только к жестким дискам и вызывает сброс контроллера
и указанного жесткого диска (см. 14.1).

назад

        14.13. Проверка готовности устройства

     Параметры: (AH) = 10H,
                (DL) - номер устройства.
     Результат: (CF) = 0 - нормальное выполнение,
                (CF) = 1 - ошибка, и в AH ее код.

    Функция применима только к жестким дискам.
    Для некоторых контроллеров выполнение этой функции вызывает установку
диска на дорожку 0.

назад

        14.14. Установка диска на дорожку 0

     Параметры: (AH) = 10H,
                (DL) - номер устройства.
     Результат: (CF) = 0 - нормальное выполнение,
                (CF) = 1 - ошибка, и в AH ее код.

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

назад

        14.15. Получить тип диска

     Параметры: (AH) = 15H,
                (DL) - номер устройства.
     Результат: (CF) = 0 - нормальное выполнение,
                (AH) - тип диска:
                       0 - диск не установлен,
                       1 - дискета, линия замены не поддержиапется,
                       2 - дискета, линия замены поддерживается,
                       3 - жесктий диск;
                (CX:DX) - общее число секторов на диске,
                (CF) = 1 - ошибка, и в AH ее код.

     Функция была введена для поддержки контроллеров, допускающих присоединение
и дискетных устройств, и жестких дисков, и не поддерживается многими компьютерами.

назад

        14.16. Получить состояние линии замены дискеты

     Параметры: (AH) = 16H,
                (DL) - номер устройства.
     Результат: (CF) - флаг завершения,
                (AH) - код возврата:
                       00H - линия замены дискеты неактивна,
                       01H - неверный номер устройства,
                       06H - линия замены дискеты активна,
                       80H - устройство не готово.

     Функция применима только к дискетам и не поддерживается многими компьютерами.
Флаг (CF) устанавлиается обычным образом, но (CF) = 1 не свидетельствует об
ошибке при (AH) = 6.

назад

        14.17. Установить тип устройства для разметки

     Параметры: (AH) = 17H,
                (DL) - номер устройства,
                (AL) - тип дискеты и устройства:
                       1 - дискета 320/360 Кбайт на обычном устройстве,
                       2 - дискета 360Кбайт на устройстве большой емкости,
                       3 - дискета 1.2 Мбайта на устройстве большой емкости,
                       4 - дискета 720Кбайт на соответствующем устройстве.
     Результат: (CF) = 0 - нормальное выполнение,
                (CF) = 1 - ошибка, и в AH ее код.

     Функция применима только к дискетам и не поддерживается многими компьютерами.
Ее использование необходимо перед разметкой дискеты на устройстве, поддерживающем
различные форматы дискет. Код должен соответствовать фактическим возможностям
устройства.

назад

        14.18. Установить тип носителя для разметки

     Параметры: (AH) = 18H,
                (DL) - номер устройства,
                (CH) - число дорожек (возможно, младшие 8 бит),
                (CL) - число секторов на дорожке и, возможно, два старшших
                       бита числа дорожек.
     Результат: (CF) = 0 - нормальное выполнение,
                (ES:DI) - указатель на таблицу параметров дискетного устройства,
                (CF) = 1 - ошибка, и в AH ее код.

     Функция применима только к дискетам и не поддерживается многими компьютерами.
Ее использование необходимо перед разметкой дискеты на устройстве, поддерживающем
различные форматы дискет. Для каждого типа носителя поддерживется только один
блок параметров устройства (см. табл. ??).
     Для устройств с линией замены дискеты эта функция прежде всего пытается сбросить
активность линии (если она активна), что соответствует установке новой дискеты.
Если это не удается, возвращается ошибка. Таким образом, при отсутствии дискеты
в устройстве, возвращается ошибка.

назад

        14.19. Парковать головки

     Данная функция поддерживается только в System/2.

     Параметры: (AH) = 19H,
                (DL) - номер устройства;
     Результат: (CF) = 0 - нормальное выполнение,
                (CF) = 1 - ошибка, и в AH ее код.

     Функция полезна для защиты жесткого диска перед выключением питания.

назад

        14.20. Разметка устройства

     Функция применима только в системе с контроллером IBM ESDI жесткого диска.

     Параметры: (AH) = 1AH,
                (AL) = 0 - с данным запросом не связано никакой таблицы
                           адресов дефектных блоков;
                     иначе - счетчик таблицы дефектных блоков.
                (ES:BX) - адрес таблицы дефектных блоков;
                (CL) - модификаторы:
                     биты 7 - 5 должны быть нулями;
                     бит 4 - периодические прерывания. Контроллер прерывает
                             систему после завершения каждой из из трех фаз
                             разметки каждого цилиндра, чтобы позволить
                             системе упрвлять процессом разметки. Фазы
                             разметки: 0 - резерв, 1 - анализ поверхностей,
                             2 - форматирование. Код фазы доступен БСВВ
                             через прерывание 15H с (AH) = 0FH. При возврате
                             очищенный флаг CF приводит к продолжению разметки,
                             установленный - прекращает разметку.
                     бит 3 - расширенный анализ поверхностей. Прежде чем
                             размечать дорожку функцией с единичным
                             значением этого бита, необходимо попытаться
                             разметить ее функцией с нулевым значением бита.
                     бит 2 - обновление карты вторичных дефектов. Если
                             этот бит установлен в 1, то составляется
                             новая карта вторичных дефектов.
                     бит 1 - игнорирование карты вторичных дефектов;
                     бит 0 - игнорирование карты первичных дефектов.
                 (DL) - номер устройства.
     Дополнительная информация - см. описание контроллера ESDI.

назад

        15. INT 14H - функции асинхроннной связи

     Следующие функции INT 14H поддерживают протокол RS-232-C:
     (AH) = 0 - инициализация порта асинхронной связи;
            1 - передача байта;
            2 - прием байта;
            3 - получить состояние;
            4 - расширенная инициализация;
            5 - расширенное управление портом связи.
     Последние две функции применяются только в System/2.
     Сохраняются значения всех регистров, кроме AX. Базовые адреса портов
адаптеров связи и значения таймаутов устанавливаются при инициализации БСВВ.

назад

        15.1. Инициализация порта асинхронной связи.

     Параметры: (AH) = 0;
                (DX) - номер канала (0 - 3) в соответствии с базовым
                       адресом портов в таблице БСВВ по адресу 40:0;
                (AL) - параметры инициализации:
                    биты 1,0 = 00 - 5-ти битный код,
                             = 01 - 6-ти битный код,
                             = 10 - 7-ми битный код,
                             = 11 - 8-ми битный код;
                    бит 2    = 0 - 1 стоп-бит,
                               1 - 2 стоп-бита для 6-8-ми битного кода,
                                   1,5 стоп-бита для 5-ти битного кода;
                    бит 3    = 0 - нет контроля по паритету,
                             = 1 - есть контроль по паритету;
                    бит 4    = 0 - контроль по нечетности,
                             = 1 - контроль по четности;
                    биты 7-5 - скорость обмена (бод):
                             = 000 -  110
                             = 100 -  150
                             = 010 -  300
                             = 110 -  600
                             = 001 - 1200
                             = 101 - 2400
                             = 011 - 4800
                             = 111 - 9600
     Результаты: (AH) - состояние линии управления,
                 (AL) - состояние модема (см. 15.4).

назад

        15.2. Передача байта

     Параметры: (AH) = 1;
                (DX) - номер канала (0 - 3) в соответствии с базовым
                       адресом портов в таблице БСВВ по адресу 40:0;
                (AL) - байт данных для передачи.
     Результаты: (AH) - состояние линии управления (см. 15.4),
                 (AL) - сохраняется.
     Если бит 7 состояния линии устанавливается в 1, то остальные биты
состояния непредсказуемы. Байт в этом случае не передан.

назад

        15.3. Прием байта

     Параметры: (AH) = 2;
                (DX) - номер канала (0 - 3) в соответствии с базовым
                       адресом портов в таблице БСВВ по адресу 40:0;
                (AL) - байт данных для передачи.
     Результаты:(AH) - состояние линии управления (см. 15.4),
                (AL) - принятый байт данных.
     Модуль БСВВ ожидает приема байта.

назад

        15.4. Получить состояние канала.

     Параметры: (AH) = 3;
                (DX) - номер канала (0 - 3) в соответствии с базовым
                       адресом портов в таблице БСВВ по адресу 40:0;
     Результаты: (AH) - состояние линии управления:
                      бит 7 - таймаут
                          6 - конец передачи (КПД)
                          5 - готов к передаче (ГПД)
                          4 - обрыв канала (авария)
                          3 - ошибка по стоп-биту
                          2 - ошибка по паритету
                          1 - переполнение
                          0 - готов к приему (ГПР)
                 (AL) - состояние модема:
                      бит 7 - детектор принимаемого линейного
                              сигнала канала данных (цепь 109),
                          6 - индикатор вызова (цепь 125),
                          5 - аппаратура готова (цепь 107),
                          4 - готов к передаче (цепь 106).

назад

        15.5. Расширенная инициализация

      Вызов следующей функции используется для инициализации портов
асинхронной связи в System/2.

     Параметры: (AH) = 4;
                (DX) - номер канала (0 - 3) в соответствии с базовым
                       адресом портов в таблице БСВВ по адресу 40:0;
                (AL) = 0 - без обработки Break,
                       1 - с обработкой Break,
                (BH) - контроль паритета:
                       0 - нет контроля,
                       1 - контроль по нечетности,
                       2 - контроль по четности,
                       3 - stick (?) контроль по нечетности,
                       4 - stick (?) контроль по четности,
                (BL) = 0 - 1 стоп-бит,
                       1 - 2 стоп-бита для 6-8-ми битного кода,
                           1,5 стоп-бита для 5-ти битного кода;
                (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.
     Результаты: (AH) - состояние линии управления,
                 (AL) - состояние модема (см. 15.4).

назад

        15.6. Расширенное управление портом связи

     Две следующие функции применяются в System/2 для управления модемом:
        (AX) = 0500H - чтение регистра управления модемом,
        (AX) = 0501H - запись в регистр управления модемом.

     1. Параметры: (AX) = 0500H,
                   (DX) - номер канала (0 - 3) в соответствии с базовым
                          адресом портов в таблице БСВВ по адресу 40:0;
        Результат: (BL) - состояние регистра управления модемом:
                  бит 0 - терминал данных готов (DTR, цепь 108),
                  бит 1 - запрос на передачу (цепь 105),
                  бит 2 - управление выходом OUT1,
                  бит 3 - управление выходом OUT2,
                  бит 4 - цикл (возможность диагностирования),
                  биты 5 - 7 - нули.

     2. Параметры: (AX) = 0501H,
                   (DX) - номер канала (0 - 3) в соответствии с базовым
                          адресом портов в таблице БСВВ по адресу 40:0;
                   (BL) - байт для записи в регистр управления  модемом
                          (биты как в 1).
       Результаты: (AH) - состояние линии управления,
                   (AL) - состояние модема (см. 15.4).

назад

        16. Функции прерывания 15H

     В первых версиях БСВВ прерывание 15H использовалось для поддержки
кассетных накопителей на магнитной ленты. Эти устройства не получили широкого
распространения в ПП ЭВМ, и во многих моделях соответствующие средства
(функции 0 - 3) не поддерживаются. В более поздних версиях БСВВ через INT 15H
вызываются разнообразные средства поодержки операционных систем. Список функций
INT 15H приведен в следующей таблице:

        |--------|----------------------------------------------|
        |  код   |          функция                             |
        |--------|----------------------------------------------|
        |   00   |  включение двигателя кассетного устройства   |
        |   01   |  выключение двигателя кассетного устройства  |
        |   02   |  чтение блоков с кассеты                     |
        |   03   |  запись блоков на кассету                    |
        |   0F   |  периодические прерывания разметки диска     |
        |   21   |  Установить область для фиксации ошибок      |
        |        |  теста при включении питания                 |
        |   40   |  чтение и модификация системных параметров   |
        |   41   |  ожидание внешнего события                   |
        |   42   |  запрос сброса системы                       |
        |   43   |  чтение состояния системы                    |
        |   44   |  включение или выключение внутреннего модема |
        |   4F   |  перехват клавиаtурных кодов                 |
        |   80   |  открыть устройство                          |
        |   81   |  закрыть устройство                          |
        |   82   |  прекратить программу устройства             |
        |   83   |  ожидание события                            |
        |   84   |  поддержка координатных ручек                |
        |   85   |  поддержка клавиши SysReq                    |
        |   86   |  задержка                                    |
        |   87   |  перемещение блока памяти                    |
        |   88   |  определение объема дополнительной памяти    |
        |   89   |  переключение процессора в привилегированный |
        |        |  режим                                       |
        |   90   |  сообщение о занятости устройства            |
        |   91   |  сообщение о готовности устройства           |
        |   C0   |  получить параметры модели компьютера        |
        |   C1   |  получить сегмент расширения области данных  |
        |        |  БСВВ                                        |
        |   C2   |  интерфейс с устройствами типа "мышь"        |
        |   C3   |  разрешение или запрещение "сторожевого пса" |
        |   C4   |  выбор программируемых режимов               |
        |--------|----------------------------------------------|
                Таблица 10. Функции прерывания 15H

назад

        16.1. Включение двигателя кассетного устройства

     Параметры: (AH) = 0.
     Результат: (CF) = 0 и (AH) = 0.

     В большинстве моделей компьютеров возвращается (CF) = 1 как признак того,
что кассетная лента не поддерживается. В некоторых моделях, при неисправности
или отсутствии накопителя возвращается (AH) = 86H.

назад

        16.2. Выключение двигателя кассетного устройства

     Параметры: (AH) = 1.
     Результат: (CF) = 0 и (AH) = 0.

     В большинстве моделей компьютеров возвращается (CF) = 1 как признак того,
что кассетная лента не поддерживается. В некоторых моделях, при неисправности
или отсутствии накопителя возвращается (AH) = 86H.

назад

        16.3. Чтение блоков с кассеты

     Параметры: (AH) = 2,
                (ES:BX) - указатель буфера,
                (CX) - счетчик байтов.
     Результат: (CF) = 0 - нормальное выполнение,
                (ES:BX) - указатель на первый свободный байт буфера,
                (DX) - число фактически прочитанных байтов
            или (CF) = 1 - флаг ошибки,
                (AH) - код ошибки: 01 - ошибка контрольной суммы данных,
                                   02 - потеря данных при чтении,
                                   04 - данные не найдены.
     Код ошибки в AH возвращается только в PC-jr.
     В большинстве моделей компьютеров возвращается (CF) = 1 как признак того,
что кассетная лента не поддерживается. В некоторых моделях, при неисправности
или отсутствии накопителя возвращается (AH) = 86H.

назад

        16.4. Запись блоков на кассету

     Параметры: (AH) = 3,
                (ES:BX) - указатель буфера,
                (CX) - счетчик байтов.
     Результат: (CF) = 0 - нормальное выполнение,
                (ES:BX) - указатель байт буфера, следующий за последним
                          записанным байтом,
                (DX) - число фактически записанных байтов
            или (CF) = 1 - флаг ошибки,
                (AH) - код ошибки: 01 - ошибка контрольной суммы данных,
                                   02 - потеря данных при записи,
                                   04 - данные не найдены.

     Код ошибки в AH возвращается только в PC-jr.
     В большинстве моделей компьютеров возвращается (CF) = 1 как признак того,
что кассетная лента не поддерживается. В некоторых моделях, при неисправности
или отсутствии накопителя возвращается (AH) = 86H.

назад

        16.5. Периодические прерывания разметки диска.

     Следующая функция используется только при работе с адаптером IBM ESDI
жесткого диска. Прерывание 15H с (AH) = 0FH может вызываться при выполнении
разметки каждого цилиндра диска (см. 14.20) трижды: (AL) = 0 - перед разметкой
цилиндра, (AL) = 1 - после анализа поверхностей, (AL) = 2 - после форматирования.
     БСВВ устанавливает (CF) = 1, что приводит к прекращению разметки. Чтобы
разрешить разметку жесткого диска контроллеру ESDI, нужно, по крайней мере,
заменить обработчик данной функции на модуль, возвращающий (CF) = 0.

    Параметры: (AH) = 0FH,
               (AL) - код фазы (0 - 2),
    Результат: (CF) = 0 - разметка будет продолжена,
                      1 - разметка будет прекращена.

назад

        16.6.  Установка области для ошибок теста при включении питания

     Две следующие функции применимы только в System/2, исключая иодель 30,
они дают возможность получать информацию о неработоспособных устройствах,
установаленную при выполнении теста включения питания (POST).
     В большинстве моделей компьютеров возвращается (CF) = 1 как признак того,
что функции не поддерживаются.

     1. Получить область ошибок POST.

     Параметры: (AX) = 2100H.
     Результат: (ES:DI) - указатель на область ошибок,
                (BX) - размер области (слов),
                (AH) = 0 и (CF) = 0.

     2. Записать код ошибки в область ошибок POST.

     Параметры: (AX) = 2101H,
                (BH) - код устройства,
                (BL) - код ошибки.
     Результат: (CF) = 0 и (AH) = 0 - нормальное выполнение,
                (CF) = 1 и (AH) = 1 - переполнение таблицы ошибок.

назад

        16.7. Чтение и модификация системных параметров

     Четыре подфункции данной функции поддерживаются только в PC Convertible.
     В других компьютерах возвращается (CF) = 1 и (AH) = 80H или 86H, как
признак того, что функция не поддерживается.

     Параметры: (AH) = 40H,
                (AL) - код подфункции:
                       0 - чтение системных параметров,
                       1 - модификация системных параметров,
                       2 - чтение параметров внутренннего модема,
                       3 - модификация параметров внутреннего модема,
                (BX) - параметры для подфункций 1 и 3,
                (CX) - параметры для подфункции 1.
     Результат: (CF) = 0 - нормальное выполнение,
                (AL) = 0 - нормальное выполнение,
                (BX) - прочитанные параметры,
                (CX) - прочитанные параметры для подфункции 0 или
                (CF) = 1 и (AL) = 80H - флаг ошибки.

     Системные параметры управляют перезапуском системы после выключения
питания или сброса. Системные параметры имеют следующий формат (звездочкой
отмечены значения, устанавливаемые после случайного выключения питания):
        (BX) бит 15 = 0 - режим "холодного" запуска,
                    = 1 (*) - режим "горячего" запуска,
             бит 14 = 0 - запрет вывода сообщения о запуске,
                    = 1 (*)- разрешение вывода сообщения,
             биты 13 - 12 - начальный режим дисплея:
                     00 - резервируется,
                     01 - монохромный 40*25 с использованием CGA (LCD или
                          совместимого адаптера),
                     10 (*) - монохромный 80*25 с использованием CGA (LCD или
                          совместимого адаптера),
                     11 - монохромный 80*25 с использованием монохромного
                          адаптера,
             биты 11- 10 - использование атрибутов LCD:
                     00 (*) - игнорировать атрибут интенсивности,
                     01 - использовать как подверкивание,
                     10 - использовать для обратной контрастности,
                     11 - использовать для альтернативного набора знаков,
             бит  9 = 0 (*) - внутренний модем недоступен при автономном питании,
                      1 - внутренний содем доступен при автономном питании,
             бит  8 = 0 (*) - внешние линии связи недоступны при автономном пмтании,
                      1 - внешние линии связи доступны при автономном питании,
             биты 7 - 0 - резервируются.
        (CX) биты 15 - 8 - время (в минутах), в течение которого экран должен
                          быть пустым при отсутствии активности клавиатуры,
             биты 7 - 0  - время (в минутах) до выключения компьютера при
                          отсутствии активности клавиатуры.

     Параметры внутреннего модема имеют следующий формат:

        (BX) биты 15 - 14 - резервируются,
             бит 13  = 0 (*) - ручной ответ,
                       1 - автоматический ответ,
             биты 12 - 10 - контроль паритета и размер кадра:
                       000 - семибитовые данные с единичным битом,
                       001 - семибитовые данные с нулевым битом,
                       010 - семибитовые данные, четность,
                       011 (*) - семибитовые данные, нечетность,
                       100 - восьмибитовые данные,
                       иначе - резервируется,
             биты 9 - 8 - скорость передачи:
                       00 - 110 бод,
                       01 - 300 бод,
                       10 (*) - 1200 бод,
                       11 - 2400 бод,
             биты 7 - 0 - резерв.

назад

        16.8. Ожидание внешнего события

     Все подфункции данной функции поддерживаются только в PC Convertible.
     В других компьютерах возвращается (CF) = 1 и (AH) = 80H или 86H, как
признак того, что функция не поддерживается.
     Внешнее событе может быть прерыванием или активностью канала НДП. До
наступления ожидаемого события (состояния) выключается тактовый генератор.

     Параметры: (AH) = 41H,
                (AL) - код типа события:
                       00 - возврат при наступлении события,
                       01 - возврат при совпадении значений,
                       02 - возврат при несовпадении значений,
                       03 - возврат при ненулевом результате проверки
                            битовой маски,
                       04 - возврат при нулевом результате проверки битовой
                            маски,
                       10H - 14H - аналогично 00 - 04, но событие связывается
                            не с байтом памяти, а с портом ввода-вывода,
                (BH) - значение для сравнения или маска для проверки,
                (BL) - тайм-аут в единицах системного таймера (55 мсек),
                (ES:DI) - указатель на проверяемый байт памяти (бит 4 AL равен 0),
                (DX) - адрес порта ввода-вывода (бит 4 AL равен 1).
     Результат: (CF) = 1 - тайм-аут.

    Для кодов 01, 02, 11H и 12H байт, вызывающий событие, сравнивается с
образцом инструкцией CMP, для кодов 03, 04, 13H и 14H - проверяется по маске
инструкцией TEST.

назад

        16.9. Запрос сброса системы

     Данная функция поддерживаются только в PC Convertible.
     В других компьютерах возвращается (CF) = 1 и (AH) = 80H или 86H, как
признак того, что функция не поддерживается.

     Параметры: (AH) = 42H,
                (AL) - код возобновления:
                       00 - при перезапуске используются системные параметры
                            (см. функцию 40H),
                       01 - продолжение выполенения.
     Результат: (CF) = 1 - функция не поддерживается или недоступна,
                (AH) - модифицируется.

     Управление немедленно возвращается лишь в том случае, если функция не
поддерживается или недоступна; (CF)= 1 свидетельствует об этом. Иначе выключается
питание c предварительной установкой режима, который будет
использоваться при следующем включении компьюьера. Если (AL) = 1, а параметры
системны (см. функцию 40H) указывают на "горячий" запуск, то после включения
питания будет продолжено выполнение программы, вызвавшей эту функцию.

     Замечание: перед вызовом этой функции двигатели дискетных устройств
должны быть выключены.

назад

        16.10. Чтение состояния системы

     Данная функция поддерживаются только в PC Convertible.
     В других компьютерах возвращается (CF) = 1 и (AH) = 80H или 86H, как
признак того, что функция не поддерживается.

     Параметры: (AH) = 43H.
     Результат: (CF) = 0 - нормальное выполнеение,
                (AH) - модифицируется,
                (AL) - байт состояния системы
            или (CF) = 1 - функция не поддерживается,

     Функция возвращает байт состояния системы:
        бит 7 = 1 - автономный источник питания,
            6 = 1 - внешний источник питания,
            5 = 1 - автономное питание потеряно (этом случае часы реального
                    времени неработоспособны),
            4 = 1 - включение питания вызвано сигналом от часов реального
                    времени,
            3 = 1 - внутренний модем включен,
            2 = 1 - внешние линии связи включены,
            1     - резервируется,
            0 = 1 - адаптер дисплея (LCD) не подключен.
    (См. функцию 8 прерывания 1AH относительно сигнала от часов реального
времени, включающего питтание).

назад

        16.11. Включение или выключение питания внутреннего модема

     Данная функция поддерживаются только в PC Convertible.
     В других компьютерах возвращается (CF) = 1 и (AH) = 80H или 86H, как
признак того, что функция не поддерживается.

     Параметры: (AH) = 44H,
                (AL) = 0 - выключить внутренний модем,
                       1 - включить внутренний модем.
     Результат: (CF) = 1 - функция не поддерживается или запрос не выполнен,
                (AL) = 80H - запрос не выполнен,
                (CF) = 0 и (AL) = 0 - успешное выполнение.

     При включении внутреннего модема автоматически устанавливается соответствующее
состояние системы (см. функцию 40H).

назад

        16.12. Перехват клавиатурных кодов

     Параметры: (AH) = 4FH,
                (AL) - скан код клавиши.
     Результат: (CF) = 1 - скан код заменен,
                (AL) - новый скан код
            или (CF) = 0 - скан код не изменился (AL сохраняется).

     В некоторых компьюьерах эта функция вызывается из обработика клавиатурных
прерываний (INT 9) после приема каждого знака от клавиватуры. Вызов функции
позволяет заменить принятый скан код до его обработки и размещения в буфере.

     Замечания: это средство не поддерживается ранними версиями БСВВ.
В зависимости от версии БСВВ (даты создания) возвращается (CF) = 1 и (AH) = 80H
или (CF) = 1 и (AH) = 86H. Функция 0C0H INT 15H позволяет определить, поддерживается
ли данное средство.
     БСВВ, поддерживающие эту функцию, оставляют скан коды неизменными.
     В Искра-1030.M поддерживается функция 4FH, но не 0C0H.

назад

        16.13. Открыть устройство

     Параметры: (AH) = 80H,
                (BX) - идентификатор устройства,
                (CX) - идентификатор процесса.
     Результат: (CF) = 0 - нормальное выполнение,
                       1 - функция не поддерживается.

     Функция предусмотрена для поддержки многозадачных операционных систем,
позволяя открывать физические устройства для процессов. Обычно, обработчик
этого прерывания устанавливается операционной системой, которая ведет список
активных процессов. Функция поддерживается (инициируется) не всеми версиями
БСВВ. Она не поддерживается в PC, PC-jr и в ранних версиях БСВВ XT.

назад

        16.14. Закрыть устройство

     Параметры: (AH) = 81H,
                (BX) - идентификатор устройства,
                (CX) - идентификатор процесса.
     Результат: (CF) = 0 - нормальное выполнение,
                       1 - функция не поддерживается.

     Функция предусмотрена для поддержки многозадачных операционных систем,
позволяя отключать физические устройства от процессов. Обычно, обработчик
этого прерывания устанавливается операционной системой, которая ведет список
активных процессов. Функция поддерживается (инициируется) не всеми версиями
БСВВ. Она не поддерживается в PC, PC-jr и в ранних версиях БСВВ XT.

назад

        16.15. Прекратить программу устройства

     Параметры: (AH) = 81H,
                (BX) - идентификатор устройства.
     Результат: (CF) = 0 - нормальное выполнение,
                       1 - функция не поддерживается.

     Функция предусмотрена для поддержки многозадачных операционных систем,
позволяя отключить физическое устройство от всех процессов. Обычно, обработчик
этого прерывания устанавливается операционной системой, которая ведет список
активных процессов. Функция поддерживается (инициируется) не всеми версиями
БСВВ. Она не поддерживается в PC, PC-jr и в ранних версиях БСВВ XT.

назад

        16.16. Ожидание события

     Параметры: (AH) = 83H,
                (AL) - код подфункции:
                       0 - установить проемежуток времени,
                       1 - отменить установленный промежуток,
                (ES:BX) - указатель на байт, используемый для установки
                       события, состоящего в истечении указанного
                       промежутка времени,
                (CX:DX) - величина промежутка в мксек.
     Результат: (CF) = 0 - нормальное выполнение,
                       1 - функция не поддержтвается.

     Функция поддерживается только в компьютерах, снабженных часами реального
времени. В некоторых моделях (AT с БСВВ от 1/10/84) поддерживается
только подфункция 0.
     После вызова функции управление немедленно возвращается программе
пользователя, и, для того чтобы узнать об истечении установленного промежутка
времени, она должна периодически просматривать байт (ES:BX).
     Истечение промежутка времени отмечается установкой в 1 старшего бита
указанного байта; программа пользователя должна сбросить этот бит перед
вызовом подфункции 0. Часы реального времени обеспечивают кванты времени по
976 мксек. Старшая часть промежутка времени задается в (CX), например,
(CX) = 98H и (DX) = 9680H определяют промежуток в 10 сек.

назад

        16.17. Поддержка координатных ручек

     Параметры: (AH) = 84H,
                (DX) - код подфункции:
                       0 - чтение текущей установки переключателей,
                       1 - чтение ????? resistive inputs??????
     Результат: (CF) = 1 - функция не поддерживается,
                       0 - нормальное выполнение,
        для подфункции 0 биты 4 - 7 (AL) - установленные переключтаели;
        для подфункции 1 (AX) - значение A(x),
                         (BX) - значение A(y),
                         (CX) - значение B(x),
                         (DX) - значение B(y).

     Функция предназначениа для поддежки координатных ручек (Joystick) и
реализована в БСВВ не всех компьютеров. Она не поддерживается в PC,
PC-jr и в ранних версиях БСВВ XT.

назад

        16.18. Поддержка клавиши SysReq

     Параметры: (AH) = 85H,
                (AL) - код подфункции:
                       0 - запрос системы при нажатии клавиши,
                       1 - запрос системы при отпускании клавиши.
     Результат: (CF) = 0 - нормальное выполнение,
                       1 - функция не поддерживается.

     Функция, определенная в БСВВ, не вызывает никаких действий, кроме
очистки флага CF. Она позволяет операционной системе или пользователю
определить обработчик клавиши SysReq. Этот обработчик будет вызываться
из обработчика клавиатурного прерывания (INT 9) либо при нажатии клавиши
SysReq, либо при ее отпускании.
     Функция не поддерживается в PC, PC-jr и в ранних версиях БСВВ XT.

назад

        16.19. Задержка

     Параметры: (AH) = 86H,
                (CX:DX) - время в мксек.
     Результат: (CF) = 0 - нормальное выполнение,
                       1 - функция не поддерживается.

     Функция поддерживается только в компьютерах, снабженных часами реального
времени. Часы реального времени обеспечивают кванты времени по
976 мксек. Старшая часть промежутка времени задается в (CX), например,
(CX) = 98H и (DX) = 9680H определяют промежуток в 10 сек.
     Управление возвращается после истечения указанного интервала времени.
     Функция не поддерживается в PC, PC-jr и в ранних версиях БСВВ XT.

назад

        16.20. Перемещение блока памяти

     Параметры: (AH) = 87H,
                (CX) - размер перемещаемого блока памяти в словах (максимум
                       8000H, что соответствует 64 Кбайтам памяти),
                (ES:SI) - указатель списка дескрипторов (см. ниже).
     Результат: (CF) = 0 - нормальное выполнение
                       1 - ошибка,
                (AH) - код завершения:
                       0 - успешное завершение,
                       1 - ошибка схем контроля,
                       2 - выполнение прекращено,
                       3 - неверный адрес памяти.

     Функция поддерживается только БСВВ компьюьеров на основе микропроцессоров
Intel 80286 и совместимых с ним (поддерживающих память 16M и привилегированный
режим работы). Она позволяет переместить в область АДОС блок памяти с абсолютным
адресом, большим 1M.
     ES:SI указывает на список из шести дескрипторов, каждый из которых имеет
длину 8 байт. Формат дескриптора:
        байты 0 - 1 - размер сегмента (слово),
        байты 2 - 3 - младшее слово 24-битового адреса,
        байт  4     - старший байт 24-битового адреса,
        байт  5     - код права доступа,
        байты 6 - 7 - резервируются.
     Таблица дескпипторов, на которую указывает (ES:SI), содержит шесть
следующих дескрипторов (в указанном порядке):
     - пустой дескриптор, должен быть установлен пользователем на адрес 000000;
     - декриптор данной таблицы дескрипторов; устанавливается пользователем
на адрес 000000; модифицируется БСВВ;
     - дескриптор перемещаемого блока памяти;
     - дескриптор области для перемещения блока;
     - дескриптор кодового сегмента для программы в привилегированном режиме;
устанавливается пользователем на адрес 000000; модифицируется БСВВ;
     - дескриптор стека программы в привилегированном режиме;
устанавливается пользователем на адрес 000000; модифицируется БСВВ.
     Пользователь устанавливает в значения, отличные от 0, только третий
и четвертый дескрипторы таблицы. Они определяются следующим образом:
     - поле границы сегмента должно содержать значение, не меньшее чем
2**((CX)-1);
     - поле адреса устанавливается в абсолютный адрес блока,
     - поле права доступа должно быть установлено в 93H, чтобы обеспечить
доступ для чтения и для записи.
     Функция переключает процессор в привилегированный режим и выполняет
перемещение блока памяти. Во время перемещения запрещаются все прерывания,
так что перемещение больших блоков может вызывать потерю сигналов прерывания.

назад

        16.21. Определение объема дополнительной памяти

     Параметры: (AH) = 88H.
     Результат: (CF) = 0 - нормальное выполнение,
                (AX) - объем в килобайтах непрерывного участка ОЗУ, начинающегося
                       с абсолютного адреса 100000H
            или (CF) = 1 - функция не поддерживается.

     Функция поддерживается только БСВВ компьюьеров на основе микропроцессоров
Intel 80286 и совместимых с ним (поддерживающих память 16M и привилегированный
режим работы). Она возвращает объем памяти, распознаваемой БСВВ при включении
питания. Эта память может использоваться только в привилегированном режиме
работы процессора.

назад

        16.22. Переключение процессора в привилегированный режим

     Параметры: (AH) = 89H,
                (BH) - индекс в таблице описания прерываний, устанавливающий
                номера векторов прерывания от главного ПКП (соотвествует IRQ 0);
                (BL) - индекс в таблице описания прерываний, устанавливающий
                номера векторов прерывания от подчиненного ПКП,
                (ES:SI) - указатель на таблицу дескрипторов (см. ниже).
     Результат: (AH) = 0 (и (CF) = 0) - успешное выполнение,
                (CF) = 0 и (AH) отлично от 0 - функция не выполнена;
                (CF) = 1 - функция не поддерживается.

     Функция поддерживается только БСВВ компьюьеров на основе микропроцессоров
Intel 80286 и совместимых с ним (поддерживающих память 16M и привилегированный
режим работы). Нормальное выполнение функции переводит процессор в
привилегированный режим и передает управление в сегмент, указанный пользователем.
При этом разрушается регистры AH, BP и все сегментные регистры.
     (ES:SI) указывает на таблицу из восьми восьмибайтовых дескрипторов, формат
которых приведен в 15.18. Таблица содержит следующие дескрипторы (в указанном
порядке):
     - пустой дескриптор, должен быть установлен пользователем на адрес 000000;
     - декриптор данной таблицы дескрипторов; устанавливается пользователем
на адрес 000000; модифицируется БСВВ;
     - дескриптор таблицы векторов прерываний; инициализируется пользователем;
     - дескриптор сегмента данных; инициализируется пользователем;
     - дескриптор дополнительного сегмента данных; инициализируется пользователем;
     - дескриптор сегмента стека; инициализируется пользователем;
     - дескриптор кодового сегмента; инициализируется пользователем;
     - дескриптор временного кодового сегмента БСВВ;
устанавливается пользователем на адрес 000000; модифицируется БСВВ.
     Программе пользователя, которая получит управление, будут недоступны
средства БСВВ, поэтому она должна сама выполнять операции ввода-вывода.
Векторы прерывания должна быть перемещена в резервную область памяти.
Контроллеры прерываний должны быть переустановлены, чтобы они определяли
векторы, не размещенные в резервной области. Обработчики прерываний должны
быть инициализированы пользователем. Таблица описания прерываний не может
быть перекрыта таблицей описания прерываний привилегированного режима БСВВ.

назад

        16.23. Сообщение о занятости устройства

     Параметры: (AH) = 90H,
                (AL) - тип устройства (см. ниже).
     Результат: (CF) = 0 - недостаточное время ожидания,
                       1 - достаточное время ожидания.

     Функция 90H вызывается для того, чтобы сообщить операционной системе, что
логическое устройство ожидает обслуживания. Если процессу необходим доступ к
некоторому устройству, а оно занято, то система может выполнять другие задачи,
пока не освободится нужное устройство.
     Тип устройства кодируется следующим образом:
     - коды 00 - 7FH резервируются для последовательно используемых устройств
(система может выдать запрос к такому устройству только в том случае, если
предыдущий запрос к нему завершен);
     - коды 80H - 0BFH резурвируются для реентерабельных устройств (для такого
устройства может одновременно существовать несколько незавершенных запросов на
ввод-вывод; (ES:BX) используется для дифференциации запросов);
     - коды 0C0H - 0FFH резезрвируется для устройств и ситуаций, в которых
не требуется завершения запроса после окончания времени ожидания (тайм-аут).
В частности:
        00 - тайм-аут жесткого диска,
        01 - тайм-аут дискетного устройства,
        02 - клавиатура,
        03 - тайм-аут символьного устройства,
        80H - сеть; (ES:BX) указывает на блок управления;
        0FDH - включение двигателя дискетного устройства,
        0FEH - устройство печати (тайм-аут).

     Функция поддерживается не всеми компьютерами. Если она не поддерживается,
то возвращается (CF) = 1 и (AH) = 80H или 86H в зависимости от модели.

назад

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

     Параметры: (AH) = 91H,
                (AL) - тип устройства
     Результат: (CF) = 0 - нормальное выполнение,
                       1 - ошибка.

     Функция 91H вызывается драйвером устройства, чтобы сообщить операционной
системе, что устройство готово к обслуживанию (т.е. выполнило запрос).
Например, обработчик клавиатурных прерываний (INT 9) может выпзвать эту функцию,
чтобы сообщить о том, что принят и обработан байт клавиатурных данных. Вызов
функции устанавливает флаг завершения прерывания. Тип устройства - см. 16.21.
     Функция поддерживается не всеми компьютерами. Если она не поддерживается,
то возвращается (CF) = 1 и (AH) = 80H или 86H в зависимости от модели.

назад

        16.25. Получить параметры модели компьютера

     Параметры: (AH) = 0C0H.
     Результат: (CF) = 0 и (AH) = 0 - нормальное выполнение,
                (ES:BX) - указатель на таблицу параметров
            или (CF) = 1 - ошибка.

     Возвращается указатель на таблицу:
        байт 0 - длина таблицы в байтах (8);
        байт 1 - код модели компьютера,
        байт 2 - код исполнения (уточнение модели);
        байт 3 - код версии БСВВ;
        байт 4 - код специальных средств;
        байты 5 - 8 - резерв (нули).
     Коды моделей компьютеров и версий БСВВ приведены в п.??.??. Байт кода
специальных средств имеет следующий формат:
        бит 7 = 1 - БСВВ жесткого диска использует канал 3 НДП;
        бит 6 = 1 - установлен подчиненный ПКП;
        бит 5 = 1 - установлены часы реального времени;
        бит 4 = 1 - обработчик клавиатурных прерываний вызывает функцию
                    (AH) = 4FH INT 15H;
        бит 3 = 1 - поддерживается функция ожидания внешнего события;
        биты 2 - 0 - резерв.

     Функция поддерживается не всеми компьютерами. Если она не поддерживается,
то возвращается (CF) = 1 и (AH) = 80H или 86H в зависимости от модели.
Функция не поддерживается в PC, PC-jr и в ранних версиях БСВВ XT.

     Замечание: канал 3 КНДП может использоваться не только адаптером жесткого
диска, но и другими адаптерами, в частности он используется контроллером
IBM локальной сети.

назад

        16.26. Получить сегмент расширения области данных БСВВ

     Следующая функция поддерживается только в System/2.

     Параметры: (AH) = 0C1H.
     Результат: (CF) = 0 - нормальное выполнение,
                (ES) - сегментый адрес расширения области данных БСВВ.

     Если функция не поддерживается, то возвращается (CF) = 1 и
(AH) = 80H или 86H в зависимости от модели.

назад

        16.27. Интерфейс с устройствами типа "мышь"

     Восемь следуюших функций, предназначены для управления устройствами
типа "мышь" и поддерживаются только в System/2. Если функция не поддерживается,
то возвращается (CF) = 1 и (AH) = 80H или 86H в зависимости от модели.

     1. Разрешение или запрет работы с устройством

     Параметры: (AX) = 0C200H,
                (BH) = 0 - запрет работы с устройством,
                       1 - разрешение работы.
     Результат: (CF) = 0 - успешное выполнение,
                     = 1 - выход с ошибкой;
                (AH) - состояние устройства:
                       0 - нет ошибок,
                       1 - неверная функция,
                       2 - неверные данные,
                       3 - ошибка интерфейса,
                       4 - ????? Resend ?????
                       5 - не установлен драйвер.

     2. Сброс устройства

     Параметры: (AX) = 0C201H.
     Результат: (CF) = 0 - успешное выполнение,
                     = 1 - выход с ошибкой;
                (AH) - состояние устройства (как в 1) и
                (BH) - идентификатор устройства,
     Если операция завершается успешно, то усройство устанавливается
в следующее состояние:
     - работа запрещена,
     - установлена частота 100 сообщений в секунду,
     - установлено разрешение 4 точки на миллиметр,
     - установлена линейная шкала 1:1,
     - размер пакета данных остается тем же, что и перед вызовом этой функции.
     Значение (BL) разрушается.

     3. Установить частоту сообщений

     Параметры: (AX) = 0C202H,
                (BH) - частота: 0 - 10 сообщений в секунду
                                1 - 20 сообщений в секунду
                                2 - 40 сообщений в секунду
                                3 - 60 сообщений в секунду
                                4 - 80 сообщений в секунду
                                5 - 100 сообщений в секунду
                                6 - 200 сообщений в секунду
     Результат: (CF) = 0 - успешное выполнение,
                     = 1 - выход с ошибкой;
                (AH) - состояние устройства (как в 1).

     4. Установить разрешение

     Параметры: (AX) = 0C203H,
                (BH) - разрешение:
                           0 - 1 точка на миллиметр
                           1 - 2 точки на миллиметр
                           2 - 4 точки на миллиметр
                           3 - 8 точек на миллиметр
     Результат: (CF) = 0 - успешное выполнение,
                     = 1 - выход с ошибкой;
                (AH) - состояние устройства (как в 1).

     5. Получить имп (ID) устройства

     Параметры: (AX) = 0C204H.
     Результат: (CF) = 0 - успешное выполнение,
                     = 1 - выход с ошибкой;
                (AH) - состояние устройства (как в 1),
                (BH) - идентификато устройства.


     6. Инициализация интерфейса с устройством

     Параметры: (AX) = 0C205H,
                (BH) - размер пакета данных:
                      0 - резервируется,
                      иначе - число байтов в пакете (1 - 8).
     Результат: (CF) = 0 - успешное выполнение,
                     = 1 - выход с ошибкой;
                (AH) - состояние устройства (как в 1).
     Если операция завершается успешно, то усройство устанавливается
в следующее состояние:
     - работа запрещена,
     - установлена частота 100 сообщений в секунду,
     - установлено разрешение 4 точки на миллиметр,
     - установлена линейная шкала 1:1.

     7. Расширения команд инициализации

     Параметры: (AX) = 0C206H,
                (BH) = 0 - получить расширенное состояние,
                       1 - установить масштаб 1:1,
                       2 - установить масштаб 2:1.
     Результат: (CF) = 0 - успешное выполнение,
                     = 1 - выход с ошибкой;
                (AH) - состояние устройства (как в 1).
     Расширенное состояние для подфункции (BH) = 0 возвращается в
регистрах (BL), (CL) и (DL):
     (BL) бит 7     - резерв (0);
              6 = 0 - режим потока (stream),
                  1 - удаленный режим (remote);
              5 = 0 - разрешение,
                  1 - запрет;
              4 = 0 - масштаб 1:1,
                  1 - масштаб 2:1;
              3     - резерв (0);
              2 = 1 - нажата левая кнопка,
              1     - резерв (0);
              0 = 1 - нажата правая кнопка,
     (CL) = 00      - 1 точка на миллиметр,
            01      - 2 точки на миллиметр,
            02      - 4 точки на миллиметр,
            03      - 8 точек на миллиметр;
     (DL) - число сообщений в секунду ( 10,20, 40, 60, 80, 100 или 200).

     8. Инициализация драйвера

     Параметры: (AX) = 0C207H
                (ES:BX) - адрес точки входа в драйвер
     Результат: (CF) = 0 - успешное выполнение,
                     = 1 - выход с ошибкой;
                (AH) - состояние устройства (как в 1).
     Пользователь должен определить модуль, который получает управление
всякий раз, когда становятся доступными какие-либо данные устройства.
Данная функция устанавливает адрес драйвера для БСВВ.
     Драйвер вызывается инструкцией межсегментного вызова и получает
параметры в стеке:
     слово 1 - состояние:
        бит 7 = 1 - переполнение по координате Y,
        бит 6 = 1 - переполнение по координате X,
        бит 5 = 1 - отрицательные данные по координате Y,
        бит 4 = 1 - отрицательные данные по координате X,
        бит 3     - резев (всегда 1),
        бит 2     - резев (всегда 0),
        бит 1 = 1 - нажата правая кнопка,
        бит 0 = 1 - нажата левая кнопка,
        биты 15 - 8 - нули;
     слово 2 - байт данных по координате X (биты 15 - 8 - нули);
     слово 3 - байт данных по координате Y (биты 15 - 8 - нули);
     слово 4 - нули.
     Выход из драйвера должен быть оформлен как межсегментный возврат,
информация в стеке не должна изменяться.

назад

        16.28. Разрешение или запрещение "сторожевого пса"

     Следующая функция поддерживается только в System/2, исключая модель 30.
     Если функция не поддерживается, то возвращается (CF) = 1 и
(AH) = 80H или 86H в зависимости от модели.

     Параметры: (AH) = 0C3H,
                (AL) = 0 - запрет тайм-аута "сторожевого пса",
                       1 - разрешение тайм-аута,
                (BX) - счетчик (1 - 255).
     Результат: (CF) = 0 - нормальное выполнение,
                       1 - выход с ошибкой.

     "Строжевой пес" - это таймер, сигнализирующий о необработанных
прерываниях.

назад

        16.29. Выбор программируемых режимов

     Следующие три функции поддерживаются только в System/2, исключая модель 30.
     Если функции не поддерживаются, то возвращается (CF) = 1 и
(AH) = 80H или 86H в зависимости от модели.

     1. Получить базовый адрес регистров адаптера POS.

     Параметры: (AX) = 0C400H.
     Результат: (CF) = 0, (AL) = 0,
                (DX) - базовый адрес регистров POS.

     2. Разрешить установку платы.

     Параметры: (AX) = 0C401H,
                (BL) - номер платы.
     Результат: (CF) = 0 - нормальное выполнение,
                       1 - выход с ошибкой.

     3. Разрешить работу адаптера.
     Параметры: (AX) = 0C402H.
     Результат: (CF) = 0 - нормальное выполнение,
                       1 - выход с ошибкой.

назад

        17. INT 16H - функции клавиатуры

     Функции БСВВ для работы с клавиатурой перечислены в табл. 10. Только
функции 0 - 2 поддерживаются любой версией БСВВ. Остальные функции требуют
специального оборудования или расширения интерфейса с аппаратурой. В частности,
функции 10H, 11H и 12H предназначены для поддержки клавиатур с расширенными
функциональными возможностями, позволяющими получать последовательность
скан-кодов при нажатии или отпускании одной клавиши. Для таких коавиатур
скан-коды подразделяются на три категории:
     1. Если некоторый знак порождается нажатием (или отпусканием) только
одной клавиши, то этот скан-код такой клавиши обрабатывается обычным образом.
     2. Если несколько клавиш генерируют один и тот же знак, то только одна из
них генерирует стандартный скан-код, соответствующий этому знаку. Другие
клавшиши генерируют уникальные последовательности скан-кодов, в каждую из
которых входит стандартный скан-код знака. Поэтому система может различать
нажатые клавиши.
     3. Новым клавишам присвоены уникальные скан-коды.
     Во всех моделях компьютеров функции 0 и 1 возвращают только стандартные
коды знаков и скан-коды клавиш, удаляя из буфера дополнительную информацию.
Этим достигается независимость программ от установленной клавиатуры.
При использовании расширенной клавиатуры не следует считать, что в программу
попадает вся информация из буфера. Точную копию буфера можно получить с
помощью функций 10H И 11H.
     Чтобы определить, что функции 10H - 12H поддерживаются БСВВ, можно,
воспользовавшись функйией 5, занести в буфер код 0FFH со скан-кодом 0FFH.
Если функция 5 вернет (AL) = 0, то код успешно записан в буфер, иначе, при
отсутствии переполнения буфера, функции 5, 10H, 11H и 12H не поддерживаются.
Затем нужно вызывать функцию 10H и, если ни одна из 16 попыток ее вызова
не вернет (AX) = 0FFFFH, то функции 10H - 12H не поддерживаются.

        |-------|-----------------------------------------------|
        |  код  |                  функция                      |
        |-------|-----------------------------------------------|
        |  00   |  чтение знака                                 |
        |  01   |  проверка наличия знака                       |
        |  02   |  состояние регистров клавиатуры               |
        |  03   |  установка частоты повторений                 |
        |  04   |  управление звуковым сигналом                 |
        |  05   |  запись в буфер клавиатуры                    |
        |  10   |  расширенная функция чтения                   |
        |  11   |  расширенная проверка наличия знака           |
        |  12   |  расширенное состояние регистров              |
        |-------|-----------------------------------------------|
           Таблица 11. Функции БСВВ для поддержки клавиатуры.

назад

        17.1. Чтение знака

     Параметры: (AH) = 0.
     Результат: (AL) - код знака,
                (AH) - скан-код клавиши.

     Код знака и скан-код клавиши удаляются из буфера БСВВ (см. INT 9) и
возвращаются в (AX). Если буфер БСВВ пуст, функция ждет ввода знака с клавиатуры.
В некоторых моделях до перехода к ожиданию вызывается функция 90H прерывания
15H, чтобы сообщить (многозадачной) операционной системе, что она может
переключиться на другую задачу до получения знака. В этих же моделях
после получения кода от клавиатуру система информируется об этом вызовом
функции 91H INT 15H (см. 15.21 и 15.22).
     Замечание: знаки расширенного кода (в частности, управляющие символы)
возвращаются в виде скан-кода в (AH) с (AL) = 0.

назад

        17.2. Проверка наличия знака

     Параметры: (AH) = 1.
     Результат: (ZF) = 1 - буфер клавиатуры пуст,
                (ZF) = 0 - в буфере есть знаки и
                (AL) - код первого знака из буфера,
                (AH) - cкан-код клавиши.

     В отличие от функции 0, информация, возвращаемая в (AX), не удаляется
из буфера. Если в буфере БСВВ нет знаков, немедленно возвращается (ZF) = 1.

назад

        17.3. Состояние регистров клавиатуры

     Параметры: (AH) = 2.
     Результат: (AL) - первый байт состояния регистров клавиатуры,
                (AH) разрушается.

     Функция возвращает в (AL) в точности ту же информацию, которая содержится
в байте памяти с абсолютным адресом 0417H (см. ??.??).

назад

        17.4. Установка частоты повторений.

     Данная функция требует специального адаптера клавиатуры и поддерживается
только в некоторым моделях компьютеров. Подфункции (AL) = 0,...,4
поддерживаются только в PC-jr, подфункция (AL) = 5 - в AT и в System/2.

     Параметры: (AH) = 3,
                (AL) - код подфункции:
                       0 - установить умолчание для состояния регистров клавиатуры,
                       1 - увеличить начальную задержку,
                       2 - уменьшить частоту повторов вдвое,
                      3 - увеличить начальную задержку и уменьшить вдвое
                           часитоту повторов,
                       4 - отключить повторы,
                       5 - установить начальную задержку и частоту повторов;
                (BL) - частота повторов (для подфункции 5),
                (BH) - начальная задержка (для подфункции 5).

     Подфункция 1 устанавливает регистры клавиатуры в то состояние, в какое они
устанавливаются сбросом. Остальные подфункции управляют временем между
повторными выдачами скан-кода нажатой клавиши и задержкой до первого повторения.
     Подфункция 5 допускает значения (BL) от 0 до 31, что соответствует интервалу
между повторами от 30 мсек до 2 мсек (большее значение (BL) соответсвует меньшему
промежутку между повторами). (BH) указывает промежуток времени до первого
повторения. Допускаются значения от 0 до 3 и соответствующие промежутки от
0.25 сек до 1 сек.
     В AT и в System/2

назад

        17.5. Управление звуковым сигналом

     Данная функция требует специального адаптера клавиатуры и поддерживается
только в некоторым моделях компьютеров (PC-jr, PC Convertible).

     Параметры: (AH) = 4,
                (AL) = 0 - отключить звуковой сигнал,
                       1 - включить звуковой сигнал.

     Звуковой сигнал выдается при переполнении внутреннего буфера клавиатуры.

назад

        17.6. Запись в буфер клавиатуры

     Данная функция позволяет программе заносить знаки в буфер БСВВ так, как
если бы эти знаки были получены из клавиатуры. Функция не поддерживется в PC,
PC-jr, PC Convertible и ранними версиями БСВВ XT и AT

     Параметры: (AH) = 5,
                (CH) - скан-код,
                (CL) - код знака.
     Результат: (AL) = 0 - успешное выполнение,
                       1 - переполнение буфера.

назад

        17.7. Расширенная функция чтения

     Параметры: (AH) = 10H.
     Результат: (AL) - код знака,
                (AL) - скан-код клавиши.

     Эта функция, не реализованная во многих компьютерах, выполняется аналогично
функции 0, но возвращает точную копию информации в буфере БСВВ (см.17.1.).
Функция не поддерживется в PC, PC-jr, PC Convertible и ранними версиями
БСВВ XT и AT.

назад

        17.8. Расширенная проверка наличия знака

     Параметры: (AH) = 11H.
     Результат: (ZF) = 1 - буфер клавиатуры пуст,
                (ZF) = 0 - в буфере есть знаки и
                (AL) - код первого знака из буфера,
                (AH) - cкан-код клавиши.

     Эта функция, не реализованная во многих компьютерах, выполняется аналогично
функции 1, но возвращает точную копию информации в буфере БСВВ (см.17.1.).
Функция не поддерживется в PC, PC-jr, PC Convertible и ранними версиями
БСВВ XT и AT.

назад
        17.9. Расширенное состояние регистров

     Параметры: (AH) = 12H.
     Результат: (AL) - первый байт состояния регистров клавиатуры,
                (AH) - дополнительный байт состояния регистров клавиатуры.

     Функция возвращает в (AL) в точности ту же информацию, которая содержится
в байте памяти с абсолютным адресом 0417H (см. ??.??), а в (AH) - ту же
информацию, которая содержится в байту памяти с абсолютным адресом ????.
Функция не поддерживется в PC, PC-jr, PC Convertible и ранними версиями
БСВВ XT и AT.

назад

        18. INT 17H - функции устройства печати

     БСВВ поддерживает три следующие функции устройств печати:
        (AH) = 0 - вывод знака,
        (AH) = 1 - инициализация порта устройства печати,
        (AH) = 2 - чтение состояния.

назад

        18.1. Вывод знака

     Параметры: (AH) = 0,
                (AL) - знак для вывода,
                (DL) - номер устройства печати.
     Результат: (AH) - состояние окончания функции (см. 18.3).

     Значение (DL) используется как индекс при выборе базового адреса портов
устройства печати из таблицы с абсолютным адресом 0408H. Значение (DL)
должно быть меньше числа подключенных устройств печати и во всех случаях не
может быть больше трех.

назад

        18.2. Инициализация порта устройства печати.

     Параметры: (AH) = 1,
                (DL) - номер устройства печати.
     Результат: (AH) - состояние окончания функции (см. 18.3).

     Значение (DL) используется как индекс при выборе базового адреса портов
устройства печати из таблицы с абсолютным адресом 0408H. Значение (DL)
должно быть меньше числа подключенных устройств печати и во всех случаях не
может быть больше трех.

назад

        18.3. Получить состояние

     Параметры: (AH) = 2,
                (DL) - номер устройства печати.
     Результат: (AH) - состояние устройства:
                       бит 7 = 1 - устройство не готово,
                       бит 6 = 1 - подтверждение,
                       бит 5 = 1 - нет бумаги,
                       бит 4 = 1 - выбор устройства,
                       бит 3 = 1 - ошибка вывода,
                       бит 0 = 1 - тайм-аут,
                       биты 2 и 1 резервируются.

     Значение (DL) используется как индекс при выборе базового адреса портов
устройства печати из таблицы с абсолютным адресом 0408H. Значение (DL)
должно быть меньше числа подключенных устройств печати и во всех случаях не
может быть больше трех.

назад

        19. INT 19H - прерывание начальной загрузки

     Прерывание 19H вызывает чтение с дискового устройства первого сектора
дорожки 0 на стороне 0. Сектор считывается в ОЗУ с адреса 7C00:0, и байт по
этому адресу получает управление. Прежде всего выполняется попытка считать
сектор с первого дискетного устройства (INT 13H с (DL) = 0), при неудаче -
c первого жесткого диска (INT 13H с (DL) = 80H). Если и эта попытка оказывается
неудачной, то выполняется прерывание INT 18, вызывающее во многих компьютерах
кассетный Бейсик.

назад

        20. INT 1AH - функции таймера и часов реального времени

     В табл. 11 перечислены функции БСВВ, связанные с таймером и с часами
реального времени. Только функции 0 и 1 доступны во всех моделях комптютеров,
остальные требуют установки часов реального времени.

        |-------|-----------------------------------------------|
        |  код  |               функция                         |
        |-------|-----------------------------------------------|
        |   00  |  чтение счетчика циклов таймера               |
        |   01  |  установка счетчика циклов таймера            |
        |   02  |  получить реальное время                      |
        |   03  |  установить реальное время                    |
        |   04  |  получить реальную дату                       |
        |   05  |  установить реальную дату                     |
        |   06  |  установить сигнал тревоги                    |
        |   07  |  сбросить установку сигнала тревоги           |
        |   08  |  установить время включения питания           |
        |   09  |  получить время и состояние сигнала тревоги   |
        |   0A  |  чтение счетчика дней                         |
        |   0B  |  установка счетчика дней                      |
        |   80  |  установить звуковой генератор                |
        |-------|-----------------------------------------------|
                 Таблица 12. Функции даты и времени.

назад

        20.1. Чтение счетчика циклов таймера

     Параметры: (AH) = 0.
     Результат: (CX) - младшее слово счетчика,
                (DX) - старшее слово счетчика,
                (AL) - флаг перехода через сутки.

     Обработчик прерывания прерывания от системного таймера (INT 8) подсчитывает
количество случившихся прерываний в двойном слове памяти с адресом 0470H.
Данная функция возвращает накопленное значение и сбрасывает его в 0. В регистре
AL возвращается 0, если содержимое счетчика не превысило значения,
соответствующего 24 часам (при достижении этого значения счетчик сбрасывается),
иначе возвращается (AL) = 1.
     Поскольку содержимое счетчика сбрасываетсяпри каждом обращении, то
двухкратная установка флага перехода через сутки практически невероятно,
поскольку, например, каждое обращение к дискетному устройству содержит вызов
данной функции.

назад

        20.2. Установка счетчика циклов таймера

     Параметры: (AH) = 1,
                (CX) - младшее слово счетчика,
                (DX) - старшее слово счетчика.
    Результатов нет.

    Выполнение функции сбрасывает флаг перехода через сутки. Отметим, что
максимальное значение счетчика циклов таймера равно 1800B0H.
    Установка счетчика циклов таймера изменяет системное время, но не дату.

назад

        20.3. Получить реальное время

     Параметры: (AH) = 2.
     Результат: (CF) = 1 - часы не установлены или выключены,
                (CF) = 0 - нормальное выполнение,
                (CH) - часы,
                (CL) - минуты,
                (DH) - секунды,
                (DL) = 0 - установлен режим 24-часовых суток,
                       1 - установлен режим 12-часовых суток.

     Функция поддерживается не всеми компьютерами (AT, System/2) и даже для
них не всегда поддерживется режим 12-часовых суток.
    Результат возвращается в упакованном десятичном формате. Например,
(CX) = 0904H, (DH) = 12H обозначает 9 часов 4 минуты 12 секунд.
     Часы реального времени имеют автономное питание и работают даже при
выключении компьютера. Они используются при включении питания для установки
системной даты и системного времени, но в дальнейшем дата и время определяются
на основании счетчика таймера. Поэтому результат этой функции не обязательно
соответствует результату функции 0.

назад

        20.4. Установить реальное время

     Параметры: (AH) = 3,
                (CH) - часы,
                (CL) - минуты,
                (DH) - секунды,
                (DL) = 0 - установить режим 24-часовых суток,
                       1 - установить режим 12-часовых суток.
     Результат: (CF) = 0 - нормальное выполнение,
                (CF) = 1 - часы не установлены или выключены.

     Функция поддерживается не всеми компьютерами (AT, System/2) и даже для
них не всегда поддерживется режим 12-часовых суток.
     Параметры задаются в упакованном десятичном формате. Например,
(CX) = 0904H, (DH) = 12H обозначает 9 часов 4 минуты 12 секунд.

назад

        20.5. Получить реальную дату

     Параметры: (AH) = 4.
     Результат: (CF) = 1 - часы не установлены или выключены,
                (CF) = 0 - нормальное выполнение,
                (CH) - век (19 или 20),
                (CL) - год,
                (DH) - месяц,
                (DL) - день.

     Функция поддерживается не всеми компьютерами (AT, System/2).
     Результат возвращается в упакованном десятичном формате. Например,
(CX) = 1988H, (DX) = 1127H обозначает 27.11.1988. Результат данной функции
не обязательно соответствует результату функции 1 (см. 20.3).

назад

        20.6. Установить реальную дату

     Параметры: (AH) = 5,
                (CH) - век (19 или 20),
                (CL) - год,
                (DH) - месяц,
                (DL) - день.
     Результат: (CF) = 0 - нормальное выполнение,
                (CF) = 1 - часы не установлены или выключены.

     Функция поддерживается не всеми компьютерами (AT, System/2).
     Параметры задаются в упакованном десятичном формате. Например,
(CX) = 1988H, (DX) = 1127H обозначает 27.11.1988.

назад

        20.7. Установить сигнал тревоги

     Параметры: (AH) = 6,
                (CH) - часы,
                (CL) - минуты,
                (DH) - секунды.
     Результат: (CF) = 0 - нормальное выполнение,
                (CF) = 1 - часы не установлены или выключены.

     Функция поддерживается не всеми компьютерами (AT, System/2).
     Параметры задаются в упакованном десятичном формате. Например,
(CX) = 0904H, (DH) = 12H обозначает 9 часов 4 минуты 12 секунд.
     Установленный сигнал тревоги вызывает программное прерывание 4AH,
обработчик которого может быть установлен пользователем. БСВВ не сбрасывает
сигнал тревоги при выполнении прерывания.

назад

        20.8. Сбросить сигнал тревоги.

     Параметры: (AH) = 7.
     Результат: (CF) = 0 - нормальное выполнение,
                (CF) = 1 - часы не установлены или выключены.

     Функция поддерживается не всеми компьютерами (AT, System/2).
     Если сигнал тревоги не был установлен, то не выполняются никакие действия.

назад

        20.9. Установить время включения питания

     Параметры: (AH) = 8,
                (CH) - часы,
                (CL) - минуты,
                (DH) - секунды.
     Результат: (CF) = 0 - нормальное выполнение,
                (CF) = 1 - часы не установлены или выключены или уже
                           установлен сигнал тревоги.

     Функция требует установки не только часов реального времени, но и другого
специального оборужования, и поддерживается только в компьюьерах, совместимых
с System/2.

назад

        20.10. Получить время и состояние сигнала тревоги

     Параметры: (AH) = 9.
     Результат: (CF) = 1 - часы не установлены или выключены,
                (CF) = 0 - нормальное выполнение,
                (CH) - часы,
                (CL) - минуты,
                (DH) - секунды,
                (DL) - состояние сигнала тревоги:
                       0 - не установлен,
                       1 - установлен, но не включает питание,
                       2 - установлен и включает питание.

     Функция требует установки не только часов реального времени, но и другого
специального оборужования, и поддерживается только в компьюьерах, совместимых
с System/2.
     Время возвращается в упакованном десятичном формате (см. 20.3).

назад

        20.11. Чтение счетчика дней

     Параметры: (AH) = 0AH.
     Результат: (CF) = 1 - функция не поддерживается,
                (CF) = 0 - нормальное выполнение,
                (CX) - счетчик дней от 1.01.1980.

     Функция не требует установки часов реального времени, но поддерживается не
всеми компьюьерами и версиями БСВВ. Счетчик дней устанавливается в 0 при
включении питания.

назад

        20.12. Установка счетчика дней

     Параметры: (AH) = 0BH,
                (CX) - счетчик дней от 1.01.1980.
     Результат: (CF) = 0 - нормальное выполнение,
                       1 - функция не поддерживается.

     Функция не требует установки часов реального времени, но поддерживается не
всеми компьюьерами и версиями БСВВ. Счетчик дней устанавливается в 0 при
включении питания.

назад

        20.13. Установить звуковой генератор.

     Функция применяется только в PC-jr.

     Параметры: (AH) = 80H,
                (AL) - источник звука:
                       0 - канал 2 таймера 8253,
                       1 - входной сигнал от кассетного устройства,
                       2 - линия "Audio In" в канале ввода-вывода,
                       3 - микросхема тонального генератора.
     Результат: (CF) = 0.
     В других компьютерах возвращается (CF) = 1, как признак того,
что функция не поддерживается.

назад

        21. INT 1BH - прерывание прекращения

     Прерывание 1BH вызывается при нажатиии комбинации клавиш Ctrl-Break
(см. ??.??). БСВВ инициирует обработчик этого прерывания, помещающий в буфер
клавиатуры специальный код (AH) = 03, (AL) = 0. АДОС устанавливает свой
обработчик прерывания 1BH, прекращающий выполнение программы, вызвавшей
это прерывание. Пользователь может установить собственный обработчик (некоторые
утилиты АДОС делают это).

назад

        22. INT 1CH - обработчик пользователя прерываний от таймера

     Прерывание 1CH вызывается из обработчика прерываний от системного таймера
(INT 8) при каждом прерывании. БСВВ устанавливает пустой обработчик прерывания
1CH; пользователь может заменять его для своих целей.

назад

        23. INT 1DH -

назад

        24. INT 1EH - указатель таблицы параметров дискеты

     БСВВ устанавливает вектор 1EH на адрес в ПЗУ таблицы параметров дискетного
устройства:

        |-------|---------------------------------------------|
        | байт  |               параметр                      |
        |-------|---------------------------------------------|
        |   0   | первый байт спецификации                    |
        |   1   | второй байт спецификации                    |
        |   2   | время до выключения двигателя               |
        |   3   | код размера сектора: 0 - 128, 1 - 256,      |
        |       |      2 - 512, 3 - 1024                      |
        |   4   | номер последнего сектора на дорожке         |
        |   5   | длина промежутка                            |
        |   6   | длина данных в случае, когда длина сектора  |
        |       | не указана в команде контроллера            |
        |   7   | длина промежутка для разметки               |
        |   8   | байт-заполнитель для разметки               |
        |   9   | время успокоения головки                    |
        |  10   | время включения двигателя                   |
        |-------|---------------------------------------------|
           Таблица 13. Блок параметров дискетного устройства.

     При загрузке АДОС некоторые параметры могут быть заменены.
     Первые два байта блока обычно посылаются в контроллер как часть команды.
Обычно, старшие 4 бита байта 0 указывают время шага головки, младшие
четыре бита - время разгрузки головки. Установленный в 1 младщий бит
байта 1 обычно указывает на прямой обмен с диском (без использования КНДП),
остальные биты байта 1 кодируют время загрузки головки. Байт 3 не зависит
от контроллера и указывает время, а течение которого двигатель устройства
остается включенным после окончания операции. Обычное для БСВВ значение 8
байта 4 заменяется при загрузке АДОС фактическим числом секторов на загрузочной
дискете.

назад

        25. INT 1FH -

назад

        26. INT 40H - функции дискетных устройств

     В комьютерах, снабженных жесткими дисками, драйвер БСВВ жестких дисков
переустанавливает вектор прерывания 13H так, чтобы поддерживать через этот
вектор запросы к диску любого типа. Адрес обработчика запросов к дискете
сохраняется в векторе 40H. Не рекомендуется ссылаться к этому вектору, за
исключением случая, когда нужно получить адрес обработчика дискетных
функций в ПЗУ БСВВ.

назад

        27. INT 41H - указатель таблицы параметров жестких дисков

     В большинстве компьютеров таблицы параметров жестких дисков расположены
в ПЗУ. Это сделано для того, чтобы можно было загружать операционную
систему с жесткого диска любого типа. Типы установленных дисков обычно
отображаются переключателями конфигурации, но некоторые адаптеры могут
получать тип от устройства. Во всех случаях после инициализации БСВВ
вектор прерывания 41H устанавливается на таблицу параметров жесткого диска
(если в системе есть жесткие диски). В большинстве компьюьеров вектор
указывает на начало таблицы в ПЗУ, а конкретный набор параметров выбирается
на основании переключателей конфигурации, но в некоторых компьютерах
(IBM AT, System/2) этот вектор устанавливается на таблицу параметров диска,
фактически подключенного как жесткий диск 0. В этих компьютерах вектор
46H указывпет на таблицу параметров жесткого диска 1, если он подключен.
     Параметры жесткого диска представляются структурой, приведенной в
табл. 14.

        |-------|-------|-----------------------------------------------|
        | адрес | длина |              параметр                         |
        |-------|-------|-----------------------------------------------|
        |    0  | слово | максимальный номер цилиндра                   |
        |    2  | байт  | максимальный номер головки                    |
        |    3  | слово | цилиндр начала уменьшения тока записи         |
        |    5  | слово | цилиндр начала предкомпенсации записи         |
        |    7  | байт  | наибольшая длина пакета исправимой            |
        |       |       | ошибки чтения                                 |
        |    8  | байт  | байт управления:                              |
        |       |       |   бит 7 =1 - запрет повторов поиска;          |
        |       |       |   бит 6 =1 - запрет повторов при ошибках;     |
        |       |       |              чтения;                          |
        |       |       |   бит 5 =1 - определен список дефектов;       |
        |       |       |   бит 4 - резерв;                             |
        |       |       |   бит 3 = 1 - больше 8 головок;               |
        |       |       |   биты 2 - 0 - номер устройства               |
        |    9  | байт  | стандартный тайм-аут                          |
        |   10  | байт  | тайм-аут для разметки                         |
        |   11  | байт  | тайм-аут для проверки                         |
        |   12  | слово | ?????????? Landing Zone ?????????????         |
        |   14  | байт  | число секторов на дорожке                     |
        |   15  | байт  | резерв                                        |
        |-------|-------|-----------------------------------------------|
                Таблица 14. Параметры жестких дисков

     Замечание. Не все параметры являются обязательными для контроллера
каждого типа. В частности:
     - может не быть цепей уменьшения тока записи;
     - БСВВ может не пользоваться значениями тайм-аутов;
     - установленная длина исправимого пакета ошибок может не приниматься
во внимание;
     - любой из битов 6 и 7 байта управления может запрешать все повторы;
     - список дефектных секторов, бит 3 байта управления и Landing Zone
могут не поддерживаться;
     - число секторов на дорожке не нужно для контроллеров, поддерживающих
только фиксированный формат дорожки.

|-----|-----------------------|-----------------------|-----------------------|
|     |   BIOS XT 11/10/82    |   BIOS XT 1/08/86     |   БСВВ Искра-1030.М   |
|адрес|    тип диска          |    тип диска          |    тип диска          |
|     |  0  |  1  |  2  |  3  |  0  |  1  |  2  |  3  |  0  |  1  |  2  |  3  |
|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|
|  0  | 306 | 375 | 306 | 306 | 306 | 612 | 615 | 306 |     |     |     |     |
|  2  |   2 |   8 |   6 |   4 |   4 |   4 |   4 |   8 |     |     |     |     |
|  3  | 306 | 375 | 128 | 306 | 306 | 612 | 615 | 306 |     |     |     |     |
|  5  |   0 |   0 | 256 |   0 |   0 |   0 | 300 | 128 |     |     |     |     |
|  7  |  11 |  11 |  11 |  11 |  11 |  11 |  11 |  11 |     |     |     |     |
|  8  |   0 |   5 |   5 |   5 |   5 |   5 |   5 |   5 |     |     |     |     |
|  9  |  12 |  12 |  12 |  12 |  12 |  32 |  24 |  12 |     |     |     |     |
| 10  | 180 | 180 | 180 | 180 | 180 | 180 | 180 | 180 |     |     |     |     |
| 11  |  40 |  40 |  40 |  40 |  40 |  40 |  40 |  40 |     |     |     |     |
| 12  |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |     |     |     |     |
| 14  |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |     |     |     |     |
| 15  |   0 |   0 |   0 |   0 |   0 |   0 |   0 |   0 |     |     |     |     |
|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|-----|
              Таблица 15. Жесткие диски IBM XT и Искра-1030

     В System/2 (кроме модели 30) таблица параметров диска размещается на самом
диске в секторе 2 на стороне 0 цилиндра 0. Блок параметров диска System/2
приведен в табл. 16 (все числа - десятичные).

        |--------|-------|----------|--------------------------------|
        |  адрес | длина | значение |         описание               |
        |--------|-------|----------|--------------------------------|
        |   0    |   2   |    41    | длина таблицы параметров       |
        |   2    |  22   |   (ID)   | текст "IBM HARDFILE TYPE xxx", |
        |        |       |          | где xxx - трехзначный тип диска|
        |        |       |          |  (см. табл.15)                 |
        |  24    |   1   |    xxx   | тип диска двоичным кодом       |
        |  25    |   2   |     nn   | максимальное номер цилиндра    |
        |  27    |   1   |     nn   | максимальный номер головки     |
        |  28    |   2   |     0    | резерв                         |
        |  30    |   2   |     nn   | начальный цилиндр              |
        |        |       |          | предкомпенсации записи         |
        |  32    |   1   |     0    | резерв                         |
        |  33    |   1   |     xx   | байт управления: бит 7 или     |
        |        |       |          | 6 - запрет повторов,           |
        |        |       |          | бит 5 - есть карта дефектов,   |
        |        |       |          | бит 3 - больше чем 8 головок   |
        |  34    |   3   |     0    | резерв                         |
        |  37    |   2   |     nn   | Landing Zone                   |
        |  39    |   1   |     nn   | число секторов на дорожке      |
        |  40    |   1   |     0    | резерв                         |
        |--------|-------|----------|--------------------------------|
        Таблица 16. Параметры жесткого диска System/2

назад

        28. INT 46H - указатель таблицы параметров второго жесткого диска

В System/2 и в AT INT 46H - указывает на таблицу параметров второго жесткого
диска, если он установлен(см. INT 41H).

        |---|---------|-------|---------------|-------|--------|
        |тип| число   | число |цилиндр        |Landing| Карта  |
        |   |цилиндров|головок|предкомпенсации|Zone   |дефектов|
        |---|---------|-------|---------------|-------|--------|
        | 0 |         нет жесткого диска                       |
        | 1 |   306   |   4   |     128       |  305  |  нет   |
        | 2 |   615   |   4   |     300       |  615  |  нет   |
        | 3 |   615   |   6   |     300       |  615  |  нет   |
        | 4 |   940   |   8   |     512       |  940  |  нет   |
        | 5 |   940   |   6   |     512       |  940  |  нет   |
        | 6 |   615   |   4   |  -1 (нет)     |  615  |  нет   |
        | 7 |   462   |   8   |     256       |  511  |  нет   |
        | 8 |   733   |   5   |  -1 (нет)     |  733  |  нет   |
        | 9 |   900   |  15   |  -1 (нет)     |  901  |  нет   |
        |10 |   820   |   3   |  -1 (нет)     |  820  |  нет   |
        |11 |   855   |   5   |  -1 (нет)     |  855  |  нет   |
        |12 |   855   |   7   |  -1 (нет)     |  855  |  нет   |
        |13 |   306   |   8   |     128       |  319  |  нет   |
        |14 |   733   |   7   |  -1 (нет)     |  733  |  нет   |
        |15 |           резервируется                          |
        |16 |   612   |   4   |   0 (всегда)  |  663  |  нет   |
        |17 |   977   |   5   |     128       |  977  |  нет   |
        |18 |   977   |   7   |  -1 (нет)     |  977  |  нет   |
        |19 |  1024   |   7   |     512       | 1023  |  нет   |
        |20 |   733   |   5   |     300       |  732  |  нет   |
        |21 |   733   |   7   |     300       |  732  |  нет   |
        |22 |   733   |   5   |     300       |  733  |  нет   |
        |23 |   306   |   4   |   0 (всегда)  |  336  |  нет   |
        |24 |   612   |   4   |     305       |  663  |  нет   |
        |25 |   306   |   4   |  -1 (нет)     |  340  |  нет   |
        |26 |   612   |   4   |  -1 (нет)     |  670  |  нет   |
        |27 |   698   |   7   |     300       |  732  |  есть  |
        |28 |   976   |   5   |     488       |  977  |  есть  |
        |29 |   306   |   4   |   0 (всегда)  |  340  |  нет   |
        |30 |   611   |   4   |     306       |  663  |  есть  |
        |31 |   732   |   7   |     300       |  732  |  есть  |
        |32 |  1023   |   5   |  -1 (нет)     | 1023  |  есть  |
        |---|---------|-------|---------------|-------|--------|
             Таблица 17. Жесткие диски AT и System/2

     БСВВ AT содержит, в зависимости от версии, 15 или 24 первых строки
табл. 17, БСВВ модели 30 System/2 - первые 27 строк, БСВВ других моделей
System/2 - все строки.

назад

        29. INT 4AH -

назад

        30. INT 70H - прерывание от часов реального времени

     В некоторых моделях компьютеров (AT, System/2) обработчик прерывания
70H управляет периодическими и разовыми прерываниями от часов реального времени.
     Если пользователь определил какое-либо событие (см. 16.6, 16.14, 16.17),
то активируются периодические прерывания от часов реального времени с
частотой 1024 прерывания в секунду и устанавливается начальное значение
счетчика. Каждое прерывание декрементирует счетчик, и когда он сбросится в 0,
будет установлен флаг события. Пользователь может проверять наступление
события, анализируя флаг. Для функции (AH) = 86H INT 15H соответствующим
флагом является бит 7 байта с абсолютным адресом 04A0H.
     Установка пользователем сигнала тревоги (см. 20.7) активирует вызов
прерывания 4AH из данного прерывания.

назад

        31. Область данных БСВВ

     Для работы БСВВ резервируется 256 байтов памяти с абсолютного адреса 400H.
Эта область инициализируется БСВВ при системном сбросе или включении питания и
доступна пользователю. Формат области данных БСВВ приведен в табл. 18 (все
числа в таблице - шестнадцатеричные). Следует отметить, что некоторые данные
могут отсутствовать в конкретных моделях компьютеров в связи с отсутствием
соответствующего оборудования.

     |-------|---------|-------------------------|-----------------------|
     | адрес | формат  |      информация         |      замечания        |
     |-------|---------|-------------------------|-----------------------|
     | 40:00 |  слово  | базовый адрес портов    | значение 0 указывает  |
     |       |         | адаптера 1 асинхронной  | на отсутствие этого   |
     |       |         | связи                   | и следующих адаптеров |
     | 40:02 | слово   | то же для адаптера 2    |                       |
     | 40:04 | слово   | то же для адаптера 3    |                       |
     | 40:06 | слово   | то же для адаптера 4    |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:08 | слово   | базовый адрес портов    | значение 0 указывает  |
     |       |         | устройства 1 печати     | на отсутствие этого   |
     | 40:0A | слово   | то же для устройства 2  | и следующих устройств |
     | 40:0C | слово   | то же для устройства 3  |                       |
     | 40:0E | слово   | то же для устройства 4  |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:10 | слово   | флаги установленного    | см. INT 11H           |
     |       |         | оборудования            |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:12 | байт    | резервируется           | состояние теста БСВВ  |
     |       |         |                         | при сбросе в System/2 |
     |-------|---------|-------------------------|-----------------------|
     | 40:13 | слово   | размер ОЗУ в Кбайтах    | не больше 640 К       |
     |-------|---------|-------------------------|-----------------------|
     | 40:15 | байт    | резервируется           |                       |
     | 40:16 | байт    | резервируется           |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:17 | байт    | первый байт состояния   | см. табл. 20          |
     |       |         | регистров клавиатуры    |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:18 | байт    | второй байт состояния   | см. табл. 20          |
     |       |         | регистров клавиатуры    |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:19 | байт    | байт результата         | см. INT 9             |
     |       |         | цифрового ввода         |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:1A | слово   | указатель на начало     |                       |
     |       |         | очереди знаков в буфере |                       |
     |       |         | клавиатуры              |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:1C | слово   | указатель на конец      |                       |
     |       |         | очереди знаков в буфере |                       |
     |       |         | клавиатуры              |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:1E | 16 слов | буфер клавиатуры        |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:3E | байт    | состояние установки     |бит 7 - флаг прерывания|
     |       |         | дискетных устройств     |биты 3 - 0 - требуется |
     |       |         |                         |вывод на дорожку 0     |
     |       |         |                         |на устройстве 3 - 0    |
     |-------|---------|-------------------------|-----------------------|
     | 40:3F | байт    | состояние двинателей    | бит 7 = 1 - запись    |
     |       |         | дискетных устройств     | биты 1 - 0 - номер    |
     |       |         |                         | выбранного двигателя  |
     |-------|---------|-------------------------|-----------------------|
     | 40:40 | байт    | счетчик времени до      |                       |
     |       |         | выключения двигателя    |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:41 | байт    | состояние завершения    | см. табл. 7           |
     |       |         | последней операции с    |                       |
     |       |         | дискетой                |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:42 | 7 байт  | байты состояния         |                       |
     |       |         | контроллера дискеты     |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:49 | байт    | установленный режим     |                       |
     |       |         | дисплея                 |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:4A | слово   | ширина экрана           |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:4C | слово   | длина буфера (страницы) | в байтах              |
     |       |         | экрана                  |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:4E | слово   | адрес начала страницы   | отсчитывается в байтах|
     |       |         |                         | от начала буфера      |
     |-------|---------|-------------------------|-----------------------|
     | 40:50 | 8 слов  | позиции курсора для     |                       |
     |       |         | каждой страницы экрана  |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:60 | слово   | тип (размер) курсора    |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:62 | байт    | номер активной страницы |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:63 | слово   | базовый адрес портов    |                       |
     |       |         | контроллера дисплея     |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:65 | байт    | байт режима дисплея     | для CGA - содержимое  |
     |       |         |                         | порта 3D4H            |
     |-------|---------|-------------------------|-----------------------|
     | 40:66 | байт    | байт управления цветом  | для CGA - содержимое  |
     |       |         |                         | порта 3D5H            |
     |-------|---------|-------------------------|-----------------------|
     | 40:67 | двойное |  резервируется          | для System/2 (кроме   |              |
     |       | слово   |                         | модели 30) - адрес    |
     |       |         |                         | кода обхода теста     |
     |       |         |                         | памяти при сбросе     |
     |-------|---------|-------------------------|-----------------------|
     | 40:6B | байт    | резервируется           |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:6C | двойное | счетчик прерываний      |                       |
     |       | слово   | системного таймера      |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:70 | байт    |флаг перехода через сутки| =0 - перехода не было |
     |-------|---------|-------------------------|-----------------------|
     | 40:71 | байт    | флаг состояния Break    | бит 7 = 1 - нажата    |
     |       |         |                         | клавиша Break         |
     |-------|---------|-------------------------|-----------------------|
     | 40:72 | слово   | флаг сброса             |1234H - обход теста    |
     |       |         |                         |памяти при сбросе      |
     |       |         |                         |4321H - сохранение     |
     |       |         |                         |памяти System/2 (кроме |
     |       |         |                         |модели 30). Только для |
     |       |         |                         |PC Convertible: 5678H -|
     |       |         |                         |системная задержка,    |
     |       |         |                         |9ABCH - режим теста    |
     |       |         |                         |изготовителя, ABCDH -  |
     |       |         |                         |цикл после POST.       |
     |-------|---------|-------------------------|-----------------------|
     | 40:74 | байт    | состояние завершения    | см. табл. 7           |
     |       |         | последней операции с    |                       |
     |       |         | жестким диском          |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:75 | байт    | число подключенных      |                       |
     |       |         | жестких дисков          |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:76 | байт    | байт управления         | только XT             |
     |       |         | жестким диском          |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:77 | байт    | базовый адрес портов    | только XT             |
     |       |         | контроллера жесткого    |                       |
     |       |         | диска                   |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:78 | байт    | тайм-аут устройства 1   |                       |
     |       |         | печати                  |                       |
     | 40:79 | байт    | то же для устройства 2  |                       |
     | 40:7A | байт    | то же для устройства 3  |                       |
     | 40:7B | байт    | резерв                  |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:7C | байт    | тайм-аут адаптера 1     |                       |
     |       |         | асинхронной связи       |                       |
     | 40:7D | байт    | то же для адаптера 2    |                       |
     | 40:7E | байт    | то же для адаптера 3    |                       |
     | 40:7F | байт    | то же для адаптера 4    |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:80 | слово   | указатель на начало     |  обычно 041EH         |
     |       |         | буфера клавиатуры       |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:82 | слово   | указатель на конец      |  обычно 043EH         |
     |       |         | буфера клавиатуры       |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:84 | байт    | номер последней строки  | нумерация с 0         |
     |       |         | текстового экрана       |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:85 | слово   | размер изображения знака|                       |
     |       |         | (байт)                  |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:87 | байт    | первый байт состояния   |                       |
     |       |         | управления дисплеем     |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:88 | байт    | второй байт состояния   |                       |
     |       |         | управления дисплеем     |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:89 | слово   | резервируется           |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:8B | байт    | управление носителем    | биты 7-6 - скорость   |
     |       |         | дискетного устройства   | обмена для выбранного |
     |       |         |                         | устройства:           |
     |       |         |                         | 00 - 500 Кбайт/сек,   |
     |       |         |                         | 01 - 300 Кбайт/сек,   |
     |       |         |                         | 10 - 250 Кбайт/сек,   |
     |       |         |                         | 11 - резерв;          |
     |       |         |                         | биты 5-4 - время шага |
     |       |         |                         | головки для последнего|
     |       |         |                         | выбранного устройства;|
     |       |         |                         | биты 3-0 - резерв     |
     |-------|---------|-------------------------|-----------------------|
     | 40:8C | байт    | состояние контроллера   |                       |
     |       |         | жесткого диска          |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:8D | байт    | состояние регистра      |                       |
     |       |         | ошибок контроллера      |                       |
     |       |         | жесткого диска          |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:8E | байт    | управление пнрерыванием |                       |
     |       |         | от жесткого диска       |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:8F | байт    | резервируется           |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:90 | байт    | состояние носителя      |биты 7-6 - скорость    |
     |       |         | дискетного устройства 0 |обмена (как в 40:8B);  |
     |       |         |                         |бит 5 =1 - требование  |
     |       |         |                         |двойного шага головки; |
     |       |         |                         |бит 4 =1 - тип носителя|
     |       |         |                         |проверен;              |
     |       |         |                         |бит 3 - резерв;        |
     |       |         |                         |биты 2-0 - тип носителя|
     |       |         |                         |       /тип устройства:|
     |       |         |                         |000 - 360К/360К,       |
     |       |         |                         |       не проверен,    |
     |-------|---------|-------------------------|001 - 360К/1.2М        |
     | 40:91 | байт    | состояние носителя      |       не проверен,    |
     |       |         | дискетного устройства 1 |010 - 1.2M/1.2M,       |
     |       |         |                         |       не проверен,    |
     |       |         |                         |011 - 360К/360К,       |
     |       |         |                         |       проверен,       |
     |       |         |                         |100 - 360К/1.2M,       |
     |       |         |                         |       проверен,       |
     |       |         |                         |101 - 1.2М/1.2М,       |
     |       |         |                         |       проверен,       |
     |       |         |                         |110 - резерв,          |
     |       |         |                         |111 - ни один из       |
     |       |         |                         |  перечисленных выше   |
     |-------|---------|-------------------------|-----------------------|
     | 40:92 | слово   | резервируется           |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:94 | байт    | текущий цилиндр         |                       |
     |       |         | устройста 0             |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:95 | байт    | текущий цилиндр         |                       |
     |       |         | устройста 1             |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:96 | байт    | первый дополнительный   |  см. табл. 20         |
     |       |         | байт состояния          |                       |
     |       |         | клавиатуры              |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:97 | байт    | второй дополнительный   |  см. табл. 20         |
     |       |         | байт состояния          |                       |
     |       |         | клавиатуры              |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:98 | двойное | указатель флага         | сегментированный      |
     |       | слово   | завершения ожидания     | адрес                 |
     |-------|---------|-------------------------|-----------------------|
     | 40:9C | двойное | счетчик остатка времени | длинное целое         |
     |       | слово   | ожидания (мксек)        |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:A0 | байт    | флаг ожидания           | бит 7 =1 - установлено|
     |       |         |                         |       ожидание,       |
     |       |         |                         | биты 6-1 - резерв,    |
     |       |         |                         | бит 0  = 1 - вызвана  |
     |       |         |                         | функция 86H INT 15H   |
     |-------|---------|-------------------------|-----------------------|
     | 40:A1 | 7 байт  | резервируется           |                       |
     |-------|---------|-------------------------|-----------------------|
     | 40:A8 | двойное | указатель на область    | EGA или System/2  -   |
     |       | слово   | параметров дисплея      | см. раздел 32         |
     |-------|---------|-------------------------|-----------------------|
     | 40:AC |         |                         |                       |
     |  до   |         | резервируется           |                       |
     | 40:FF |         |                         |                       |
     |-------|---------|-------------------------|-----------------------|
     | 50:00 | байт    | состояние операции      |  см. INT 5            |
     |       |         | печати экрана           |                       |
     |-------|---------|-------------------------|-----------------------|
                    Таблица 18. Область данных БСВВ

     В System/2 поддерживается расширенная область данных БСВВ. При выполнении
теста включения питания в самых старших байтах памяти в пределах первых 640K
выделяется область, объема, кратного килобайту, которая используется как
расширение области данных БСВВ. Размер памяти в 40:13 соответственно
декрементируется. Первый байт оасширенной области данных БСВВ содержит ее
длину в килобайтах.
     Для доступа к расширенной области данных БСВВ полезна функция (AH) = 0C1H
INT 15H, возвращающая чегментый адрес области. Для проверки существования
расширенной области БСВВ применяется функция (AH) = 0C0H INT 15H.

назад

        32. Область сохранения параметров дисплея

назад

        32.1. Первичная область сохранения параметров EGA и System/2

     Для адаптера EGA и в System/2 двойное слово 40:A8 указывает на 28-байтовую
область сохранения параметров дисплея, в которой содержится информация о
наборе функций, допустимых для смены режима. Область сохранения параметров
дисплея состоит из 7 двойных слов:
     1. Указатель таблицы параметров дисплея. Указатель
инициализируется БСВВ на таблицу параметров (см. вектор 1DH).
     2. Указатель динамической области сохранения (не используется в
модели 30 System/2). Инициализируется как 0:0, и, когда не равен 0:0,
указывает на область ОЗУ,  в которой хранятся значения 16 регистров
палитры и регистра бордюра EGA. Под область сохранения должно быть
выделено не менее 256 байтов памяти.
     3. Указатель вспомогательного знакогенератора для текстовых режимов.
Инициализируется как 0:0, и, когда не равен 0:0,
указывает на область ОЗУ, в которой располагается следующая таблица:
     0 (байт) - размер изображения знака в байтах;
     1 (байт) - блок для загрузки (обычно 0);
     2 (слово) - счетчик записанных байтов (обычно 256);
     4 (слово) - смещение знака (обычно 0);
     6 (двойное слово) - указатель на таблицу фонтов;
    0A (байт) - отображаемая строка (если 0FFH, то используется последняя
                строка дисплея, иначе указанное значение);
    0B (байты) - последовательность номеров режимов (байты), для которых
                пригодно данное описание таблицы фонтов; конец
                последовательности указывается байтом 0FFH.
     4. Указатель вспомогательного знакогенератора для графических режимов.
Инициализируется как 0:0, и, когда не равен 0:0,
указывает на область ОЗУ, в которой располагается следующая таблица:
     0 (байт) - отображаемая строка;
     1 (слово) - число байтов на знак;
     3 (двойное слово) - указатель на таблицу фонтов;
     5. Указатель вторичной области сохранения (не используется с EGA
и  в модели 30 System/2). Инициализируется БСВВ.
     6 - 7. Резервируются и устанавливаются в 0:0.

назад

      32.2. Вторичная область сохранения параметров дисплея System/2

     В System/2 (исключая модель 30) в ппрвичной области сохранения
содержится указатель на следующую вторичную область сохранения параметров
дисплея:

     00 (слово). Длина вторичной области сохранения. Инициализируется БСВВ.

     02 (двойное слово). Указатель таблицы DCC.
        Таблица DCC (сочетания кодов дисплея) расположена в ПЗУ и имеет
следующий формат:
        байт 0 - число элементов в таблице DCC,
        байт 1 - номер версии таблицы,
        байт 2 - максимальный код типа дисплея,
        байт 3 - резерв
        0000    - элемент 0 - нет дисплеев;
        0001    - элемент 1 - MDA
        0002    - элемент 2 - CGA
        0201    - элемент 3 - CGA+MDA
        0004    - элемент 4 - EGA
        0401    - элемент 5 - EGA+MDA
        0005    - элемент 6 - MEGA
        0205    - элемент 7 - MEGA+CGA
        0006    - элемент 8 - PGC
        0106    - элемент 9 - PGC+MDA
        0506    - элемент 10 - PGC+MEGA
        0008    - элемент 11 - CVGA
        0108    - элемент 12 - CVGA+MDA
        0007    - элемент 13 - MVGA
        0207    - элемент 14 - MVGA+CGA
        0206    - элемент 15 - MVGA+PGC
(Обозначения: MDA - адаптер монохромного дисплея и печати,
              CGA - адаптер цветного графического монитора,
              EGA - адаптер расширенной графики,
              MEGA - EGA с монохромным дисплеем,
              PGC - контроллер профессиональной графики,
              VGA - адаптер System/2
              MVGA - VGA с монохромным дисплеем,
              CVGA - VGA с цветовым дисплеем).

     06 (двойное слово). Указатель второго вспомогательного знакогенератора
для текстовых режимов. Инициализируется как 0:0, и, когда не равен 0:0,
указывает на область ОЗУ, в которой располагается следующая таблица:
     0 (байт) - размер изображения знака в байтах;
     1 (байт) - блок для загрузки (должен быть не равным 0);
     2 (байт) - резерв;
     3 (двойное слово) - указатель на таблицу фонтов;
    0B (байты) - последовательность номеров режимов (байты), для которых
                пригодно данное описание таблицы фонтов; конец
                последовательности указывается байтом 0FFH.

     0A (двойное слово). Указатель таблицы палитры пользователя.
Инициализируется как 0:0, и, когда не равен 0:0,
указывает на область ОЗУ, в которой располагается следующая таблица:
     0 (байт) - флаг подчеркивания:
                0 - включен,
                1 - игнорируется,
                0FFH - выключен,
     1 (байт) - резерв;
     2 (слово) - резерв;
     4 (слово) - внутренний счетчик палитры (0-17, обычно 17);
     6 (слово) - внутренний индекс палитры (0 -16, обыяно 0);
     8 (двойное слово) - указатель на внутреннюю палитру;
    0C (слово) - внешний счетчик палитры (0 -256, обычно 256);
    0E (слово) - внешний индекс палитры (0-255, обычно 0);
    10 (двойное слово) - указатель внешней палитры;
    14 (байты) -  последовательность номеров режимов (байты), для которых
                 пригодно данное описание палитры; конец
                 последовательности указывается байтом 0FFH.

     0E (три двойных слова) - резерв; устанавливаются в 0:0

назад

      33. Специальные средства и возможности

назад

      33.1. Разделение прерываний

     В этом разделе обсуждается протокол, позволяющий нескольким аппаратным
адаптерам пользоваться общей линией запроса прерывания. Протокол пригоден
для всех моделей персональных компьютеров IBM, включая System/2.
Обработчики прерываний отдельных адаптеров связываются в список.

     1. Предостережения.

     При разработке программных средств разделения прерываний необходимо
учитывать следующие обстоятельства:
     - протокол разделения прерываний пригоден для выполнения только при работе
процессора в режиме реальной адресации; он непригоден, если хотя бы один
обработчик прерываний работает в режиме виртуальной адресации;
     - протокол разделения прерываний не обязательно совместим со всеми
операционными системами;
     - прежде чем управление получит следующий обработчик прерывания в
списке, прерывания должны быть запрещены; это позволяет каждому обработчику
прерываний списка вызываться так, как если бы он вызывался аппаратным
прерыванием;
     - прерывания должны быть запрещены прежде, чем будет выдана
команда EOI для ПКП, и не должны разрешаться в обработчике прерываний, чтобы
гарантировать выполнение команды IRET. Флаги процессора должны быть сохранены
и восстановлены перед вызовом следующего обработчика списка; стек должен
быть защищен от бесконтрольного роста;
     - обработчик прерывания должен содержать модуль, который будет
выполнен при включении питания, и этот модуль должен запретить прерывания
от адаптера, поддерживаемого данным обработчиком. Выполнение этого модуля
должно гарантировать, что адаптер будет пассивным после выполнения системного
сброса.

     2. Сброс запроса прерывания (IRQ)

     Механизм прерываний Micro Channel в System/2 чувствителен к уровню
сигналов, в противоположность механизму стандартных PC, чувствительному
к фронтам сигналов, что упрощает аппаратные средства поддержки прерываний
в адаптерах.
     Запрос прерывания порта PC неявно сбрасывается фронтом сигнала.
В Micro Channel сигнал запроса прерывания может быть явно сброшен программой
обработки прерывания для исполнителя на шине. Примером исполнмтеля, неявно
сбрасывающего запросы прерывания, может cлужить системный таймер.

     3. Требования к программам разделения прерываний

     Программные средства разделения прерываний, спроектированные для
Micro Channel, должны сбрасывать запроcы прерываний. Список обработчиков
прерываний должен поддерживать все аапаратные прерывания. Связь программных
модулей в список выполняется  на основе специального 16-байтового заголовка,
который должен располагаться в каждом модуле, начиная с его третьего байта.
Эти требования необходимы для независимости модулей обработки
прерываний от аппаратной среды.
     Программные средства обработки прерываний от всех адартеров, разделяющих
линию запроса прерывания, должны включать в себя стандартные срежства разделения
прерываний. Модули разделения прерываний, работающие в многозадачной среде,
должны поддерживать связь задач обработки прерывания в список, разделение
прерывания между активными задачами и исключение завершенных задач из списка.
     Чтобы включить обработчик прерывания в список, вновь активированная задача
обработки прерывания размещает в области векторов прерывания адрес своей точки
входа обработки прерывания. Обработчик прерывания должен созранить вектор,
который он заменил, и использовать его для ссылки к следующему обработчику
списка. Старый вектор прерывания должен быть сохранен в области с фиксированным
(известным системе) смещением относительно точки входа в обработчик прерывания.
     Когда система подтверждает запрос прерывания, каждый обработчик прерывания
должен определить, соответствует ли прерывание адаптеру, им поддерживаемому.
Это достигается чтением регистра состояния адаптера.
     Если обработчик прерывания распознает прерывание, то он должен его
обслужить, сбросив бит состояния прерывания, очистив прерывание, выдав EOI
в ПКП и, наконец, выдав команду IRET. Если обработчик не распознает прерывание,
то он должен передать управление предыдущему обработчику списка, адрес которого
в области векторов прерывания был заменен им при установке.
     Для того, чтобы исключить некоторый обработчик прерывания из списка,
нужно, прежде всего, локализовать его положение в списке. Это достигается
просмотром данных, начиная с области векторов прерываний, где установлен адрес
последнего обработчика списка, поскольку адрес каждого предыдущего обработчика
сохранен в следующем обработчике в области с фиксированным смещением.
Каждый обработчик прерывания содержит специальный маркер, анализ
которого позволяет проверить целостности списка, а первый обработчик сиписка,
кроме того, имеет специальный флаг, идентифицирующий его как первый.
Обработчик прерывания может исключить из списка только себя, но не
другой обработчик.
     Для тех случаев, когда исключаемый из списка обработчик прерывания
обнаруживает разрушение списка, Должна быть предусмотрена специальная
процедура восстановления, зависящая от применений.
     При системном сбросе или включении питания в каждом обработчике прерываний
должен быть выполнен специальный модуль, обкспечиваюший запрет прерываний
от устройств, им поддерживаемых.
     Операционные системы с динамическим перемещением программ, должна
поддерживать целостность списка обрабочиков прерывания, обрабатывая его как
единое целое.

     4. Структура и маркировка средств разделения прерываний

     Модуль обработки прерывания содержит специальные средства для поддержки
списочной структуры, размешенные в 16-байтовом заголовке формата:

     ENTRY:   JMP   SHORT BEGIN 	;точка входа
     FPTR     DD    0			;для точки входа предыдущего модуля
     SIGN     DW    424BH		;макркер для идентификации
     FLAGS    DB    0			;флаги
     FIRST    EQU   80H 		;флаг первого модуля в списке
	      JMP   SHORT RESET 	;переход к модулю инициализации
     RES      DB    7 DUP (0)		;резерв
BEGIN:	      . . . .			;фактическая точка входа
					;для обработки прерывания

     Модуль инициализации - это первый модуль обработчика прерываний,
вызываемый операционной системой. Он должен щапретить прерывания
от адаптера и вернуть управление системе.

     5. Соглашения для обработчиков прерываний в ПЗУ

     Адаптеры, обработчики которых размещены в ПЗУ, отличаются тем, что не
могут хранить FPTR в памяти; вместо этого они должны хранить эту информацию
в регистрах адаптера или в специальной памяти. Если адаптер используется
для разделения прерываний уровней  7 - 15, то он должен также хранить
флаг FIRST. Сохранение этой информации необходимо, поскольку нельзя
гарантировать, что обработчик ПЗУ всегда будет первым с списке и никогда
не будет из него исключен. Обработчик прерываний, размещенный в ПЗУ,
должен маркироваться словом нулей, размещенным с седьмого байта его кода.

     6. Пример

ROM_SEG SEGMENT AT 0F000H
	ORG	nnnn		;зависит от версиии БСВВ
DUMMY_IRET   LABEL  BYTE	;указатель "пустого" обработчика БСВВ
ROM_SEG ENDS

;адрес DUMMY_IRET может быть получен и из некоторого (неиспользуемого)
;вектора прерываний уровней 7 - 15

     ; Включение обработчика в список

CODE	SEGMENT
	PUSH	ES
	CLI			;запрещение прерываний
	ASSUME	CS:CODE,DS:CODE
	PUSH	ES
	MOV	AX,350FH	;получить вектор прерывания 15
	INT	21H
	MOV	SI,OFFSET CS:FPTR
	MOV	CS:[SI],BX	;сохранение указателя на
	MOV	CS:[SI+2],ES	;предыдущий обработчик
	CMP	BYTE PTR ES:[BX],0CFH	;проверка на IRET - см. замечание
	JE	SET_FIRST
	CMP	WORD PTR ES:[BX+6],424BH
	JE	SET_VEC 	;проверка маркера
	MOV	AX,ES
	CMP	AX,0F000H
	JNE	SET_VEC 	;проверка пустого обработчика БСВВ
	ASSUME	ES:BIOS_SEG
	CMP	BX,OFFSET DUMMY_IRET
	JNE	SET_VEC 	;проверка пустого обработчика БСВВ
SET_FIRST:
	MOV	CS:FLAGS,FIRST	;флаг первого в списке
SET_VEC:
	POP	ES
	ASSUME	ES:NOTHING
	PUSH	DS
	LEA	DX,ENTRY
	MOV	AX,SEG ENTRY
	MOV	DS,AX
	MOV	AX,250FH	;установка вектора 0FH
	INT	21H		;на точку входа
	POP	DS
	IN	AL,21H
	JMP	SHORT $+2
	AND	AL,7FH		;размаскирование уровня 7
	OUT	21H,AL
	MOV	AL,67H
	JMP	SHORT $+2
	OUT	20H,AL		;разрешение прерываний уровня 7
	STI			;разрешение прерываний
	POP	ES
	. . . . .

;  Замечения: операционна система должна гарантировать, что векторы 7 - 15
;  указывают на корректные обработчики прерываний или на IRET.

CODE	ENDS

;	Обработка прерывания

USER_CARD  EQU	xxxx		;адрес регистра состояния адаптера
ISB	EQU	xx		;бит прерывания в состоянии адаптера
REARM	EQU	2F7H		;обший порт прерывания уровня 7 в System/2
HSEG	SEGMENT PARA
	ASSUME	CS:HSEG,DS:DSEG
ENTRY	PROC	FAR
	JMP	SHORT BEGIN
FPTR	DD	0		;область сохранения указателя
SIGN	DW	424BH		;маркер
FLAGS	DB	0		;флаги
FIRST	EQU	80H		;флаг первого обработчика в списке
	JMP	SHORT RESET	;на модуль инициализации
	DB	7 DUP (0)	;резерв
BEGIN:	STI			;начало обработки прерывания
	PUSH	...		;сохранение необходииых регистров
	MOV	DX,USER_CARD	;регистр состояния
	IN	AL,DX		;состояние
	TEST	AL,ISB
	JNZ	SERVICE 	;на обслуживание запроса
	TEST	CS:FLAGS,FIRST
	JNZ	EXIT
	POP	...		;восстановление всех регистров
	CLI
	JMP	CS:FPTR
SERVICE:	...		;обслуживание прерывания
EXIT:	CLI
	MOV	AL,20H
	OUT	20H,AL
	MOV	DX,REARM	;нужно только
	OUT	DX,AL		;в System/2
	POP	...
	IRET
RESET:		...		;запрет прерываний от адаптера
	RET
ENTRY	ENDP
HSEG	ENDS
	END	ENTRY

;	Исключение обработчика из списка

CODE	SEGMENT
	PUSH	DS
	PUSH	ES
	CLI			;запрещение прерываний
	MOV	AX,350FH
	INT	21H		;получить вектор 0FH
	MOV	CX,ES
	CMP	BX,OFFSET ENTRY
	JNE	M1
	CMP	AX,CX
	JNE	M1
	PUSH	DS

;	В области векторов прерываний ссылка на данный обработчик
;	установка вектора прерываний на обработчик прерывания, на который
;	указывает FPTR в данном обработчике

	LDS	DX,CS:FPTR
	MOV	AX,250FH
	INT	21H
	POP	DS
	JMP	M3

;	В области векторов прерываний ссылка на обработчик, отличный от данного
;	Поичу данного обработчика в списке

M1:		;(ES:BX)-->FPTR, CX=CS
	CMP	WORD PTR ES:[BX+6],4B42H
	JNE	...		;на обработку ошибок (неверный маркер)
	LDS	SI,ES:[BX+2]	;(DS:SI) --> FPTR
	CMP	SI,OFFSET ENTRY
	JNE	M2		;на продвижение по списку
	MOV	CX,DS
	CMP	AX,CX
	JNE	M2		;на продвижение по списку

;	Данный обработчик найден в списке
;	Ссылка на него заменяется значением его FPTR
;	Если он первый в списке, то флаг первого устанавлиается
;	в обработчике, который на него ссылался

	MOV	AX,WORD PTR CS:FPTR
	MOV	ES:[BX+2],AX
	MOV	AX,WORD PTR CS:FPTR+2
	MOV	ES:[BX+4],AX
	MOV	AL,CS:FLAGS
	AND	AL,FIRST
	OR	ES:[BX+6],AL
	JMP	M3

;	продвижение по списку

M2:	MOV	BX,SI
	PUSH	DS
	POP	ES
	JMP	M1
M3:	STI			:разрешение прерываний
	POP	ES
	POP	DS
	. . . . .

назад

      33.2. Адаптеры в ПЗУ

     БСВВ обеспечивает метод подключения к системе адаптеров, обладающих
собственной памятью в ПЗУ. Во время выполнения теста инициализации
для функций БСВВ устанавливаются векторы прерываний. После того как
умолчания для этих векторов установлены, адресное простарнство
ПЗУ сканируется с целью обнаружения корректных модулей адаптеров. Эти
модули получают управление и могут заменить векторы функций БСВВ.
     Адресное пространство ПЗУ можно считать разбитым на две части:
область от C000H до C7FFFH сканируется раньше выполнения большинства
тестов, остальное адресное пространство C8000H - EFFFFH  (В System/2
C8000H - DFFFFH) сканируется после выполнения большинства тестов.
Первая область может содержать ПЗУ адаптеров используемых процедурами
инициализации (например, ПЗУ дисплея).	Обе области сканируются с шагом
равным 2Кбайта в поисках корретктых модулей ПЗУ адаптеров.
     Корректный модуль ПЗУ содержит следующую информацию:
     байт 0 - 55H,
     байт 1 - 0AAH,
     байт 2 - длина модуля в 512-байтовых единицах (максимально 64К);
     байт 3 - точка входа в модуль инициализации, вызываемый из БСВВ
при выполнении тестов включения питания.
     Кроме того, сумма по модулю 256 всех батов корректного модуля должна
быть равна 0.
     Модуль инициализации вызывается инструкцией межсегментного вызова
и должен вернуть управление БСВВ инструкцией межсегментного возврата.

     Замечания: 1 (PC Convertible).  Если модуль инициализации адаптера
распознает ошибку, то он может сообщить о ней БСВВ, установив в 1 бит 4
байта 40:12, и разместив номер устройства в (AH) и код ошибки в (AL).
Если ошибки не обнаружено, иодуль должен сбросить бит 4 байта 40:12.
     2 (PC Convertible). Сканирование адресов C0000H - C7FFFH устанавливает
тип дисплея, иак что корректный модуль должен вернуть:
     (BH) = 0 - нет адаптера дисплея (или неработоспособен),
     (BH) = 2 - адаптер типа CGA,
     (BH) = 4 - адартер типа монохромного.
     3 (Sytem/2). ПЗУ адаптера дисплея System/2 должно содержать
маркер, идентифицирующий адаптер. Этот маркер начинактся с байта 0CH
в адресном пространстве ПЗУ и кодируется следующим образом:
	77H, 0CCH, 'VIDEO ',
и далее 4 байта параметров программируемого выбора режима (POS - см. INT 10H).

назад

     33.3. Совместимость функций дисплеев.

     Следующие процедуры рекомендуется применять в прикладных программах
для обеспечения независимости от адаптера дисплея.

     1. Тест типа дисплея

     Для определения типа установленного адаптера можно выполнить следующую
процедуру:
     1) вызвать функцию (AX) = 1A00H прерывания 10H.
     Если функция вернет в (AL) значение 1AH, то информация в (BX)
определяет окружение дисплея: (BL) - код активного дисплея, (BH), если не
равно 0,- код альтернативного дисплея.
     Если функция вернет в (AL) значение, отличное от 1AH, то она не
поддерживается, и можно
     2) вызвать функцию (AH) = 10H, (BL) = 10H прерывания 10H.
     Если функция вернет в (AL) значение 10H, то установлен адаптер EGA.
     Если функция вернет другое значение, то установлен либо CGA, лмбо
адаптер монохромного дисплея. для их различения можно
     3) проверить адрес начала буфера дисплея:
     0B8000H - установлен адаптер CGA (или совместисый),
     0B0000H - установлен монохромный адаптер.

     2. Переключение режимов дисплея.

     Тест типа дисплея позволяет определить допустимые режимы дисплея.
Возможны три случая:
     1) Если установлен монохромный адаптер, то допускаются только функции
монохромного дисплея; если установлен CGA, то допускаются только функции
цветного дисплея.
     2) Допускается оба набора функций, один набор поддерживает цвет, другой -
монохромные режимы. Для переключения набора функций прикладная программа
должна изменить биты режима дисплея (биты 4 и 5 байта 40:10) и выполнить
функцию (AH) = 0 INT 10H.
     3) Общий набор функций поддерживает как монохромные, так и цветные режимы.
Чтобы распознать этот случай, следует вызвать функцию (AH) = 1BH прерывания
10H. Если она вернет значение (AL), отличное от 1BH, то общий набор функций
не поддерживается, и имеет место случай 2. Если вернется (AL) = 1BH, то
следует определить, являются ли активными все режимы всех дисплеев. Если они
активны, то система сама будет изменять биты окружения дисплея при вызовеи
замены режима (AH) = 0 INT 10H, иначе - имеет место случай 2.

назад

     33.4. Обеспечение мультизадачности

     Все версии БСВВ, кроме ранних, обеспечивают некоторые сигналы для
поддержки многозадачных операционных систем. Всякий раз, когда БСВВ
ожидает данные от устройства, выдается сигнал (WAIT), которым может воспользоваться
система для прекращения ожидания. Аналогичный сигнал (POST) выдается и в те моменты,
когда БСВВ завершает обработку прерывания от устройства.
     Следующие замечания относятся только к случаю, когда процессор
работает в режиме реальной адресации.
     Программа ответственна за корректное использование сигналов WAIT и POST.
и за организацию последовательного доступа к устройствам. Код БСВВ не
является реентерабельным.
     В диспетчере задач многозадасной операционной системы необходимо
обеспечить следующие четыре интерфейса:
     1) инициализация. Диспетчер должен определить новые обработчики функций
(AH)= 90H и (AH) = 91H прерывания 15H, и должен направлять в БСВВ вызовы
всех других функций INT 15H.
     2) обеспечение поледовательного доступа. Диспетчер должен гарантировать
последовательное использование драйверов. Повторный вход в драйвер приведет
к ошибке.
     3) ожидание. Перед тем как перейти к ожиданию, БСВВ выдает прерывание
15H с (AH) = 90H (WAIT). В этот момент диспетчер должен сохранить состояние
задачи и может перейти к другой задаче. Это позволяет приостанавливать выполнение
задачи до освобождения устройства.
     4) прерывание. Всякий раз, кода БСВВ устанавливает флаг случившегося
прерывания для некоторого цикла ожидания, вызывается функция (AH) = 91H
прерывания 15H (POST). В этот момент диспетчер задач должен установить
флаг готовности к продолжению соответстсующей задачи и вернуть управление
обработчику прерываний.
     Сигнал WAIT поддерживается для трех типов устройств:
     (AL) = 0, 1,..., 7FH - последовательно используемые устройства. Код
доайвера такого устройства не является реентерабельным, и программа
должна обеспечивать последовательность запросов к устройству.
     (AL) = 80H, 81H,...,0BFH - реентерабельные устройства. Нет ограничений
на число задач, имеющих одновременно доступ к устройству. Чтобы отличать
запросы к устройству, используется (ES:BX).
     (AL) = 0C0H,0C1H,...,0FFH - непрерывающие устройства. Это просто
тайм-аут устройства (время зависит от устройства), и в дальнейшем не
будет сигнала POST. Диспетчер должен выполнить соответствующее действие
и выйти из цикла, для чего вернуть управление в БСВВ c (CF) = 1.

назад

     33.5. Идентификация модели компьютера

     БСВВ содержит байт идентификации компьютера во адресу F000:FFFE.
В некоторых компьютерах можно получить дополнительную информацию
о модификация БСВВ вызовом функции (AH) = 0C0H INT 15H.

	|-----------|-----------|------|----------|------------|
	|  модель   | дата БСВВ | код  |  код	  | код версии |
	|	    |		|модели|исполнения|    БСВВ    |
	|-----------|-----------|------|----------|------------|
	| PC	    | 04/24/81	|  FF  |    -	  |	 -     |
	| PC	    | 10/19/81	|  FF  |    -	  |	 -     |
	| PC	    | 10/27/82	|  FF  |    -	  |	 -     |
	| PC XT     | 11/08/82	|  FE  |    -	  |	 -     |
	| PC XT     | 01/10/86	|  FB  |   00	  |	01     |
	| PC XT     | 05/09/86	|  FB  |   00	  |	02     |
	| PCjr	    | 06/01/83	|  FD  |    -	  |	 -     |
	| AT	    | 01/10/84	|  FC  |    -	  |	 -     |
	| AT	    | 06/10/85	|  FC  |   00	  |	01     |
	| AT	    | 11/15/85	|  FC  |   01	  |	00     |
	| PC XT 286 | 04/21/86	|  FC  |   02	  |	00     |
	| PC Convert| 09/13/85	|  F9  |   00	  |	00     |
	| System/2: |		|      |	  |	       |
	| модель 30 | 09/02/86	|  FA  |   00	  |	00     |
	| модель 50 |недоступна |  FC  |   04	  |	00     |
	| модель 60 |недоступна |  FC  |   05	  |	00     |
	| модель 80 |недоступна |  F8  |   00	  |	00     |
	| модель 80 |недоступна |  F8  |   01	  |	00     |
	|-----------|-----------|------|----------|------------|
	Таблица 19. Идентицикация моделей компьюьеров

назад

     33.6. Клавиатурные коды

	|-------|-----|-------------------------------------------|
	| байт	| бит |      состояние при единичном бите	  |
	|-------|-----|-------------------------------------------|
	| 40:17 |  7  |  состояние вставки (INS)		  |
	|	|  6  |  состояние CAPS LOCK			  |
	|	|  5  |  состояние NUM LOCK			  |
	|	|  4  |  состояние SCROLL LOCK			  |
	|	|  3  |  нажата клавиша ALT			  |
	|	|  2  |  нажата клавиша CTRL			  |
	|	|  1  |  нажата клавиша Shift (левая)		  |
	|	|  0  |  нажата клавиша Shift (правая)		  |
	|-------|-----|-------------------------------------------|
	| 40:18 |  7  |  нажата клавиша INS			  |
	|	|  6  |  нажата клавиша CLK			  |
	|	|  5  |  нажата клавиша NLK			  |
	|	|  4  |  нажата клавиша S/B			  |
	|	|  3  |  состояние паузы			  |
	|	|  2  |  нажата клавиша SysREQ			  |
	|	|  1  |  нажата левая клавиша CTRL		  |
	|	|  0  |  нажата левая клавиша ALT		  |
	|-------|-----|-------------------------------------------|
	| 40:96 |  7  |  выполняется чтение ID клавиатуры	  |
	|	|  6  |  принят первый знак ID			  |
	|	|  5  | 					  |
	|	|  4  |  101/102-клавишная клавиатура		  |
	|	|  3  |  нажата правая клавиша CTRL		  |
	|	|  2  |  нажата правая клавиша ALT		  |
	|	|  1  |  принят код E0				  |
	|	|  0  |  принят код E1				  |
	|-------|-----|-------------------------------------------|
	| 40:97 |  7  |  флаг ошибки интерфейса 		  |
	|	|  6  |  обновление индикатора режима		  |
	|	|  5  |  флаг приема сигнала окончания сброса	  |
	|	|  4  |  подтверждение принято			  |
	|	|  3  |  резерв (0)				  |
	|	|  2  | |		    |			  |
	|	|  1  | |биты состояния LED |			  |
	|	|  0  | |		    |			  |
	|-------|-----|-------------------------------------------|
	    Таблица 20. Состояние регистров клавиатуры.

     |---------|----------------------------------------------------|
     |	       |		 клавиатура			    |
     | клавиша |-----------|------------|------------|--------------|
     |	       | IBM 83/84 | IBM 101/102| Искра (ЛАТ)| Искра (РУС)  |
     |---------|-----------|------------|------------|--------------|
     |								    |
     |			нижний регистр				    |
     |								    |
     |	ESC    |  01/1B    |	01/1B	|   01/1B    |	 01/1B	    |
     |	 1     |  02/31    |	02/31	|   02/31    |	 02/31	    |
     |	 2     |  03/32    |	03/32	|   03/32    |	 03/32	    |
     |	 3     |  04/33    |	04/33	|   04/33    |	 04/33	    |
     |	 4     |  05/34    |	05/34	|   05/34    |	 05/34	    |
     |	 5     |  06/35    |	06/35	|   06/35    |	 06/35	    |
     |	 6     |  07/36    |	07/36	|   07/36    |	 07/36	    |
     |	 7     |  08/37    |	08/37	|   08/37    |	 08/37	    |
     |	 8     |  09/38    |	09/38	|   09/38    |	 09/38	    |
     |	 9     |  0A/39    |	0A/39	|   0A/39    |	 0A/39	    |
     |	 0     |  0B/30    |	0B/30	|   0B/30    |	 0B/30	    |
     |	 -     |  0C/2D    |	0C/2D	|   0C/2D    |	 0C/2D	    |
     |	 =     |  0D/3D    |	0D/3D	|   0D/3D    |	 0D/3D	    |
     |	 BS    |  0E/08    |	0E/08	|   0E/08    |	 0E/08	    |
     |	TAB    |  0F/09    |	0F/09	|   0F/09    |	 0F/09	    |
     |	 q     |  10/71    |	10/71	|   10/71    |	 10/	( ) |
     |	 w     |  11/77    |	11/77	|   11/77    |	 11/	    |
     |	 e     |  12/65    |	12/65	|   12/65    |	 12/	    |
     |	 r     |  13/72    |	13/72	|   13/72    |	 13/	    |
     |	 t     |  14/74    |	14/74	|   14/74    |	 14/	    |
     |	 y     |  15/79    |	15/79	|   15/79    |	 15/	    |
     |	 u     |  16/75    |	16/75	|   16/75    |	 16/	    |
     |	 i     |  17/69    |	17/69	|   17/69    |	 17/	    |
     |	 o     |  18/6F    |	18/6F	|   18/6F    |	 18/	    |
     |	 p     |  19/70    |	19/70	|   19/70    |	 19/	    |
     |	 [     |  1A/5B    |	1A/5B	|   1A/5B    |	 1A/5B	    |
     |	 ]     |  1B/5D    |	1B/5D	|   1B/5D    |	 1B/5D	    |
     |	Return |  1C/0D    |	1C/0D	|   1C/0D    |	 1C/0D	    |
     |	CTRL   |   **	   |	 **	|     **     |	   **	    |
     |	 a     |  1E/61    |	1E/61	|   1E/61    |	 1E/	    |
     |	 s     |  1F/73    |	1F/73	|   1F/73    |	 1F/	    |
     |	 d     |  20/64    |	20/64	|   20/64    |	 20/	    |
     |	 f     |  21/66    |	21/66	|   21/66    |	 21/	    |
     |	 g     |  22/67    |	22/67	|   22/67    |	 22/	    |
     |	 h     |  23/68    |	23/68	|   23/68    |	 23/	    |
     |	 j     |  24/6A    |	24/6A	|   24/6A    |	 24/	    |
     |	 k     |  25/6B    |	25/6B	|   25/6B    |	 25/	    |
     |	 l     |  26/6C    |	26/6C	|   26/6C    |	 26/	    |
     |	 ;     |  27/3B    |	27/3B	|   27/3B    |	 27/3B	    |
     |	 '     |  28/27    |    28/27   |   28/27    |   28/27      |
     |	 `     |  29/60    |	29/60	|   29/60    |	 29/60	    |
     |	Shift  |   **	   |	 **	|     **     |	   **	    |
     | (левый) |	   |		|	     |		    |
     |	 \     |  2B/5C    |	2B/5C	|   2B/5C    |	 2B/5C	    |
     |	 z     |  2C/7A    |	2C/7A	|   2C/7A    |	 2C/	    |
     |	 x     |  2D/78    |	2D/78	|   2D/78    |	 2D/	    |
     |	 c     |  2E/63    |	2E/63	|   2E/63    |	 2E/	    |
     |	 v     |  2F/76    |	2F/76	|   2F/76    |	 2F/	    |
     |	 b     |  30/62    |	30/62	|   30/62    |	 30/	    |
     |	 n     |  31/6E    |	31/6E	|   31/6E    |	 31/	    |
     |	 m     |  32/6D    |	32/6D	|   32/6D    |	 32/	    |
     |	 ,     |  33/2C    |	33/2C	|   33/2C    |	 33/2C	    |
     |	 .     |  34/2E    |	34/2E	|   34/2E    |	 34/2E	    |
     |	 /     |  35/2F    |	35/2F	|   35/2F    |	 35/2F	    |
     |	Shift  |   **	   |	 **	|     **     |	   **	    |
     | (правый)|	   |		|	     |		    |
     |	 *     |  37/2A    |	37/2A	|   37/2A    |	 37/2A	    |
     |	ALT    |   **	   |	 **	|     **     |	   **	    |
     | пробел  |  39/20    |	39/20	|   39/20    |	 39/20	    |
     |	CLK    |   **	   |	 **	|     **     |	   **	    |
     |	 F1    |  3B/00    |	3B/00	|   3B/00    |	 3B/00	    |
     |	 F2    |  3C/00    |	3C/00	|   3C/00    |	 3C/00	    |
     |	 F3    |  3D/00    |	3D/00	|   3D/00    |	 3D/00	    |
     |	 F4    |  3E/00    |	3E/00	|   3E/00    |	 3E/00	    |
     |	 F5    |  3F/00    |	3F/00	|   3F/00    |	 3F/00	    |
     |	 F6    |  40/00    |	40/00	|   40/00    |	 40/00	    |
     |	 F7    |  41/00    |	41/00	|   41/00    |	 41/00	    |
     |	 F8    |  42/00    |	42/00	|   42/00    |	 42/00	    |
     |	 F9    |  43/00    |	43/00	|   43/00    |	 43/00	    |
     |	 F10   |  44/00    |	44/00	|   44/00    |	 44/00	    |
     |	 F11   |   нет	   | (*)85/00	|     нет    |	   нет	    |
     |	 F12   |   нет	   | (*)86/00	|     нет    |	   нет	    |
     |	NLK    |   **	   |	 **	|     **     |	   **	    |
     |	S/B    |   **	   |	 **	|     **     |	   **	    |
     |	(7)    |  47/00    |	47/00	|    47/00   |	  47/00     |
     |	(8)    |  48/00    |	48/00	|    48/00   |	  48/00     |
     |	(9)    |  49/00    |	49/00	|    49/00   |	  49/00     |
     |	(-)    |  4A/2D    |	4A/2D	|    4A/2D   |	  4A/2D     |
     |	(4)    |  4B/00    |	4B/00	|    4B/00   |	  4B/00     |
     |	(5)    |  4C/00    |	4C/00	|    4C/00   |	  4C/00     |
     |	(6)    |  4D/00    |	4D/00	|    4D/00   |	  4D/00     |
     |	(+)    |  4E/2B    |	4E/2B	|    4E/2B   |	  4E/2B     |
     |	(1)    |  4F/00    |	4F/00	|    4F/00   |	  4F/00     |
     |	(2)    |  50/00    |	50/00	|    50/00   |	  50/00     |
     |	(3)    |  51/00    |	51/00	|    51/00   |	  51/00     |
     |	Ins    |  52/00    |	52/00	|    52/00   |	  52/00     |
     |	Del    |  53/00    |	53/00	|    53/00   |	  53/00     |
     | SysReq  |   **	   |	 нет	|     нет    |	   нет	    |
     | Key 45  |   нет	   |	56/5C	|     нет    |	   нет	    |
     | Enter   |   нет	   | (*)1C/0D	|     нет    |	   нет	    |
     |	 /     |   нет	   | (*)35/2F	|     нет    |	   нет	    |
     | PrtSc   |   нет	   |	 **	|     нет    |	   нет	    |
     | Pause   |   нет	   |	 **	|     нет    |	   нет	    |
     | Номе    |   нет	   | (*)47/00	|     нет    |	   нет	    |
     | Up Arrow|   нет	   | (*)48/00	|     нет    |	   нет	    |
     | PageUp  |   нет	   | (*)49/00	|     нет    |	   нет	    |
     |Left Arr |   нет	   | (*)4B/00	|     нет    |	   нет	    |
     |Right Arr|   нет	   | (*)4D/00	|     нет    |	   нет	    |
     |	 End   |   нет	   | (*)4F/00	|     нет    |	   нет	    |
     |Down Arr |   нет	   | (*)50/00	|     нет    |	   нет	    |
     |PageDown |   нет	   | (*)51/00	|     нет    |	   нет	    |
     | Insert  |   нет	   | (*)52/00	|     нет    |	   нет	    |
     | Delete  |   нет	   | (*)53/00	|     нет    |	   нет	    |
     |---------|-----------|------------|------------|--------------|
     |								    |
     |			верхний регистр 			    |
     |								    |
     |	ESC    |  01/1B    |	01/1B	|   01/1B    |	 01/1B	    |
     |	 !     |  02/21    |	02/21	|   02/21    |	 02/21	    |
     |	 @     |  03/40    |	03/40	|   03/40    |	 03/40	    |
     |	 #     |  04/23    |	04/23	|   04/23    |	 04/23	    |
     |	 $     |  05/24    |	05/24	|   05/24    |	 05/24	    |
     |	 %     |  06/25    |	06/25	|   06/25    |	 06/25	    |
     |	 ^     |  07/5E    |	07/5E	|   07/5E    |	 07/5E	    |
     |	 &     |  08/26    |	08/26	|   08/26    |	 08/26	    |
     |	 *     |  09/2A    |	09/2A	|   09/2A    |	 09/2A	    |
     |	 (     |  0A/28    |	0A/28	|   0A/28    |	 0A/28	    |
     |	 )     |  0B/29    |	0B/29	|   0B/29    |	 0B/29	    |
     |	 _     |  0C/5F    |	0C/5F	|   0C/5F    |	 0C/5F	    |
     |	 +     |  0D/2B    |	0D/2B	|   0D/2B    |	 0D/2B	    |
     |	 BS    |  0E/08    |	0E/08	|   0E/08    |	 0E/08	    |
     |	TAB    |  0F/00    |	0F/00	|   0F/00    |	 0F/00	    |
     |	 Q     |  10/51    |	10/51	|   10/51    |	 10/	( ) |
     |	 W     |  11/57    |	11/57	|   11/57    |	 11/	    |
     |	 E     |  12/45    |	12/45	|   12/45    |	 12/	    |
     |	 R     |  13/52    |	13/52	|   13/52    |	 13/	    |
     |	 T     |  14/54    |	14/54	|   14/54    |	 14/	    |
     |	 Y     |  15/59    |	15/59	|   15/59    |	 15/	    |
     |	 U     |  16/55    |	16/55	|   16/55    |	 16/	    |
     |	 I     |  17/49    |	17/49	|   17/49    |	 17/	    |
     |	 O     |  18/4F    |	18/4F	|   18/4F    |	 18/	    |
     |	 P     |  19/50    |	19/50	|   19/50    |	 19/	    |
     |	 {     |  1A/7B    |	1A/7B	|   1A/7B    |	 1A/7B	    |
     |	 }     |  1B/7D    |	1B/7D	|   1B/7D    |	 1B/7D	    |
     | Return  |  1C/0D    |	1C/0D	|   1C/0D    |	 1C/0D	    |
     |	CTRL   |   **	   |	 **	|     **     |	   **	    |
     |	 A     |  1E/41    |	1E/41	|   1E/41    |	 1E/	    |
     |	 S     |  1F/53    |	1F/53	|   1F/53    |	 1F/	    |
     |	 D     |  20/44    |	20/44	|   20/44    |	 20/	    |
     |	 F     |  21/46    |	21/46	|   21/46    |	 21/	    |
     |	 G     |  22/47    |	22/47	|   22/47    |	 22/	    |
     |	 H     |  23/48    |	23/48	|   23/48    |	 23/	    |
     |	 J     |  24/4A    |	24/4A	|   24/4A    |	 24/	    |
     |	 K     |  25/4B    |	25/4B	|   25/4B    |	 25/	    |
     |	 L     |  26/4C    |	26/4C	|   26/4C    |	 26/	    |
     |	 :     |  27/3A    |	27/3A	|   27/3A    |	 27/3A	    |
     |	 "     |  28/22    |    28/22   |   28/22    |   28/22      |
     |	 ~     |  29/7E    |	29/7E	|   29/7E    |	 29/7E	    |
     |	Shift  |   **	   |	 **	|     **     |	   **	    |
     | (левый) |	   |		|	     |		    |
     |	 |     |  2B/7C    |	2B/7C	|   2B/7C    |	 2B/7C	    |
     |	 Z     |  2C/5A    |	2C/5A	|   2C/5A    |	 2C/	    |
     |	 X     |  2D/58    |	2D/58	|   2D/58    |	 2D/	    |
     |	 C     |  2E/43    |	2E/43	|   2E/43    |	 2E/	    |
     |	 V     |  2F/56    |	2F/56	|   2F/56    |	 2F/	    |
     |	 B     |  30/42    |	30/42	|   30/42    |	 30/	    |
     |	 N     |  31/4E    |	31/4E	|   31/4E    |	 31/	    |
     |	 M     |  32/4D    |	32/4D	|   32/4D    |	 32/	    |
     |	 <     |  33/3C    |	33/3C	|   33/3C    |	 33/3C	    |
     |	 >     |  34/3E    |	34/3E	|   34/3E    |	 34/3E	    |
     |	 ?     |  35/3F    |	35/3F	|   35/3F    |	 35/3F	    |
     |	Shift  |   **	   |	 **	|     **     |	   **	    |
     | (правый)|	   |		|	     |		    |
     |	 *     |   **	   |	37/2A	|     **     |	   **	    |
     |	ALT    |   **	   |	 **	|     **     |	   **	    |
     | пробел  |  39/20    |	39/20	|   39/20    |	 39/20	    |
     |	CLK    |   **	   |	 **	|     **     |	   **	    |
     |	 F1    |  54/00    |	54/00	|   54/00    |	 54/00	    |
     |	 F2    |  55/00    |	55/00	|   55/00    |	 55/00	    |
     |	 F3    |  56/00    |	56/00	|   56/00    |	 56/00	    |
     |	 F4    |  57/00    |	57/00	|   57/00    |	 57/00	    |
     |	 F5    |  58/00    |	58/00	|   58/00    |	 58/00	    |
     |	 F6    |  59/00    |	59/00	|   59/00    |	 59/00	    |
     |	 F7    |  5A/00    |	5A/00	|   5A/00    |	 5A/00	    |
     |	 F8    |  5B/00    |	5B/00	|   5B/00    |	 5B/00	    |
     |	 F9    |  5C/00    |	5C/00	|   5C/00    |	 5C/00	    |
     |	 F10   |  5D/00    |	5D/00	|   5D/00    |	 5D/00	    |
     |	 F11   |   нет	   | (*)87/00	|     нет    |	   нет	    |
     |	 F12   |   нет	   | (*)88/00	|     нет    |	   нет	    |
     |	NLK    |   **	   |	 **	|     **     |	   **	    |
     |	S/B    |   **	   |	 **	|     **     |	   **	    |
     |	(7)    |  47/37    |	47/37	|    47/37   |	  47/37     |
     |	(8)    |  48/38    |	48/38	|    48/38   |	  48/38     |
     |	(9)    |  49/39    |	49/39	|    49/39   |	  49/39     |
     |	(-)    |  4A/2D    |	4A/2D	|    4A/2D   |	  4A/2D     |
     |	(4)    |  4B/34    |	4B/34	|    4B/34   |	  4B/34     |
     |	(5)    |  4C/35    |	4C/35	|    4C/35   |	  4C/35     |
     |	(6)    |  4D/36    |	4D/36	|    4D/36   |	  4D/36     |
     |	(+)    |  4E/2B    |	4E/2B	|    4E/2B   |	  4E/2B     |
     |	(1)    |  4F/31    |	4F/31	|    4F/31   |	  4F/31     |
     |	(2)    |  50/32    |	50/32	|    50/32   |	  50/32     |
     |	(3)    |  51/33    |	51/33	|    51/33   |	  51/33     |
     |	Ins    |  52/30    |	52/30	|    52/30   |	  52/30     |
     |	Del    |  53/2E    |	53/2E	|    53/2E   |	  53/2E     |
     | SysReq  |   **	   |	 нет	|     нет    |	   нет	    |
     | Key 45  |   нет	   |	56/7C	|     нет    |	   нет	    |
     | Enter   |   нет	   | (*)1C/0D	|     нет    |	   нет	    |
     |	 /     |   нет	   | (*)35/2F	|     нет    |	   нет	    |
     | PrtSc   |   нет	   |	 **	|     нет    |	   нет	    |
     | Pause   |   нет	   |	 **	|     нет    |	   нет	    |
     | Номе    |   нет	   | (*)47/00	|     нет    |	   нет	    |
     | Up Arrow|   нет	   | (*)48/00	|     нет    |	   нет	    |
     | PageUp  |   нет	   | (*)49/00	|     нет    |	   нет	    |
     |Left Arr |   нет	   | (*)4B/00	|     нет    |	   нет	    |
     |Right Arr|   нет	   | (*)4D/00	|     нет    |	   нет	    |
     |	 End   |   нет	   | (*)4F/00	|     нет    |	   нет	    |
     |Down Arr |   нет	   | (*)50/00	|     нет    |	   нет	    |
     |PageDown |   нет	   | (*)51/00	|     нет    |	   нет	    |
     | Insert  |   нет	   | (*)52/00	|     нет    |	   нет	    |
     | Delete  |   нет	   | (*)53/00	|     нет    |	   нет	    |
     |---------|-----------|------------|------------|--------------|
     |								    |
     |			состояние CTRL				    |
     |								    |
     |	ESC    |  01/1B    |	01/1B	|   01/1B    |	 01/1B	    |
     |	 1     |    -	   |	  -	|     -      |	   -	    |
     |	(NUL)  |  03/00    |	03/00	|   03/00    |	 03/00	    |
     |	 3     |    -	   |	  -	|     -      |	   -	    |
     |	 4     |    -	   |	  -	|     -      |	   -	    |
     |	 5     |    -	   |	  -	|     -      |	   -	    |
     |	(RS)   |    -	   |	  -	|     -      |	   -	    |
     |	 7     |    -	   |	  -	|     -      |	   -	    |
     |	 8     |    -	   |	  -	|     -      |	   -	    |
     |	 9     |    -	   |	  -	|     -      |	   -	    |
     |	 0     |    -	   |	  -	|     -      |	   -	    |
     |	 _     |  0C/1F    |	0C/1F	|   0C/1F    |	 0C/1F	    |
     |	 =     |    -	   |	  -	|     -      |	   -	    |
     |	(DEL)  |  0E/7F    |	0E/7F	|   0E/7F    |	 0E/7F	    |
     |	TAB    |    -	   | (*)94/00	|     -      |	   -	    |
     |	(DC1)  |  10/11    |	10/11	|   10/11    |	 10/11	    |
     |	(ETB)  |  11/17    |	11/17	|   11/17    |	 11/17	    |
     |	(ENQ)  |  12/05    |	12/05	|   12/05    |	 12/05	    |
     |	(DC2)  |  13/12    |	13/12	|   13/12    |	 13/12	    |
     |	(DC4)  |  14/14    |	14/14	|   14/14    |	 14/14	    |
     |	(EM)   |  15/19    |	15/19	|   15/19    |	 15/19	    |
     |	(NAK)  |  16/15    |	16/15	|   16/15    |	 16/15	    |
     |	(HT)   |  17/09    |	17/09	|   17/09    |	 17/09	    |
     |	(SI)   |  18/0F    |	18/0F	|   18/0F    |	 18/0F	    |
     |	(DLE)  |  19/10    |	19/10	|   19/10    |	 19/10	    |
     |	(ESC)  |  1A/1B    |	1A/1B	|   1A/1B    |	 1A/1B	    |
     |	(GS)   |  1B/1D    |	1B/1D	|   1B/1D    |	 1B/1D	    |
     |	(LF)   |  1C/0A    |	1C/0A	|   1C/0A    |	 1C/0A	    |
     |	CTRL   |   **	   |	 **	|     **     |	   **	    |
     |	(SOH)  |  1E/01    |	1E/01	|   1E/01    |	 1E/01	    |
     |	(DC3)  |  1F/13    |	1F/13	|   1F/13    |	 1F/13	    |
     |	(EOT)  |  20/04    |	20/04	|   20/04    |	 20/04	    |
     |	(ACK)  |  21/06    |	21/06	|   21/06    |	 21/06	    |
     |	(BEL)  |  22/07    |	22/07	|   22/07    |	 22/07	    |
     |	(BS)   |  23/08    |	23/08	|   23/08    |	 23/08	    |
     |	(LF)   |  24/0A    |	24/0A	|   24/0A    |	 24/0A	    |
     |	(VT)   |  25/0B    |	25/0B	|   25/0B    |	 25/0B	    |
     |	(FF)   |  26/0C    |	26/0C	|   26/0C    |	 26/0C	    |
     |	 :     |    -	   |	  -	|     -      |	   -	    |
     |	 "     |    -      |      -     |     -      |     -        |
     |	 ~     |    -	   |	  -	|     -      |	   -	    |
     |	Shift  |    -	   |	  -	|     -      |	   -	    |
     | (левый) |	   |		|	     |		    |
     |	FS     |  2B/1C    |	2B/1C	|   2B/1C    |	 2B/1C	    |
     |	(SUB)  |  2C/1A    |	2C/1A	|   2C/1A    |	 2C/1A	    |
     |	(CAN)  |  2D/18    |	2D/18	|   2D/18    |	 2D/18	    |
     |	(ETX)  |  2E/03    |	2E/03	|   2E/03    |	 2E/03	    |
     |	(SYN)  |  2F/16    |	2F/16	|   2F/16    |	 2F/16	    |
     |	(STX)  |  30/02    |	30/02	|   30/02    |	 30/02	    |
     |	(SO)   |  31/0E    |	31/0E	|   31/0E    |	 31/0E	    |
     |	(CR)   |  32/0D    |	32/0D	|   32/0D    |	 32/0D	    |
     |	 <     |    -	   |	  -	|     -      |	   -	    |
     |	 >     |    -	   |	  -	|     -      |	   -	    |
     |	 ?     |    -	   |	  -	|     -      |	   -	    |
     |	Shift  |    -	   |	  -	|     -      |	   -	    |
     | (правый)|	   |		|	     |		    |
     |	 *     |    -	   | (*)96/00	|      -     |	    -	    |
     |	ALT    |   **	   |	 **	|     **     |	   **	    |
     | пробел  |  39/20    |	39/20	|   39/20    |	 39/20	    |
     |	CLK    |    -	   |	  -	|     -      |	   -	    |
     |	 F1    |  5E/00    |	5E/00	|   5E/00    |	 5E/00	    |
     |	 F2    |  5F/00    |	5F/00	|   5F/00    |	 5F/00	    |
     |	 F3    |  60/00    |	60/00	|   60/00    |	 60/00	    |
     |	 F4    |  61/00    |	61/00	|   61/00    |	 61/00	    |
     |	 F5    |  62/00    |	62/00	|   62/00    |	 62/00	    |
     |	 F6    |  63/00    |	63/00	|   63/00    |	 63/00	    |
     |	 F7    |  64/00    |	64/00	|   64/00    |	 64/00	    |
     |	 F8    |  65/00    |	65/00	|   65/00    |	 65/00	    |
     |	 F9    |  66/00    |	66/00	|   66/00    |	 66/00	    |
     |	 F10   |  67/00    |	67/00	|   67/00    |	 67/00	    |
     |	 F11   |   нет	   | (*)89/00	|     нет    |	   нет	    |
     |	 F12   |   нет	   | (*)8A/00	|     нет    |	   нет	    |
     |	NLK    |    -	   |	  -	|     -      |	   -	    |
     |	S/B    |   **	   |	 **	|     **     |	   **	    |
     |	(7)    |  77/00    |	77/00	|    77/00   |	  77/00     |
     |	(8)    |    -	   | (*)8D/00	|      -     |	    -	    |
     |	(9)    |  84/00    |	84/00	|    84/00   |	  84/00     |
     |	(-)    |    -	   | (*)8E/00	|      -     |	    -	    |
     |	(4)    |  73/00    |	73/00	|    73/00   |	  73/00     |
     |	(5)    |    -	   | (*)8F/00	|      -     |	    -	    |
     |	(6)    |  74/00    |	74/00	|    74/00   |	  74/00     |
     |	(+)    |    -	   | (*)90/00	|      -     |	    -	    |
     |	(1)    |  75/00    |	75/00	|    75/00   |	  75/00     |
     |	(2)    |    -	   | (*)91/00	|      -     |	    -	    |
     |	(3)    |  76/00    |	76/00	|    76/00   |	  76/00     |
     |	Ins    |    -	   | (*)92/00	|      -     |	    -	    |
     |	Del    |    -	   | (*)93/00	|      -     |	    -	    |
     | SysReq  |   **	   |	 нет	|     нет    |	   нет	    |
     | Key 45  |   нет	   |	  -	|     нет    |	   нет	    |
     | Enter   |   нет	   | (*)1C/0A	|     нет    |	   нет	    |
     |	 /     |   нет	   | (*)  -	|     нет    |	   нет	    |
     | PrtSc   |   нет	   |	72/00	|     нет    |	   нет	    |
     | Pause   |   нет	   |	00/00	|     нет    |	   нет	    |
     | Номе    |   нет	   | (*)77/00	|     нет    |	   нет	    |
     | Up Arrow|   нет	   | (*)  -	|     нет    |	   нет	    |
     | PageUp  |   нет	   | (*)84/00	|     нет    |	   нет	    |
     |Left Arr |   нет	   | (*)73/00	|     нет    |	   нет	    |
     |Right Arr|   нет	   | (*)74/00	|     нет    |	   нет	    |
     |	 End   |   нет	   | (*)75/00	|     нет    |	   нет	    |
     |Down Arr |   нет	   | (*)  -	|     нет    |	   нет	    |
     |PageDown |   нет	   | (*)76/00	|     нет    |	   нет	    |
     | Insert  |   нет	   | (*)  -	|     нет    |	   нет	    |
     | Delete  |   нет	   | (*)  -	|     нет    |	   нет	    |
     |---------|-----------|------------|------------|--------------|
     |								    |
     |			состояние ALT				    |
     |								    |
     |	ESC    |    -	   | (*)  -	|     -      |	   -	    |
     |	 1     |  78/00    |	78/00	|   78/00    |	 78/00	    |
     |	 2     |  79/00    |	79/00	|   79/00    |	 79/00	    |
     |	 3     |  7A/00    |	7A/00	|   7A/00    |	 7A/00	    |
     |	 4     |  7B/00    |	7B/00	|   7B/00    |	 7B/00	    |
     |	 5     |  7C/00    |	7C/00	|   7C/00    |	 7C/00	    |
     |	 6     |  7D/00    |	7D/00	|   7D/00    |	 7D/00	    |
     |	 7     |  7E/00    |	7E/00	|   7E/00    |	 7E/00	    |
     |	 8     |  7F/00    |	7F/00	|   7F/00    |	 7F/00	    |
     |	 9     |  80/00    |	80/00	|   80/00    |	 80/00	    |
     |	 0     |  81/00    |	81/00	|   81/00    |	 81/00	    |
     |	 -     |  82/00    |	82/00	|   82/00    |	 82/00	    |
     |	 =     |  83/00    |	83/00	|   83/00    |	 83/00	    |
     |	 BS    |    -	   | (*)  -	|     -      |	   -	    |
     |	TAB    |    -	   | (*)  -	|     -      |	   -	    |
     |	 q     |  10/00    |	10/00	|   10/00    |	 10/00	    |
     |	 w     |  11/00    |	11/00	|   11/00    |	 11/00	    |
     |	 e     |  12/00    |	12/00	|   12/00    |	 12/00	    |
     |	 r     |  13/00    |	13/00	|   13/00    |	 13/00	    |
     |	 t     |  14/00    |	14/00	|   14/00    |	 14/00	    |
     |	 y     |  15/00    |	15/00	|   15/00    |	 15/00	    |
     |	 u     |  16/00    |	16/00	|   16/00    |	 16/00	    |
     |	 i     |  17/00    |	17/00	|   17/00    |	 17/00	    |
     |	 o     |  18/00    |	18/00	|   18/00    |	 18/00	    |
     |	 p     |  19/00    |	19/00	|   19/00    |	 19/00	    |
     |	 [     |    -	   | (*)  -	|     -      |	   -	    |
     |	 ]     |    -	   | (*)  -	|     -      |	   -	    |
     |	Return |    -	   | (*)  -	|     -      |	   -	    |
     |	CTRL   |   **	   |	 **	|     **     |	   **	    |
     |	 a     |  1E/00    |	1E/00	|   1E/00    |	 1E/00	    |
     |	 s     |  1F/00    |	1F/00	|   1F/00    |	 1F/00	    |
     |	 d     |  20/00    |	20/00	|   20/00    |	 20/00	    |
     |	 f     |  21/00    |	21/00	|   21/00    |	 21/00	    |
     |	 g     |  22/00    |	22/00	|   22/00    |	 22/00	    |
     |	 h     |  23/00    |	23/00	|   23/00    |	 23/00	    |
     |	 j     |  24/00    |	24/00	|   24/00    |	 24/00	    |
     |	 k     |  25/00    |	25/00	|   25/00    |	 25/00	    |
     |	 l     |  26/00    |	26/00	|   26/00    |	 26/00	    |
     |	 ;     |    -	   | (*)  -	|     -      |	   -	    |
     |	 '     |    -      | (*)  -     |     -      |     -        |
     |	 `     |    -	   | (*)  -	|     -      |	   -	    |
     |	Shift  |    -	   |	  -	|     -      |	   -	    |
     | (левый) |	   |		|	     |		    |
     |	 \     |    -	   | (*)  -	|     -      |	   -	    |
     |	 z     |  2C/00    |	2C/00	|   2C/00    |	 2C/00	    |
     |	 x     |  2D/00    |	2D/00	|   2D/00    |	 2D/00	    |
     |	 c     |  2E/00    |	2E/00	|   2E/00    |	 2E/00	    |
     |	 v     |  2F/00    |	2F/00	|   2F/00    |	 2F/00	    |
     |	 b     |  30/00    |	30/00	|   30/00    |	 30/00	    |
     |	 n     |  31/00    |	31/00	|   31/00    |	 31/00	    |
     |	 m     |  32/00    |	32/00	|   32/00    |	 32/00	    |
     |	 ,     |    -	   | (*)  -	|     -      |	   -	    |
     |	 .     |    -	   | (*)  -	|     -      |	   -	    |
     |	 /     |    -	   | (*)  -	|     -      |	   -	    |
     |	Shift  |    -	   |	  -	|     -      |	   -	    |
     | (правый)|	   |		|	     |		    |
     |	 *     |    -	   | (*)  -	|     -      |	   -	    |
     |	ALT    |   **	   |	 **	|     **     |	   **	    |
     | пробел  |  39/20    |	39/20	|   39/20    |	 39/20	    |
     |	CLK    |    -	   |	  -	|     -      |	   -	    |
     |	 F1    |  68/00    |	68/00	|   68/00    |	 68/00	    |
     |	 F2    |  59/00    |	59/00	|   59/00    |	 59/00	    |
     |	 F3    |  6A/00    |	6A/00	|   6A/00    |	 6A/00	    |
     |	 F4    |  6B/00    |	6B/00	|   6B/00    |	 6B/00	    |
     |	 F5    |  6C/00    |	6C/00	|   6C/00    |	 6C/00	    |
     |	 F6    |  6D/00    |	6D/00	|   6D/00    |	 6D/00	    |
     |	 F7    |  6E/00    |	6E/00	|   6E/00    |	 6E/00	    |
     |	 F8    |  6F/00    |	6F/00	|   6F/00    |	 6F/00	    |
     |	 F9    |  70/00    |	70/00	|   70/00    |	 70/00	    |
     |	 F10   |  71/00    |	71/00	|   71/00    |	 71/00	    |
     |	 F11   |   нет	   | (*)8B/00	|     нет    |	   нет	    |
     |	 F12   |   нет	   | (*)8C/00	|     нет    |	   нет	    |
     |	NLK    |    -	   |	  -	|     -      |	   -	    |
     |	S/B    |   **	   |	 **	|     **     |	   **	    |
     |	(7)    |   (#)	   |	(#)	|     (#)    |	   (#)	    |
     |	(8)    |   (#)	   |	(#)	|     (#)    |	   (#)	    |
     |	(9)    |   (#)	   |	(#)	|     (#)    |	   (#)	    |
     |	(-)    |    -	   | (*)4A/00	|      -     |	    -	    |
     |	(4)    |   (#)	   |	(#)	|     (#)    |	   (#)	    |
     |	(5)    |   (#)	   |	(#)	|     (#)    |	   (#)	    |
     |	(6)    |   (#)	   |	(#)	|     (#)    |	   (#)	    |
     |	(+)    |    -	   | (*)4E/00	|      -     |	    -	    |
     |	(1)    |   (#)	   |	(#)	|     (#)    |	   (#)	    |
     |	(2)    |   (#)	   |	(#)	|     (#)    |	   (#)	    |
     |	(3)    |   (#)	   |	(#)	|     (#)    |	   (#)	    |
     |	Ins    |   (#)	   |	(#)	|      -     |	    -	    |
     |	Del    |    -	   |	 -	|      -     |	    -	    |
     | SysReq  |   **	   |	 нет	|     нет    |	   нет	    |
     | Key 45  |   нет	   |	  -	|     нет    |	   нет	    |
     | Enter   |   нет	   | (*)  -	|     нет    |	   нет	    |
     |	 /     |   нет	   | (*)  -	|     нет    |	   нет	    |
     | PrtSc   |   нет	   |	 **	|     нет    |	   нет	    |
     | Pause   |   нет	   |	 **	|     нет    |	   нет	    |
     | Номе    |   нет	   | (*)  -	|     нет    |	   нет	    |
     | Up Arrow|   нет	   | (*)  -	|     нет    |	   нет	    |
     | PageUp  |   нет	   | (*)  -	|     нет    |	   нет	    |
     |Left Arr |   нет	   | (*)  -	|     нет    |	   нет	    |
     |Right Arr|   нет	   | (*)  -	|     нет    |	   нет	    |
     |	 End   |   нет	   | (*)  -	|     нет    |	   нет	    |
     |Down Arr |   нет	   | (*)  -	|     нет    |	   нет	    |
     |PageDown |   нет	   | (*)  -	|     нет    |	   нет	    |
     | Insert  |   нет	   | (*)  -	|     нет    |	   нет	    |
     | Delete  |   нет	   | (*)  -	|     нет    |	   нет	    |
     |---------|-----------|------------|------------|--------------|
		Таблица 21. Коды клавиш