пример использования этого регистра приведен в программе 9-9.
ЪДВДВДВДВДВДВДВД¬
¦7¦6¦5¦4¦3¦2¦1¦0¦
АДБДБДБДБДБДБДБДЩ
АДВДЩ АВЩ АДВДЩ
¦ ¦ АДДДДДДДДД Счетчик циклического сдвига байта CPU
¦ ¦
¦ АДДДДДДДДДДДДДД Выбор функции
¦ БИТЫ
¦ 4 3
¦ 0 0 Данные не изменяются
¦ 0 1 CPU байт ANDбайты защелки
¦ 1 0 CPU байт ORбайты защелки
¦ 1 1 CPU байт XORбайты защелки
АДДДДДДДДДДДДДДДДДДД Не используется на EGA
Рис.9-3. Регистр циклического сдвига данных
Листинг 9-9. Пример использования регистра циклического
сдвига данных
---------------------------------------------------------------
main()
{
int i,j,k ;
for(k=1;k<16;k++)
{
set_crt_mode(16) ;
rect(0,0,200,639,k) ; /* фон */
EGA_GRFX(3,0) ; /* сбросить регистр */
for(i=0;i<13;i++)
printf("\n") ;
printf(" Не изменено логически умножено") ;
printf(" \t логически сложено сложено по модулю") ;
for(i=0, j=0, i<4; j=160*(i+1),i++)
{
switch(i)
{
case 1:EGA_GRFX(3,8) ;
break; /* логически умножить содержание регистра */
case 2:EGA_GRFX(3,16) ;
break; /* логически сложить содержание регистра */
case 3:EGA_GRFX(3,24) ;
/* сложить по модулю содержание регистра */
}
/* Сейчас начертить прямоугольники: */
rect(20,20+j,100,99+j,1) ;
rect(40,40+j,120,119+j,1<<1) ;
rect(60,60+j,140,139+j,1<<2) ;
rect(80,80+j,160,159+j,1<<3) ;
}
gerch() ;
}
- 9-30 -
set_crt_mode(3) ;
}
---------------------------------------------------------------
Режим отображения 256 цветов VGA
VGA имеет новый видеорежим, режим 19, который может отобра-
жать 256 цветов из палитры 262.144 цветов. Концептуально режим 19
достаточно прост. Так как каждый элемент изображения представля-
ется одним байтом дисплейной памяти, упрощены вычисления, опреде-
ляющие смещение каждого элемента изображения. Программа, пред-
ставленная в листинге 9-10, служит примером режима 19 VGA.
Отображаются все 256 цветов. Первые 16 цветов такие же, как цвета
палитр CGA, VGA и EGA. Следующие 21 цвет принадлежат серому
спектру. Заключительные 216 цветов представляют собой три группы
по 72 цвета. В каждой группе цвета плавно переходят от синего к
красному и зеленому. Три группы соответствуют уменьшению насыщен-
ности или увеличению белизны.
Листинг 9-10. Пример режима 19 VGA.
---------------------------------------------------------------
void fast19(int, int, int) ;
main()
{
register i, j ;
struct Ega_info info ;
if(get_ega_info(&info))
if(info.card == 'V') /* карта VGA? */
set_crt_mode(19) ;
else
return ;
else
return ;
for(i=0x0; i<=0xFF; i++) /* вывести палитру */
for(j=0; j<200; j++)
fast19(j,i,i) ;
}
void fast19(row,col,color)
int row, col, color ;
{
/* так как каждый байт является элементом изображения,
** смещение элемента изображения это
** (строка * 320 байтов/строка) + столбец
** также отсутствует маска бита */
unsigned char far *rgen = (char far *)(0xA0000000L +
(row * 320) + col) ;
*rgen = (unsigned char)color ;
}
--------------------------------------------------------------
В программу 9-10 включена подпрограмма непосредственной запи-
си точки в видеопамять, fast19(), для режима отображения 256 цве-
тов VGA. Поскольку каждый элемент изображения использует 1 байт
дисплейной памяти, подпрограмма может быть очень направленной.
- 9-31 -
Нет необходимости в длинных вычислениях памяти или манипуляции с
маской бита или маской матрицы. Похоже, что подпрограмма, возвра-
щающая значение элемента изображения, ведет прямо вперед. Просто
замените оператор *rgen = color ; оператором return(*rgen) ;.
Заключение
С использованием EGA все запутано. Фирма IBM разрабатывала
EGA для поддержки двух совершенно разных стандартов отображения
(CGA и MDA). Результат в настоящее время поддерживается еще более
сложным режимом VGA. Лучшим способом создания программного обес-
печения, работающего с EGA или VGA и не жертвующего совмести-
мостью, является разделение аппаратно-зависимого кода в логичес-
ки-независимые функции. Например, подпрограмму fastdot() програм-
мы 9-5 легко переписать для нового режима отображения 256 цветов
VGA. Более сложную подпрограмму вывода, которая вызывает
fastdot() для вычерчивания точек, не надо переписывать, так как
fastdot() поддерживает новый режим.
В этой главе рассмотрено несколько основных графических функ-
ций: line(), fastdot(), readdot() и rect(). Обсуждены такие осо-
бенности EGA, как регистры-защелки. Также показаны три способа
установки цвета EGA - регистр маски матрицы, регистр установ-
ки/сбора и режим записи 2. Несмотря на то, что указанные под-
программы работают быстро, их можно усовершенствовать. Высокопро-
изводительные графические подпрограммы, использующие EGA или VGA,
будут найдены в процессе исследования.
Глава 10. ПРОГРАММИРОВАНИЕ РАСШИРЕНИЯ ЧИСЛОВОЙ ОБРАБОТКИ
ФИРМЫ INTEL
NPX с точки зрения программиста
Использование средств MS-DOS с NPX
Примеры программирования NPX с помощью MASM
Краткое содержание
Мир MS-DOS принадлежит исключительно Intel. Это дает пользо-
вателям MS-DOS два преимущества. Во-первых, программы, написанные
для MS-DOS, переносимы даже на уровне объектных кодов. Во-вторых,
большинство систем MS-DOS могут использовать чипы расширения чис-
ловой обработки 8087, 80287 или 80387 фирмы Intel. Во всей этой
главе мы будем ссылаться на расширение числовой обработки с по-
мощью аббревиатуры NPX. Задачей NPX является обеспечение семейс-
тва процессоров 8086, систем 80286 и 80386 способностью выполнять
быстрые вычисления с плавающей запятой.
NPX обеспечивает систему командами для выполнения преобразо-
ваний чисел, основных математических действий, а также некоторых
трансцендентных функций, таких как синус, косинус и логарифм.
Возможности NPX не ограничиваются только скоростью работы.
Посредством того, что составляет библиотеку математических под-
программ с плавающей запятой, NPX избавляет программиста от их
написания, повышая таким образом скорость программирования. Кроме
того, так как эти подпрограммы содержатся в чипе NPX, а не в па-
мяти программы, использование NPX может привести к уменьшению
размера программы, что снижает стоимость некоторых разработок.
В отличие от ранних математических процессоров, таких как
Intel 8231 и 8232, доступ к NPX осуществляется посредством управ-
ляющих последовательностей, которые могут показаться программис-
ту, работающему на языке ассемблера, командами на машинном языке.
NPX не требует установки какого-либо дополнительного программного
обеспечения (также как 8088 или главный чип центрального процес-
сора конфигурирован в "максимальном режиме"), и не требует для
доступа программного ввода/ вывода или передачи DMA.
Ввиду того, что NPX полностью совместим с предлагаемыми стан-
дартами IEEE (Институт инженеров по электротехнике и радиолектро-
нике) для вычислений с плавающей запятой, доступна обширная и
расширяющаяся база передового программного обеспечения для число-
вых вычислений. Эта база соответствует способу обработки чисел
NPX. Для программиста, у которого нет времени для написания слож-
ных числовых подпрограмм, это программное обеспечение сохраняет
время и деньги.
Применение 8087 NPX с процессорами 8086 и 8088 не ограничено.
8087 NPX также может быть использовано с процессорами 80186 и
80188. Для пользователей процессора 80286 фирма Intel предостав-
ляет 80287 NPX. А пользователям процессора 80386 предлагается
80387 NPX. Обратите внимание, что некоторые системы, основанные
на 80386, имеют гнездо для подключения 80287 NPX в дополнение или
вместо гнезда для 80387, так как 80287 был дешевле и доступнее,
чем 80387 NPX в то время, когда процессор 80386 был только объяв-
лен. Несмотря на это, информация, представленная в данной главе,
имеет силу для всех этих комбинаций.
- 10-2 -
NPX с точки зрения программиста
В последующих разделах обсуждаются аспекты NPX, о которых не-
обходимо помнить при написании программ для NPX. Они включают в
себя регистры данных, форматы данных с плавающей запятой и дру-
гие, набор команд NPX, режимы адресации, а также слова управления
и состояния.
Регистры данных в NPX
Несмотря на то, что команды NPX появляются как часть основно-
го набора команд процессора, NPX не имеет доступа к основным ре-
гистрам центрального процессора. Вместо этого NPX обладает своим
собственным набором регистров и связывается с центральным процес-
сором посредством общей памяти. Это не является ограничением вви-
ду того, что основные регистры центрального процессора плохо
приспособлены для работы с вещественными числами. Вместо 16-бито-
вых или 32-битовых регистров, используемых центральным процессо-
ром, NPX имеет восемь 80-битовых регистров и поэтому может содер-
жать значительно больше информации. Эти регистры показаны на
рисунке 10-1.
Слово Регистры
признака данных
ЪДД¬ ЪДДДДДДДДДД¬ ЪДДДДДДДДДДДДДДДДДД¬
¦ 0¦ ¦ ST(0) ¦ ¦Cлово состояния ¦
ГДДґ ГДДДДДДДДДДґ АДДДДДДДДДДДДДДДДДДЩДоступны посредством
¦ 1¦ ¦ ST(1) ¦ операндов NPX
ГДДґ ГДДДДДДДДДДґ ЪДДДДДДДДДДДДДДДДДД¬