Главная · Поиск книг · Поступления книг · 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
Образование - Различные авторы Весь текст 2311.07 Kb

Программирование и кодирование

Предыдущая страница Следующая страница
1 ... 131 132 133 134 135 136 137  138 139 140 141 142 143 144 ... 198
         пример использования этого регистра приведен в программе 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
          ГДДґ    ГДДДДДДДДДДґ    ЪДДДДДДДДДДДДДДДДДД¬
Предыдущая страница Следующая страница
1 ... 131 132 133 134 135 136 137  138 139 140 141 142 143 144 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама