Функции вводавывода дисплея



Функции ввода-вывода дисплея


    Программа дисплея BIOS имеет много функций, все они перечислены на
    Фиг.9.6.  В связи с тем, что видеопрограмма имеет так много
    функций, она использует таблицу переходов к этим функциям.    Эта
    таблица названа M1 и содержит смещения каждой точки входа программы
    дисплея BIOS.  Первая часть программы VIDEO_IO извлекает код из
    регистра AH и преобразует его в адрес перехода.  Первая часть
    программы выполняет еще и некоторые другие действия, включая
    проверку поля EQUIP_FLAG.
 
      Фирма IBM написала видеопрограмму BIOS так, чтобы она могла
    работать с двумя дисплейными адаптерами, как с цветным графическим,
    так и с монохромным. Но BIOS также подразумевает, что из них
    активен только один. Это означает, что вы не сможете использовать
    BIOS для того, чтобы записать символ в цветной дисплей, а затем
    сразу использовать BIOS для записи символа в монохромный дисплей.


    Видеопрограмма BIOS может иметь дело только с одним дисплейным
    адаптером.
 
           AH           Функция
      -------------------------------------------------
           0            Инициализация адаптера дисплея
           1            Установка размера и формы курсора
           2            Установка позиции курсора
           3            Чтение позиции курсора
           4            Чтение позиции светового пера
           5            Назначение текущей страницы
           6            Сдвиг вверх
           7            Сдвиг вниз
           8            Чтение символа
           9            Запись символа и атрибута
          10            Запись одного символа
          11            Выбор палитры
          12            Запись точки
          13            Чтение точки
          14            Запись на телетайп
      -------------------------------------------------
 
            Фиг. 9.4 Функции BIOS для видеомонитора
 
      Всякий раз, когда программа вызывает видеопрограмму BIOS, она
    определяет, какой дисплейный адаптер имеется в системе с помощью
    проверки битов поля EQUIP_FLAG, которые соответствуют текущему
    дисплею. Если биты 5 и 4 оба равны 1, то в системе присутствует
    монохромный адаптер. Любая другая установка бит говорит о том, что
    в системе работает цветной адаптер. Фирма IBM написала эту
    программу таким способом, исходя из того, что система может иметь
    только один дисплейный адаптер. Перед первым включением машины вы
    должны установить переключатели на системной плате в положение,
    показывающее, какой адаптер дисплея используется.
 
      Информация флагов оборудования в поле EQUIP_FLAG определяет,
    какой из адресов буфера будет использовать видеопрограмма BIOS. Для
    монохромной платы BIOS загружает в регистр ES значение 0B000H, а
    для цветной платы - значение 0B800H. Это позволяет остальным
    программам дисплея BIOS работать без использования информации о
    том, какой адаптер работает в системе. Все ссылки к буферу делаются
    относительно регистра ES.
      Вы можете решить, что, поскольку поле EQUIP_FLAG показывает,
    какой адаптер используется, можно переключаться от одного адаптера
    к другому просто изменяя биты в слове флагов. К сожалению, это не
    так, Адрес ввода-вывода контроллера 6845 отличается для двух
    адаптеров, и BIOS записывает этот базовый адрес в свою область
    данных. Видеопрограмма BIOS заносит в переменную ADDR_6845 этот
    адрес только при инициализации адаптера (команда AH = 0). Поэтому
    переключение от одного дисплея к другому также требует
    корректировки этой переменной.
 
      Даже если переменная CURSOR_POSN содержит восемь позиций, она
    не может обслуживать переключение на другой дисплей. Вы должны
    сбрасывать положение курсора в области данных BIOS всякий раз при
    переключении с одного адаптера на другой. Если вы не сделаете
    этого, изображение курсора не будет соответствовать его положению,
    записанному в области данных, и символ на экране будет записываться
    в неверную позицию.
 
      Фирма IBM опубликовала методы смены одного дисплея другим, как
    с помощью программы на языке ассемблера, так и с помощью программы
    на Бейсике. В этих методах требуется для указания адаптера, который
    вы хотите использовать, изменить переменную EQUIP_FLAG, а затем
    использовать видеопрерывание INT 10H при AH = 0. Эта функция
    инициализирует адаптер и обеспечивает правильную установку всех
    полей данных программы BIOS. После этого BIOS может работать с тем
    дисплейным адаптером, который указан. При этом картинка на другом
    дисплее остается видимой. Кроме того, дисплейный буфер того
    адаптера продолжает отображать любые изменения текста и графики,
    занесенной в него. Так что вы можете измекнять содержимое
    дисплейного буфера с помощью вашей программы (а не с помощью BIOS),
    чтобы скорректировать информацию, находящуюся на экране, с которого
    вы только что переключились.
 
      Давайте рассмотрим простой пример. Вы имеете IBM PC с двумя
    адаптерами - цветным графическим и монохромным, и к каждому
    адаптеру подключен дисплей. Когда вы сначала включаете машину,
    система использует монохромный дисплей. Именно с учетом этого вы и
    должны установить переключатели на системной плате, так как
    монохромный дисплей может быть поврежден, если не будет
    инициализирован сразу же после включения питания. Инструкция по
    работе рекомендует, чтобы вы установили переключатели в положение,
    показывающее, что в системе присутствует монохромный адаптер.
 
      После этого вы можете использовать видеопрограмму BIOS с
    монохромным дисплеем. Чтобы перейти на цветной адаптер, можно
    выполнить программу на Фиг.П9.7. Эта программа включает цветной
    адаптер в 80-символьном текстовом режиме. Символы, которые были
    высвечены на монохромном дисплее, на нем и остаются, а вы теперь
    можете использовать видеопрограмму BIOS для работы с цветным
    графическим дисплеем. Но если вам потребуется изменить содержимое
    монохромного дисплея, вы сможете сделать это, записав новые символы
    или атрибуты в буфер дисплея по адресу 0B000H. Это не изменит
    положения курсора, но изменит картинку. В этом случае если вы
    хотите изменять текст одновременно на цветном и монохромном
    дисплеях, вы должны написать собственную программу обслуживания
    монохромного дисплея. Или вы можете выяснить, какие значения надо
    изменить в поле данных BIOS, чтобы курсор перешел назад, и
    выполнить нужные действия, не инициализируя адаптер каждый раз.
 
             Microsoft (R) Macro Assembler Version 5.00                1/1/80 04:06:26
             Фиг. 9.7 Переключение на цветной дисплей            Page     1-1
 
 
                                           PAGE ,132
                                           TITLE      Фиг. 9.7 Переключение на цветной дисплей
              0000                        STACK      SEGMENT STACK
              0000      0040[                   DW   64 DUP (?)
                      ????
                                ]
 
              0080                        STACK      ENDS
              0000                        ABS0 SEGMENT AT 0
              0410                              ORG  410H
              0410                        EQUIP_FLAG LABEL      BYTE ; Будет изменяться только младший
              0410                        ABS0 ENDS             ;  байт поля флагов
 
 
              0000                        CODE SEGMENT
                                           ASSUME  CS:CODE,DS:ABS0
                                     COLOR      PROC FAR
              0000      1E                      PUSH DS         ; Адрес возврата в ДОС
              0001      2B C0                   SUB  AX, AX
              0003      50                      PUSH AX
 
              0004      8E D8                   MOV  DS, AX      ; Загрузка адреса сегмента ABS0 в регистр DS
              0006      80 26 0410 R CF          AND  EQUIP_FLAG, 11001111b  ; Указание на цветной дисплей как
              000B      80 0E 0410 R 20          OR   EQUIP_FLAG, 00100000b  ;  на основной (режим 80*25)
              0010      B8 0003                  MOV  AX, 3
              0013      CD 10                   INT  10H        ; Сброс дисплея
              0015      C3                      RET              ; Возврат в ДОС
                                     COLOR      ENDP
              0016                        CODE ENDS
                                           END
 
             Фиг. 9.7 Переключение на цветной дисплей




Содержание раздела