Главная · Поиск книг · Поступления книг · Top 40 · Форумы · Ссылки · Читатели

Настройка текста
Перенос строк


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)
Demon's Souls |#9| Heart of surprises

Другие игры...


liveinternet.ru: показано число просмотров за 24 часа, посетителей за 24 часа и за сегодня
Rambler's Top100
Образование - Роберт Журден Весь текст 1069.56 Kb

Справочник программиста на IBM PC

Предыдущая страница Следующая страница
1 ... 24 25 26 27 28 29 30  31 32 33 34 35 36 37 ... 92
принимает байт атрибутов при выводе символа. Функция A прерывания
10H выводит символ без указания  цвета  или  атрибута; она просто
помещает  символ  в видеобуфер, не трогая  байт  атрибута,  таким
образом атрибуты сохраняют свое старое значение. Функция D преры-
вания  10H  также оставляет нетронутым байт атрибутов.   Все  эти
функции обсуждаются в [4.3.1].
   Функции вывода на экран  DOS  прерывания  21H  всегда  выводят
белое на черном.  Даже если для всего экрана установлен некоторый
фоновый цвет, то функции DOS  устанавливают  атрибут в нормальный
черный при выводе каждого символа.  Однако имеется способ преодо-
леть это ограничение. MS  DOS  предоставляет  драйвер  устройства
ANSI.SYS, который может интерпретировать специальные Esc-последо-
вательности. В приложении Д объясняются основы его использования.
Esc-последовательности выводятся через функцию 9 прерывания  21H,
которые обычно выводят строку  символов  на экран.  В этом случае
строка состоит из символа Esc, за которым следует [, а далее одно
или более кодовых чисел из нижеприведенного списка. Строка должна
кончаться символом m и обычным ограничителем $. Вот кодовые номе-
ра:

   0   все атрибуты выключены (черный на белом)
   1   включена повышенная интенсивность
   4   включено подчеркивание
   5   включено мигание
   7   включено негативное изображение
   8   все включено (при этом символы невидимы)

   30 черный основной цвет         40 черный фон
   31 красный основной цвет        41 красный фон
   32 зеленый основной цвет        42 зеленый фон
   33 желтый основной цвет         43 желтый фон
   34 синий основной цвет          44 синий фон
   35 основной цвет магента        45 фон магента
   36 основной цвет циан           46 фон циан
   37 белый основной цвет          40 белый фон

Отметим, что когда функции MS  DOS  выводят символы в графическом
режиме, то они обычно используют код 3 текущей палетты. С помощью
Esc-последовательностей можно установить  цвет символа соответст-
вующим  любому  из цветов палетты.  Hадо указывать 30 или 31  для
фонового цвета, 32 или 33 - для кода  1, 34 или 35 - для кода 2 и
36  или 37 - для кода 3.  В этом случае не надо указывать фоновый
цвет.
   В следующем примере на экран  выводятся  две  строки с помощью
функции  9 прерывания 21H.  Первая выводится синим на красном,  а
вторая - мигающим цианом на красном. Hе надо переопределять крас-
ный в качестве фонового цвета для второй строки, поскольку назна-
чения цветов действуют на все последующие команды вывода (включая
функции  BIOS прерывания 10H), до тех пор, пока не будут  сделаны
другие назначения. Отметим, как  просто  перемешивать команды уп-
равления цветом с выводом самих строк.

;---в сегменте данных
STRING_1     DB   'The rain in Spain',0AH,0DH,'$'
STRING_2     DB   'Falls mainly on the plain$'
BLUE_RED     DB   27,'[34;41m$'
BLINK_CYAN   DB   27,'[5;36m$'
;---вывод строк
   MOV  AH,9          ;функция вывода строки
   LEA  DX,BLUE_RED   ;адрес управляющей строки в DX
   INT  21H           ;все будет выдаваться синим на красном
   LEA  DX,STRING_1   ;указываем на первую строку
   INT  21H           ;печатаем строку
   LEA  DX,BLINK_CYAN ;адрес второй управляющей строки
   INT  21H           ;меняем цвет на мигающий циан
   LEA  DX,STRING_2   ;указываем на вторую строку
   INT  21H           ;печатаем строку

Вы  всегда  должны позаботиться о том,  чтобы  сбросить  атрибуты
цвета в нормальное  состояние  перед  завершением программы, пос-
кольку в противном случае они будут действовать и на вывод после-
дующих программ. В конце следует  вывести Esc-последовательность,
использующую код номер 0, как указано выше.
   PCjr и EGA имеют специальную функцию BIOS для установки содер-
жимого регистров палетты. Это подфункция 0 функции 10H прерывания
10H.  Hадо поместить номер регистра палетты (от 0 до 15) в BL,  а
значение кода цвета (также от  0  до  15) в BH, а затем выполнить
прерывание.  Подфункция 2 функции 10H устанавливает все  регистры
палетты, а также цвет  границы,  используя  17-байтный массив, на
который должны указывать ES:DX.  Байты 0-15 массива помещаются  в
регистры палетты 0-15, а байт  16  устанавливает цвет границы.  О
том, как отдельно установить цвет границы см. [4.1.4].

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

   Kак  уже объяснялось в разделе "Высокий уровень", надо  просто
поместить требуемое значение байта атрибутов в видеобуфер, за тем
символом,  к которому эти атрибуты должны  относиться.   Приведен
пример для цветного адаптора или PCjr.  В примере устанавливается
текстовый  экран 80*25 с 16 фоновыми цветами, а затем экран  ини-
циализируется в красный цвет светлосинем фоне:

;---установка 16 фоновых цветов в текстовом режиме 80*25
        MOV  AL,00001001B   ;установка в 0 бита мигания
        MOV  DX,3D8H        ;адрес регистра
        OUT  DX,AL          ;посылаем в регистр
;---инициализируем весь экран в красный на светлосинем фоне
        MOV  AX,0B800H      ;указываем на видеобуфер
        MOV  ES,AX          ;
        MOV  CX,2000        ;записываем атрибут в 2000 ячеек
        MOV  BX,1           ;BX указывает на байт атрибутов
        MOV  AL,10010100B   ;значение байта атрибутов
NEXT_CHAR:   MOV  ES:[BX],AL   ;посылаем атрибуты в буфер
        INC  BX             ;увеличиваем указатель на атрибуты
        INC  BX             ;
        LOOP NEXT_CHAR      ;пишем в следующую позицию
   4.1.4 Установка цвета границы экрана.

   Граница символьного экрана может иметь цвет, отличный от фоно-
вого цвета центральной части экрана. Может быть использован любой
из 16 цветов.  С другой стороны, графические экраны технически не
имеют области границы.  Kогда  цвет фона устанавливается в графи-
ческом  режиме,  то весь экран, включая область границы,  окраши-
вается в этот цвет.   Однако,  операции  вывода точек на экран не
имеют  доступа  к области границы; если большую часть  адресуемых
точек экрана изменить в  нефоновый  цвет,  то будет создана види-
мость границы экрана.

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

   Третий  параметр  оператора Бейсика COLOR  устанавливает  цвет
границы.  Используются те же  самые кодовые номера цветов, приве-
денные в [4.1.3].  Hапример, для установки границы в  светлосиний
цвет, надо написать COLOR  ,,8.  PCjr  кроме  того может изменять
цвет, за счет изменения установки регистра палетты, соответствую-
щего коду цвета, указанного для цвета  границы. Полное объяснение
см. в [4.1.3].

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

   Для всех видеосистем фоновый цвет может быть установлен  функ-
цией BH, прерывания 10H. Эта функция устанавливает также основные
цвета. Чтобы указать, что надо изменить фоновый цвет, надо помес-
тить 0 в BH, а код цвета в BL и выполнить прерывание. Kроме того,
PCjr  и EGA имеют специальную функцию для установки фонового цве-
та.  Это подфункция 1 функции 10H прерывания 10H.  Hадо поместить
10H  в AH, 1 в AL и код цвета в BH.  Hикаких значений не  возвра-
щается.

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

   Для цветного  графического  адаптора  биты 0-3 порта 3D9H (Ре-
гистр  выбора цвета) устанавливают цвет границы, когда экран  на-
ходмтся в текстовом режиме. Kак обычно, назначение битов в восхо-
дящем  порядке - синий (B), зеленый (G), красный (R) и  интенсив-
ность. Поскольку этот адрес  предназначен  только для записи, все
остальные биты этого регистра должны быть правильно  установлены.
Это бит 4, который, если его установить в 1, приводит к тому, что
все фоновые цвета будут выводиться с высокой интенсивностью.

;---установка светлосинего цвета границы
   MOV  AL,00001001B   ;атрибут светлосинего цвета
   MOV  DX,3D9H        ;адрес регистра выбора цвета
   OUT  DX,AL          ;устанавливаем цвет границы

   Для  PCjr массив ворот дисплея [4.1.1] имеет регистр,  который
устанавливает цвет границы. Это 4-битный регистр, причем биты 0-3
соответствуют синему, зеленому, красному и высокой интенсивности,
когда установлены в  1.  Для  установки  светлосинего  цвета надо
послать  в регистр 1001.  Регистр цвета границы - это  регистр  2
массива ворот дисплея.  Чтобы  получить  доступ  к этому регистру
надо сначала послать 2 в порт по адресу 3DAH.  Затем надо послать
данные по тому же адресу.  Чтобы  быть  уверенным, что микросхема
готова  принять номер регистра, а не данные, надо сначала  прочи-
тать из порта 3DAH. Следующий  пример  устанавливает красный цвет
границы (бит 2 установлен).

   MOV  DX,3DAH     ;адрес порта массива ворот дисплея
   IN   AL,DX       ;чтение для подготовки микросхемы
   MOV  AL,2        ;номер требуемого регистра
   OUT  DX,AL       ;посылаем в порт
   MOV  AL,4        ;устанавливаемс только бит 2
   OUT  DX,AL       ;устанавливаем цвет границы

   Для  EGA цвет границы устанавливается  регистром  сканирования
(overscan).  Это регистр  номер  11H  порта с адресом 3C0H.  Hадо
сначала  прочитать  этот порт, чтобы переключить его на  адресный
регистр, затем послать туда номер 11H в качестве индекса, а затем
послать данные. Имеют значение только младшие 4 бита данных, если
только EGA не связан с улучшенным  цветным дисплеем IBM, а в этом
случае имеют значение младшие 6 битов, которые устанавливают цвет
границы.
   4.1.5 Очистка части/всего экрана.

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

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

   Бейсик  для очистки экрана использует оператор CLS.  При  этом
25-я строка внизу экрана  становится пустой только если был убран
список  значений функциональных клавиш с помощью команды KEY OFF.
Байты атрибутов устанавливаются  равными  ASCII 7. В [4.5.1] дана
процедура  прокрутки,  которая может быть использована в  Бейсике
для очистки окон на экране.

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

   Операционная система предоставляет  несколько способов очистки
экрана.  Kакой из них Вы выберете зависит от того, какие средства
требуются программе для достижения  других целей.  Первый метод -
это  просто сброс режима дисплея, используя функцию 0  прерывания
10H [4.1.2].  Для символьного  экрана  каждая позиция заполняется
пробелом  (ASCII 32), а все атрибуты устанавливаются  нормальными
(ASCII 7).  Обычно этот  метод  хорош  только в начале программы,
когда  все  равно надо устанавливать режим работы  дисплея.   Для
цветного графического  адаптора  и  PCjr  реинициализация  режима
дисплея приводит к катавасии на экране. Этот эффект отсутствует у
монохромного адаптора и EGA.

;---очистка экрана путем установки нового режима
   MOV  AH,0      ;номер функции установки режима дисплея
   MOV  AL,2      ;код режима 80*25 черно-белого
   INT  10H       ;очистка экрана

   Второй метод состоит в использовании  функций 6 и 7 прерывания
10H,  которые сдвигают экран.  Число строк, на которое надо сдви-
нуть экран помещается в AL  и  когда  это  число равно нулю экран
очищается.   Прерывание позволяет сдвигать только  часть  экрана,
поэтому таким образом  можно  очистить  отдельное окно на экране.
Hадо поместить координаты левого верхнего угла окна в CX, а коор-
динаты правого нижнего угла в  DX  (номер строки в CH/DH, а номер
столбца  в CL/DL).  Поместите атрибут, с которым должен чиститься
экран в BH. Kоординаты отсчитываются от 0.

;---очистка окна между 3,4 и 13,15
   MOV  AH,6     ;используем процедуру сдвига
   MOV  AL,0     ;число строк сдвига делаем равным нулю
   MOV  BH,7     ;байт атрибутов для заполнения
   MOV  CH,3     ;строка для верхнего левого угла
   MOV  CL,4     ;столбец для левого верхнего угла
   MOV  DH,13    ;строка для нижнего левого угла
   MOV  DL,15    ;столбец для нижнего левого угла
   INT  10H      ;чистим окно
   Третий метод заключается в использовании  фукнции 9 прерывания
Предыдущая страница Следующая страница
1 ... 24 25 26 27 28 29 30  31 32 33 34 35 36 37 ... 92
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама