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

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


    Прохождения игр    
Demon's Souls |#13| Storm King
Demon's Souls |#12| Old Monk & Old Hero
Demon's Souls |#11| Мaneater part 2
Demon's Souls |#10| Мaneater (part 1)

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


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

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

Предыдущая страница Следующая страница
1 ... 123 124 125 126 127 128 129  130 131 132 133 134 135 136 ... 198
          * прерываний последовательного порта.
          */
             intmask = inp(P8259 _1) | int_disable_mask;
             outp(P8259_1, intmask);

         /* Восстановить первоначальный вектор прерывания */
             _dos_setvect(int_number, old_handler);

         /* Снова разрешить прерывания */
             _enable();
         }
         /*---------------------------------------------------------*/
         /* s _ s e n d c h a r
          * Поместить символ в очередь на передачу. Вернуть 1, если
          * все в порядке, в противном случае вернуть 0.
          */
         int s_sendchar(int ch)
         {
             int retval, intmask;
             _disable();
             retval = q_puton(txq, (char *)&ch);
             _enable();
         /* Включить прерываниеTHRE в том случае, если оно выключено
          * и не получен XOFF.
          */
             if (rcvd_xonxoff != XOFF_RCVD)
                 turnon_int(THREINT,intmask);
             return(retval);
         }
         /*---------------------------------------------------------*/
         /* s _ r c v c h a r
          * Вернуть символ из очереди на прием.
          * Вернуть 1, если очередь пуста.
          */

         int s_rcvchar(void)
         {
             int ch, intmask;
         /* Если ранее был послан сигнал XOFF, то мы должны направить
          * XON.
          */
             if(enable_xonxoff)
             {
             if(rxq->count <= LO_TRIGGER(RXQSIZE) &&
                  sent_xonxoff != XON_SENT )
                  {
                     send_xon = TRUE;
                     turnon_int(THREINT,intmask);
                  }
             }
             _disable();
             if (q_getfrom(rxq, (chr *)&ch) == NULL)
             {
                 _enable();
                 return(-1);
             }
             else

                                      - 8-31 -
             {
             _enable();
             return(ch);
             }
         }
         /*--------------------------------------------------------*/
         /* q _ g e t f r o m
          * Копировать следующий элемент данных в очередь в
          * определенное местоположение. Также вернуть указатель
          * на этот элемент.
          */
         char *q_getfrom( QTYPE *queue, char *data)
         {
             char *current;
             current = NULL;

             if(queue->front == -1) return(current);
         /* В противном случае искать данные */
             current = &(queue->data[queue->front]);
             *data = *current;
             queue->count--;
             if(queue->count == 0)
             {
         /* Очередь пуста. Сбросить начало, конец и счет */

                queue->front = queue->rear = -1;
                return(current);
             }
         /* Увеличить начальный индекс и проверить на циклический
          * переход.
          */
             if(queue->front == queue->maxsize-1)
                queue->front = 0;
             else
                queue->front++;
             return(current);
         }
         /*--------------------------------------------------------*/
         /* q _ p u t o n
          * Поместить элемент данных в очередь.
          */
         int q_puton(QTYPE *queue, char *data)
         {
         /* Сначала проверить степень заполнения очереди.
          * Если она полна, то вернуть 0.
          */
             if(queue->count == queue->maxsize) return(0);
         /* В противном случае установить на конец и провести
          * проверку на циклический переход.
          */
             if(queue->rear == queue->maxsize-1)
                queue->rear = 0;
             else
                queue->rear++;
         /* Сохранить символ в очереди */
             queue->data[queue->rear] = *data;
             queue->count++;

                                      - 8-32 -
             if(queue->front == -1) queue->front = 0;
             return(1); /* Успешно вставленный элемент */
         }
         _____________________________________________________________


                                Заключение

             В этой  главе  рассмотрены  характеристики аппаратных средств
         последовательного порта в системах MS-DOS и  представлены  методы
         его программирования. Также содержится небольшая коммуникационная
         программа,  написанная на Microsoft C 5.0, для иллюстрации реали-
         зации этих методов на практике. Программирование последовательно-
         го порта для  управляемого  прерывания  ввода/вывода  выполняется
         следующим образом:

             1. Получить  базовый адрес выбранного коммуникационного порта
                из области данных BIOS на сегменте 40h и со смещением 0.
             2. Используя функцию MS-DOS 35h,  получить адрес старой  под-
                программы обслуживания прерывания  для  номера  прерывания,
                соответствующего данному адаптеру, и сохранить его.
             3. Используя функцию MS-DOS 25h, установить для номера преры-
                вания  Вашу собственную подпрограмму обслуживания прерыва-
                ния.
             4. С  использованием функции BIOS 14h установить коммуникаци-
                онные параметры адаптера.
             5. Установить очереди приема и передачи для содержания входя-
                щих и исходящих символов.
             6. Включить в регистре управления модемом необходимые сигналы
                (например,  DTR - терминал готов и RTS - запрос на переда-
                чу).
             7. Разрешить все прерывания адаптера (установкой битов с 0 по
                3 в регистре разрешения прерывания в 1).
             8. Так же включить бит OUT2 в регистре управления модемом для
                разрешения прерываний последовательного адаптера.
             9. Запрограммировать контроллер 8259A для распознавания  пре-
                рываний с IRQ этого адаптера (путем установки соответству-
                ющего бита регистра маски прерывания, доступного через ад-
                рес порта 21h, в 0).

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

             1. Выключить прерывания последовательного адаптера.
             2. Сбросить биты регистра управления модемом.
             3. Восстановить старую подпрограмму обработки прерывания.
             4. Замаскировать прерывания для этого IRQ в 8259A.






                        Глава 9. ПРОГРАММИРОВАНИЕ EGA И VGA



                        Мониторы и возможности EGA
                        Прямая запись на экран
                        Много точек
                        Чтение битовых матриц
                        Цветовые палитры EGA
                        Регистр циклического сдвига данных
                        Режим отображения 256 цветов VGA
                        Заключение





             Усовершенствованный графический адаптер (EGA) и  более  новая
         видеографическая матрица (VGA) предлагают разработчику единствен-
         ные в своем роде задачи.  EGA становится традиционной графической
         картой в мире MS-DOS.  Тем не менее, существует четыре совершенно
         различных графических стандарта поддержки EGA:

             1. Графические режимы, совместимые с CGA.
             2. Два  новых графических режима EGA для 200-строчных цветных
                мониторов.
             3. Новый графический режим EGA для 350-строчных цветных мони-
                торов.
             4. Новый  графический режим EGA для использования с монохром-
                ными (текстовыми) мониторами.

             Помимо всех указанных режимов, VGA поддерживает еще несколько
         новых.  В  этой  главе рассматриваются концепции программирования
         каждого нового графического режима EGA, а также новые режимы VGA.
         Не охватываются совместимые с CGA текстовый и графический режимы,
         так как они более приемлемы для карты CGA.
             Оригинальная плата  EGA фирмы IBM поступает с 64К графической
         памяти.  Она может быть расширена до 256К. Чем больше память EGA,
         тем шире графические возможности адаптера.  EGA-совместимые карты
         других производителей обычно поступают с уже  установленными 256К
         памяти.  Карты  VGA  в большинстве новых персональных компьютерах
         IBM System 2 включены в объединительную плату;  для других ПК VGA
         доступна в качестве платы расширения.  В каждом случае VGA всегда
         будет иметь установленными 256К памяти.
             Видеофункции  компьютера  IBM  PC вызываются прерыванием BIOS
         10h. Эти видеофункции позволяют программе устанавливают текстовый
         или  графический  режимы,  считывать  или  писать одиночные точки
         растра и помещать символы на экран. Адаптер EGA имеет новую BIOS,
         которая заменяет все оригинальные функции персонального компьюте-
         ра и добавляет несколько новых. Эти функции EGA позволяют опреде-
         лять новые символы,  лучше управлять палитрой и выводом на печать
         текстовых строк.


                                      - 9-2 -

                            Мониторы и возможности EGA

             Адаптер EGA создан для работы с тремя различными типами мони-
         торов: цветным дисплеем IBM, усовершенствованным цветным дисплеем
         IBM или монохромным дисплеем IBM,  а также с эквивалентными дисп-
         леями других производителей.  Обычно,  тип используемого монитора
         определяет  графическое разрешение,  максимальное количество цве-
         тов, цветовую палитру и число элементов растра, составляющее каж-
         дый символ.  Карта VGA должна использоваться с цветным или монох-
         ромным аналоговым монитором.   Несмотря  на  то,  что  аналоговый
         монитор функционально отличается от цифрового (или ТТЛ) монитора,
         программист должен рассматривать его как цифровой монитор с высо-
         кой разрешающей способность.  Следует только обратить внимание на
         то, цветной он или монохромный.
             Цветной монитор  IBM  имеет  максимальную разрешающую способ-
         ность 640 х 200 элементов изображения.  Цветной монитор ограничен
         200  вертикальными  строками  развертки ввиду того,  что он может
         применять только одну вертикальную частоту сканирования.  При ис-
         пользовании  с  цветным  монитором адаптер EGA совместим со всеми
         текстовымы и графическими режимами цветного графического  адапте-
         ра.  Два новых графических режима,  режимы 13 и 14, используют до
         16 цветов с разрешением 320 х 200 и 640  х  200.  Тем  не  менее,
         цветной  монитор ограничивается 16-цветной фиксированной палитрой
         и 200-ми вертикальными линиями развертки.  Фиксированная  палитра
         использует те же 16 цветов, что и CGA в текстовом режиме. Исполь-
         зуемый по умолчанию прямоугольник  для  генерации  символа  имеет
         размер 8 х 8 элементов изображения. Эти режимы перечислены в таб-
         лице 9-1.
                                                         Таблица 9-1
                     Использование EGA c цветным монитором IBM
         ДДДДВДДДДДДДДДВДДДДДДДВДДДДДДДДВДДДДДДДВДДДДДДДДВДДДДВДДДДДДДД
         Но- ¦ Тип     ¦Макси- ¦ Размер ¦ Размер¦ Макси- ¦Сег-¦ Разре-
         мер ¦         ¦мальное¦(столбцы¦ прямо-¦ мальное¦мент¦ шение
         ре- ¦         ¦число  ¦ х      ¦ уголь-¦ число  ¦бу- ¦
         жима¦         ¦цветов ¦ строки)¦ ника  ¦ страниц¦фера¦
         ДДДД†ДДДДДДДДД†ДДДДДДД†ДДДДДДДД†ДДДДДДД†ДДДДДДДД†ДДДД†ДДДДДДДД
          0  ¦ Текст   ¦  16   ¦ 40х25  ¦  8х8  ¦ 8      ¦B800¦ 320х200
Предыдущая страница Следующая страница
1 ... 123 124 125 126 127 128 129  130 131 132 133 134 135 136 ... 198
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 

Реклама