равно 0, то число повторений есть величина переменная.
Отличия функции обслуживания с кодом 9 от функции обслуживания с
кодом 14 состоит в следующем: имеется возможность управлять атрибутами
цвета, отсутствует автоматическое отображение курсора при записи символа.
В графическом режиме цвет указанный в регистре BL, является цветом
собственно пикселя, входящего в состав рисунка символа. Если седьмой бит
равен 1, то биты в BL, определяющие цвет, объединяются с битами цвета
текущего пикселя при помощи операции "исключающего или" (XOR). Такой
подход гарантирует отличие полученного цвета от прежнего, обеспечивая
четкость изображения. Если 7-й бит в регистре BL равен 0, то цвет в BL
заменяет существующие цвета пикселей. Сказанное справедливо также в
отношении функций обслуживания с кодами 10 и 12.
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 9 AL = символ ASCII, предназначенный
для вывода на экран
BL = атрибуты символа, выводимого на
экран
BH = активная страница изображения (в
графических режимах отсутствует)
CX = число записываемых символов и
атрибутов
____________________________________________________________
Функция обслуживания с кодом 10 ("запись символа") отличается от
предыдущей только тем, что не позволяет в текстовом режиме изменять
существующие атрибуты цвета. Однако для графического режима регистр BL
должен содержать атрибуты цвета. Таким образом название этой функции не
совсем корректно. На функции обслуживания с кодами 9 и 12 распространяются
одни и те же правила работы с цветом в графических режимах: любой цвет
можно использовать либо непосредственно, либо в комбинации с существующим
цветом (операция XOR).
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 10 AL = символ ASCII, выводимый на
экран
BL = атрибуты цвета для
графических режимов
BH = активная страница
CX = число записываемых символов
____________________________________________________________
Функция обслуживания с кодом 11 ("установка палитры") предназначена
для выбора одной из двух графических палитр среднего разрешения. Прежде
чем передать управление этой функции обслуживания следует загрузить в
регистр BH идентификатор палитры, а в регистр BL - значение цвета.
Напомним здесь, что в графических режимах (режимы 4 - 6) каждый
пиксель на экране имеет свой цвет. Цвет устанавливается в основном тем же
способом, что и атрибуты в текстовых режимах, однако имеются некоторые
отличия. Во-первых, пиксели не могут мерцать. Во-вторых, поскольку каждый
пиксель является дискретной цветной точкой, то не существует ни очертания,
ни фона; просто каждый пиксель имеет тот или иной цвет. Когда, в
графическом режиме формируется текст, то один цвет используется для
пикселей, из которых составляется фон, а другой для пикселей, из которых
составляются символы.
Примечание: Специфика использования графического режима в языке
Бейсик дает основание считать, что здесь возможен фоновый цвет. На самом
деле это не так.
Для каждого графического режима существуют заранее определенные
наборы цветов, известные как палитры. Стандартные палитры можно изменять в
компьютере IBM PC/jr или в установленном графическом адаптере; обычный
цветной графический адаптер такой возможности не имеет. Если цвета палитры
для любого графического адаптера определены, то цвет каждого пикселя
выбирается из имеющихся цветов путем установки значений битов,
определяющих цвет пикселя. В 2-х цветном режиме имеется один бит для
каждого пикселя и цвет пикселя задается в виде О или 1. В 4-х цветном
режиме предусмотрены два бита, принимающие значения от О до 3. В 16-ти
цветном режиме цвет задается с помощью 4 битов, хранящих значение от 0 до
15.
Одна из модификаций функции обслуживания с кодом 11 применима к
текстовым режимам, все остальные - только к графическим. Для текстовых
режимов справедливо следующее правило: если BH=0, то BL указывает цвет
окружения текстовой области, выбранной из полной 16-ти цветной палитры.
Для любого графического режима, если BH=0, то BL указывает цвет фона и
цвет окружения. Окружение эквивалентно произвольной области экрана, если
речь идет о цвете фона. Значение BL может быть выбрано из полной 16-ти
цветной палитры.
Если BH=1, то BL определяет палитру. Для цветного графического
адаптера это применимо только к режиму 4 (среднее разрешение 4-х цветная
графика). Для более совершенных графических адаптеров, в том числе и для
PCjr, это положение распространяется и на все остальные режимы. Здесь мы
рассматриваем только стандартные 4-х цветные палитры, которые характерны
для режима 4 (палитры 0 и 1).
Палитра 0:
0 - текущий цвет фона
1 - зеленый (2)
2 - красный (4)
3 - коричневый (6)
Палитра 1:
0 - текущий цвет фона
1 - циан (3)
2 - пурпурный (5)
3 - белый (7)
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 11 BH = указатель палитры (0 или 1 для
среднего разрешения
BL = цвет или палитра использования
с указателем цвета
____________________________________________________________
Функция обслуживания с кодом 12 (C/16) предназначена для записи
пикселя. Поскольку положение курсора, используемое функциями обслуживания
с кодами 9,10,14, рассматривается в контексте символов, то здесь
необходимо указывать строку развертки и позицию (столбец) пикселя.
Координаты пикселя отсчитываются от верхнего левого угла экрана (0,0).
Номер строки развертки, для которого требуется один байт указывается в
регистре DL, для номера столбца одного байта недостаточно - ему отведен
регистр CX.
Цвет задается в регистре AL и может быть использован либо
непосредственно, либо в сочетании с другими цветами (операция XOR).
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 12 AL = код цвета пикселя (0 - 15)
DL = номер строки пикселя
CX = номер столбца пикселя
____________________________________________________________
Функция обслуживания с кодом 13 (D/16) предназначена для чтения
пикселя, точнее для получения информации о его цвете. (Для сравнения
напомним, что процедура обслуживания с кодом 8 формирует на выходе как код
цвета, так и код символа ASCII). Код цвета пикселя формируется в регистре
AL; старшие биты при этом устанавливаются в 0. Регистры DL и CX
предназначены для передачи процедуре обслуживания номера строки и номера
столбца пикселя.
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 13 AL = код цвета пикселя (0 - 15)
DL = номер строки пикселя
CX = номер столбца пикселя
____________________________________________________________
Функция обслуживания с кодом 14(E/16) предназначена для записи
символа в режиме телетайпа. При этом экран дисплея оказывается в роли
принтера или пишущей машинки. Такие команды операционной системы как TYPE
или COPY (если в качестве результирующего файла указана консоль "CON")
используют эту функцию обслуживания для иммитации принтера или пишущей
машинки. В сущности, в рамках этой функции обслуживания возможности
аппаратуры в части генерации цвета, мерцания или управления курсором не
используются.
При обращении к процедуре обслуживания с кодом 14 производится запись
символа в текущую позицию (указываемую курсором) и осуществляется
перемещение курсора. При необходимости выполняется переход к новой строке
или сдвиг содержимого экрана. Записываемый символ указывается в регистре
AL. Для текстового режима текущие атрибуты экрана сохраняются. Для
графического режима цвет фона указывается в регистре BL.
Из всего набора символов следующие четыре символа непосредственно не
отображаются, а выступают в роли управляющих (интерпретируются
аппаратурой): CHR$(7) - звук, CHRS(8) - возврат на одну позицию, CHR$(10)
- перевод строки, CHR$(13) - возврат каретки.
____________________________________________________________
Номер функции Параметры
обслуживания
____________________________________________________________
AH = 14 AL = записываемый символ ASCII
BL = цвет символа (только для
графических режимов)
BH = страница (для графических
режимов не указывается)
____________________________________________________________
Приложение 8.1. Текст программы демонстрации возможностей управления
цветом (Бейсик).
1000 REM Listing 8.1
1010 REM
1020 REM
1030 GOSUB 2000 ' TITLE
1040 GOSUB 3000 ' GET WHICH DISPLAY TYPE, AND SET ADDRESS
1050 GOSUB 2000 ' SET THE TITLE AGAIN
1060 GOSUB 4000 ' BUILD THE SURROUNDING COMMENTS
1070 GOSUB 5000 ' BUILD THE DISPLAY ARRAY
1080 GOSUB 6000 ' FINISH UP AND RETURN TO DOS
2000 REM Title subroutine
2010 KEY OFF : CLS : WIDTH 80
2020 REM
2030 PRINT " Programs for INSIDE THE IBM PERSONAL COMPUTER"
2040 PRINT " (C) Copyright 1983 Peter Norton"
2050 PRINT
2060 PRINT Program 8-1: Demonstrate all screen attributes"
2999 RETURN
3000 REM Subroutine to inquire about display type
3010 PRINT
3020 PRINT "Before we go any further, is this a color-graphics
display?";
3030 GOTO 3060
3040 PRINT
3050 PRINT " (answer Y or N) ";
3060 ANSWER$=INKEY$
3070 IF LEN(ANSWER$)<1 THEN 3060
3080 IF LEN(ANSWER$)>1 THEN 3040
3090 SEGVAL!=0
3100 IF MID$(ANSWER$,1,1)="Y" THEN SEGVAL!=&HB800 ' Color segment
3110 IF MID$(ANSWER$,1,1)="y" THEN SEGVAL!=&HB800 ' Color segment
3120 IF MID$(ANSWER$,1,1)="N" THEN SEGVAL!=&HB000 'Monochrome segment
3130 IF MID$(ANSWER$,1,1)="n" THEN SEGVAL!=&HB000 'Monochrome segment