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

   Монохромный адаптор поддерживает один режим терминала, цветной
графический - семь, PCjr -  десять,  а EGA - двенадцать.  Система
PCjr более гибкая, чем монохромный или цветной адапторы, посколь-
ку она предоставляет  широкий  выбор  цветов  в режимах с двумя и
четырьмя  цветами, а также серые тени в черно-белом режиме.   EGA
еще более сложен,  поддерживая  палетту  из 64 цветов, графику на
монохромном дисплее и вывод в 43 строки.  Ниже приведен  перечень
различных режимов:

   Номер         Режим                                       Адапторы

    0        40*25 (320*200) B&W алфавитноцифровой         цветной, PCjr, EGA
    1        40*25 (320*200) цветной алфавитноцифровой     цветной, PCjr, EGA
    2        80*25 (640*200) B&W алфавитноцифровой         цветной, PCjr, EGA
    3        80*25 (640*200) цветной алфавитноцифровой     цветной, PCjr, EGA
    4        320*200 4-цветная графика                     цветной, PCjr, EGA
    5        320*200 B&W графика (4 тени на PCjr)          цветной, PCjr, EGA
    6        640*200 B&W графика                           цветной, PCjr, EGA
    7        80*25 (720*350) B&W алфавитноцифровой         монохромный, EGA
    8        160*200 16-цветный графика                    PCjr
    9        320*200 16-цветный графика                    PCjr
    A        640*200 4-цветный графика                     PCjr
    B        зарезервирован для EGA
    C        зарезервирован для EGA
    D        320*200 16-цветный графика                    EGA
    E        640*200 16-цветный графика                    EGA
    F        640*350 4-цветная графика на монохромном      EGA
   10        640*350 4- или 16-цветная графика             EGA

   EGA  разрешает иметь 8 страниц в режиме 7 - стандартном монох-
ромном текстовом режиме. Режимы 0-6 полностью совместимы, исполь-
зуя память одинаковым образом.  При условии, что переключатели на
EGA установлены для работы  с  улучшенным  цветным дисплеем фирмы
IBM,  традиционные текстовые режимы выводятся с высоким  разреше-
нием, используя рисунок  символов,  состоящий из 8*14 точек, а не
обычные 8*8.
   BIOS  хранит  однобайтную переменную по  адресу  0040:0049,  в
которой  содержится  номер  текущего   режима.   Байт  по  адресу
0040:004A дает число символов в строке в текстовом режиме.

   Высокий уровень.

   Бейсик  использует  операторы SCREEN и  WIDTH  для  управления
режимом экрана. PCjr  использует  эти  операторы несколько другим
способом,  чем монохромный и цветной адапторы, и это будет обсуж-
даться ниже. Один оператор SCREEN устанавливает режим для цветно-
го  адаптора.   За оператором стоит номер  кода,  устанавливающий
разрешение, где:

   0   текстовый режим
   1   графический режим среднего разрешения
   2   графический режим высокого разрешения


SCREEN 1  устанавливает  графический  режим  среднего разрешения.
Второй параметр включает и выключает цвет. Этот параметр не имеет
смысла для режима высокого  разрешения  на цветном адапторе, пос-
кольку разрешен только черно-белый режим. Для текстовых режимов 0
в качестве  второго  параметра  выключает  цвет,  а 1 - включает.
Оператор  SCREEN  0,0 устанавливает текстовый черно-белый  режим.
Для графического режима ситуация обратная: 0 - включает цвет, а 1
- выключает.  Поэтому оператор SCREEN 1,1 устанавливает черно-бе-
лый графический режим среднего разрешения.
   Все режимы первоначально показываются  черно-белыми.  Оператор
COLOR  (см.   [4.1.3]) должен быть использован,  чтобы  закрасить
экран фоновым цветом. В графическом режиме одного оператора COLOR
достаточно,  чтобы изменить весь фон на указанный цвет.   Но  для
текстового режима Вы  должны  после  оператора COLOR использовать
оператор CLS.
   В  текстовых  режимах в строке может быть 40 или 80  символов.
Для установки требуемого числа  символов  в строке надо использо-
вать оператор WIDTH.  WIDTH 40 дает 40 символов в строке, а WIDTH
80 - 80. Другие значения недопустимы. Если оператор WIDTH исполь-
зуется в графическом режиме (SCREEN 1 или SCREEN 2), то WIDTH  40
переводит экран в режим среднего разрешения, а WIDTH 80 - в режим
высокого разрешения. Вот несколько примеров:

100 SCREEN 0,1: WIDTH 40  'цветной текстовый режим с 40 символами

100 SCREEN 0,1: WIDTH 40  'цветной дисплей как монохромный

100 SCREEN 0,1: WIDTH 40  'цветная графика среднего разрешения
 .
 .
500 WIDTH 80              'переводим в режим высокого разрешения

   Монохромный монитор может быть переведен в режим 40 символов в
строке операторами SCREEN 0: WIDTH 40.  Для восстановления режима
с  80  символами введите WIDTH 80.  В режиме с 40  символами  они
сохраняют свою обычную ширину, поэтому будет использоваться толь-
ко левая часть экрана.  Строка переносится после 40-го столбца  и
невозможно поместить курсор  в  правую  половину экрана с помощью
оператора  LOCATE.  CLS чистит только левую часть экрана.  Трудно
представить программу, которая  использовала  бы это свойство, но
оно  действительно  позволяет программе принимать  ввод  (скажем,
через оператор INPUT), в  то  время  как  пользователь продолжает
печатать в левой половине экрана, оставляя правую половину экрана
для возможной корректировки  вводимой  информации. При этом любой
вывод  в правую половину экрана возможен только прямого обращения
к памяти дисплея, как объяснено в [4.3.1].
   PCjr использует в Бейсике 7 номеров режимов:

   Номер                   Режим

     0       текстовый режим, ширина может быть 40 или 80
     1       4-цветная графика среднего разрешения
     2       2-цветная графика высокого разрешения
     3       16-цветная графика низкого разрешения
     4       4-цветный режим среднего разрешения
     5       16-цветный режим среднего разрешения
     6       4-цветная режим высокого разрешения


   Последние  четыре режима требуют дискетты с Бейсиком.   Размер
страницы определяет количество памяти, требуемое для одного экра-
на (дисплейные страницы обсуждаются в [4.5.3]).  Программа должна
отвести соответствующее  количество памяти перед установкой режи-
ма.   Это делается оператором CLEAR.  За оператором CLEAR  должны
следовать три  числа,  определяющие  отводимую  память, третье из
этих чисел устанавливает размер видеобуфера (первые два параметра
обсуждаются в  [1.3.1]).   Например,  размер для видеобуфера 16K,
устанавливаемый  по умолчанию, выделяется командой CLEAR ,,16384.
К сожалению, размер видеобуфера указывается  в байтах, поэтому он
не  равен  круглому числу типа 4000 или 32000, а равен  4096  или
32768.  Помните, что 2K =  2^11,  4K  = 2^12, 16K = 2^14, а 32K =
2^15.  Для выделения трех страниц по 16K, введите CLEAR ,,3*2^14.
Этот оператор должен помещаться  в  самом  начале программы, пос-
кольку при использовании оператора CLEAR все переменные  очищают-
ся. Отметим также, что при  создании нескольких страниц, страница
0 начинается с младших адресов памяти.
   К  моменту  выхода этой книги Бейсик не поддерживает  дополни-
тельные режимы терминала EGA. В [4.3.3] приведена подпрограмма на
машинном языке, которая позволит Вам установить эти режимы.

   Средний уровень.

   Функция  0  прерывания 10H устанавливает режим дисплея.  В  AL
должен находиться номер режима от  0 до A. Чтобы установить цвет-
ной графический режим среднего разрешения надо:

   MOV  AH,0       ;номер функции
   MOV  AL,4       ;номер требуемого режима
   INT  10H        ;устанавливаем режим

Для  определения текущего графического режима  надо  использовать
функцию F прерывания  10H.  Прерывание  возвращает номер режима в
AL.   Оно также дает номер текущей страницы дисплея в BH и  число
символов в строке в AH.

   MOV  AH,0FH          ;номер функции
   INT  10H             ;получение информации о режиме дисплея
   MOV  MODE_NUMBER,AL  ;номер режима в AL
   MOV  NUMBER_COLS,AH  ;число символов в строке в AH
   MOV  CURRENT_PAGE,BH ;номер текущей страницы в BH

   MS DOS обеспечивает также Esc-последовательности для установки
и сброса режимов дисплея.  Для этого необходимо, чтобы Вы предва-
рительно загрузили драйвер  ANSI.SYS,  как объяснено в приложении
Д.   Управляющая строка имеет вид ESC [=#h, где # - номер режима,
указанный как код ASCII, а  ESC  обозначает  один  символ с кодом
ASCII 27. Например:

;---в сегменте данных
MED_RES_COLOR  DB   27, '[=4h$'
MED_RES_B&W    DB   27, '[=5h$'


;---установка цветного графического режима среднего разрешения
   MOV  AH,9             ;номер функции вывода строки
   LEA  DX,MED_RES_COLOR ;DS:DX должны указывать на строку
   INT  21H              ;изменение режима

   Низкий уровень.

   В  данном  пункте цветной адаптор, монохромный адаптор и  PCjr
рассматриваются отдельно,  поскольку  они существенно отличаются.
Цветной  графический адаптор имеет регистр, который устанавливает
режим дисплея. Он расположен в порте с адресом 3D8H. Биты 0, 1, 2
и  4 хранят установку.  Бит 0 устанавливает 40 символов в строке,
когда он равен 0 и 80 - когда равен  1. Бит 1 устанавливает дисп-
лей в текстовый режим, когда равен 0 и в графический, когда равен
1.  Бит 2 устанавливает цветной режим,  когда равен 0 и черно-бе-
лый, когда равен 1. И, наконец, бит 4 устанавливает для графичес-
кого режима среднее разрешение, когда  равен 0 и высокое разреше-
ние,  когда равен 1 (бит 2 должен быть равен 1).  Ниже  приведены
возможные комбинации:

   Режим                      биты:  5  4  3  2  1  0

0. 40*25, черно-белый, текст         1  0  1  1  0  0
1. 40*25, цветной, текст             1  0  1  0  0  0
2. 80*25, черно-белый, текст         1  0  1  1  0  1
3. 80*25, цветной, текст             1  0  1  0  0  1
4. 320*200, черно-белый, графика     0  0  1  1  1  0
5. 320*200, цветной, графика         0  0  1  0  1  0
6. 640*200, черно-белый, графика     0  1  1  1  1  0
                                     ?  ?  ?  ?  ?  текст 80*25
                                     ?  ?  ?  ?  графика 320*200
                                     ?  ?  ?  черно-белый
                                     ?  ?  разрешение вывода
                                     ?  графика 640*200
                                     мигание

   Изменение  этих битов не приводит к изменению режима  дисплея.
Нужно еще много шагов,  включающих изменение параметров первых 10
регистров  по адресу порта 3D5H.  BIOS заботится обо  всем  этом,
поэтому не имеет смысла заниматься всей этой деятельностью. Одна-
ко иногда имеет  смысл  реинициализировать  регистр  режима в его
текущем режиме, изменяя биты 3 и 5, которые на самом деле не  от-
вечают за установку режима.   Когда бит 5 сброшен в 0, то он зап-
рещает  атрибут мигания символов; в этом случае, если старший бит
байта атрибутов установлен,  то  это  приводит  к выводу фонового
цвета высокой интенсивностью (см.  пример в [4.1.3]). Бит 3 этого
регистра управляет разрешением вывода.  Когда он равен 0, то весь
экран  закрашивается  в цвет рамки, но видеобуфер  не  очищается.
Вывод мгновенно возвращается, когда  значение этого бита меняется
на 1. Это свойство полезно использовать для избежания интерферен-
ции экрана при сдвигах [4.5.1].  Некоторые утилиты используют это
свойство  для того, чтобы зря не утомлять фосфорное покрытие тру-
бки терминала, когда компьютер включен, но не используется. Отме-
тим также, что два старших бита регистра не используются.


   Монохромный  адаптор имеет соответствующий адрес  порта  3B8H.
Имеют значение только три бита.  Бит 0 устанавливает высокое раз-
решение,  которое  является единственным допустимым  режимом  для
монохромного дисплея. Если этот  бит равен 0, то компьютер перес-
тает работать. Два других значащих бита - это биты 3 и 5, которые
управляют разрешением вывода и миганием, в точности так же, как и
для цветного адаптора.
   PCjr  распределяет информацию, содержащуюся в одном порте  для
монохромног и цветного адаптора.   Массив ворот дисплея имеет два
регистра режима, номера 0 и 3.  Для доступа к этим регистрам надо
послать номер регистра в порт  с  адресом  3DAH, а затем записать
данные  по  тому же адресу (чтение этого порта обеспечивает,  что
первая запись в него будет  воспринята,  как указание номера тре-
буемого регистра). Вот значение битов этих регистров:

Регистр 0:
   бит 0   1 = текст, 80*25 и режимы 5 и 6, иначе 0
       0   1 = графический режим, 0 = текстовый
       0   1 = запрет цветов, 0 = разрешение цветов
       0   1 = разрешение вывода, 0 = запрет вывода
       0   1 = 16-цветный режим, 0 = все остальные режимы

Регистр 3:
   бит 0   всегда 0
       1   1 = разрешение мигания, 0 = 16 фоновых цветов
       2   всегда 0
       3   1 = 2-цветная графика, 0 = все остальные режимы

Как  и в двух предыдущих случаях, не стоит устанавливать эти  ре-
гистры прямо из программы,  так  как  нужно  еще много работы для
программирования  микросхемы  6845.  Но каждый из этих  регистров
содержит бит, который иногда  приходится  программно  модифициро-
вать, а поскольку эти регистры только для записи, то Вам  необхо-
димо понимать значение всех их битов.   Эти биты - бит разрешения
вывода  в  регистре 0 и бит разрешения мигания в регистре 3.   Их
действие было описано ранее и  возможное  их использование еще не
раз будет обсуждаться в этой главе (в [4.5.1] и [4.1.3]).
   EGA  имеет  два регистра, управляющих режимом  дисплея.   Один
имеет адрес порта 3D5H.  Этот регистр не содержит ни одного бита,
связанного  с  чем-либо другим, поэтому нет никаких причин  обра-
щаться к нему.  Второй регистр  имеет адрес порта 3C0H и содержит
бит, который выбирает будет ли бит 7 байта атрибутов соответство-
вать миганию или высокой интенсивности. Этот вопрос обсуждается в
[4.1.3].
 

Вы находитесь в разделе: 
Также вам будет интересно:

Добавить коментарий