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

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


    Прохождения игр    
Stoneshard |#9| A Million Liches
Stoneshard |#8| Happy return
Stoneshard |#7| Oblivion
Stoneshard |#6| Rotten Willow Tavern

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


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

Программно-аппаратная организация компьютера IBM PC

Предыдущая страница Следующая страница
1 ... 32 33 34 35 36 37 38  39 40 41 42 43 44 45 ... 47
     3140 IF SEGVAL!=0 THEN 3040
     3150 DEF SEG=SEGVAL!
     3999 RETURN

     4000 REM  subroutine to build the surrounding messages
     4010 LOCATE 11,1  : PRINT "Normal"
     4020 LOCATE 12,1  : PRINT "normal"
     4030 LOCATE 19,1  : PRINT "Normal"
     4040 LOCATE 20,1  : PRINT "blinking"
     4050 LOCATE 11,69 : PRINT "Bright"
     4060 LOCATE 12,69 : PRINT "normal"
     4070 LOCATE 19,69 : PRINT "Bright"
     4080 LOCATE 20,69 : PRINT "blinking"
     4090 FOR HEX.DIGIT%=0 TO 15
     4100 LOCATE 6,HEX.DIGIT%*3+17
     4110 PRINT HEX$(HEX.DIGIT%)
     4120 LOCATE HEX.DIGIT%+8,11
     4130 PRINT HEX$(HEX.DIGIT%)
     4140 NEXT HEX.DIGIT%
     4150 LOCATE ,,0
     4999 RETURN
     5000 REM subroutine to set the display array
     5010 FOR ROW%=0 TO 15
     5020 FOR COL%=0 TO 15
     5030 POKE(ROW%+7)*160+COL%*6+31,ROW%*16+COL%
     5040 POKE(ROW%+7)*160+COL%*6+33,ROW%*16+COL%
     5050 POKE(ROW%+7)*160+COL%*6+35,ROW%*16+COL%
     5060 POKE(ROW%+7)*160+COL%*6+32,ROW%*16+COL%
     5070 NEXT COL%
     5080 NEXT ROW%
     5999 RETURN

     6000 LOCATE 25,1,1
     6010 PRINT "Press any key to return to DOS... ";
     6020 IF LEN(INKEY$)=0 THEN 6020 ' wait to keystroke
     6030 CLS
     6999 SYSTEM

     9999 REM End of program Liisting 8-1


     Приложение 8.2. Текст программы генерации изображений (Паскаль).


     module Listing_8_2;

     {==========================================================}

     type

       screen_position_pair_type=(character_byte,attribute_byte);
       normal_screen_type=array[1..25,1..80,
              character_byte..attribute_byte] of char;

       narrow_screen_type=array[1..25,1..40,
              character_byte..attribute_byte] of char;

     {==========================================================}

     var [static]

       screen_pointer     : ads of normal_screen_type;

       current_attribute  : char;
       row,column         : integer;
       output_string      : lstring(255);

       page               : word;
       eighty_col_mode    : boolean;

     {==========================================================}

     const
       normal_attrib = chr   (7);
       reverse_video = chr (112);
       bright        = chr  (15);
       blinking      = chr (135);
       alert         = chr (140);

     {==========================================================}

     procedure clear_reset;
       external;
     function video_mode : byte;
       external;

     {==========================================================}

     procedure set_video_address;
       begin
         if video_mode=7 then
           begin
             screen_pointer.s:=#B000;
             screen_pointer.r:=0;
           end
         else
           begin
             screen_pointer.s:=#B800;
             screen_pointer.r:=0;
           end;
       end;

     {==========================================================}

     procedure clear_screen;
       begin
       {if you have the assembly language routines, just to this: }
         clear_reset;
         return;
       {otherwise, we'll clear the screen the hard way: }
         for row:=1 to 25 do
           for column:=1 to 80 vdo
             begin
               screen_pointer^[row,column,character_byte]:=' ';
               screen_pointer^[row,column,attribute_byte]:=normal_attrib;
             end;
         end;

     {==========================================================}

     {                      НЕРАЗБОРЧИВО                        }

     {==========================================================}

     procedure set_pointer_for_page;
       begin
         if eight_col_mode then
           screen_pointer.s:=#B800+page*4096
         else
           screen_pointer.s:=#B800+page*2048
         end;

     end.




                ГЛАВА 9. ВИДЕОДОСТУП 2 - ГРАФИЧЕСКИЙ РЕЖИМ


     После завершения обсуждения  основ  видеопредставления  информации  и
собственно  текстового  режима  в  предшествующей  главе,    перейдем    к
рассмотрению особенностей работы в графическом режиме.
     Не следует удивляться сложности предмета "машинная графика". Сама  по
себе графика - вещь непростая; здесь же она осложняется чисто техническими
аспектами, такими как цветовые палитры, многочисленные режимы  м  хранимые
образы содержимого экрана. Это сложный, многоаспектный  вопрос.  В  рамках
данной главы мы не будем углубляться  в  детали.  Если  в  Ваши  намерения
входит использование графического режима IBM/PC или просто изучение  основ
предмета, то следует  продолжать  чтение.  В  противном  случае,  материал
настоящей главы может быть опущен.
     Все сказанное ниже распространяется на компьютер IBM/PC, а  также  на
все совместимые  с  ним  компьютеры  (последние  предполагают  возможность
выполнения произвольной программы, в том числе и  графической,  написанной
для IBM/PC). Если  речь  идет  о  компьютерах,  использующих  операционную
систему MS-DOS, то большинство положений нуждается в уточнениях.


     9.1. Основы машинной графики

     Существует два основных способа формирования графических  изображений
на видеомониторе. Причудливый мир компьютерных  (экранных)  игр  позволяет
получить  о  них  какое-то  представление,  оценить  их  место,  роль    и
возможности. (Ниже об этом еще пойдет речь, однако следует все это увидеть
собственными глазами.)
     Эти  способы  основываются  либо  на  векторном,  либо  на  растровом
(точечном, пиксельном) принципах формирования изображений, далее именуемых
просто векторной или пиксельной графикой. Графика IBM/PC - это  пиксельная
графика; именно этому виду графики мы уделим основное внимание.
     (Термин "вектор", кстати, уже  использовался  нами  при  рассмотрении
прерываний.  Там  он  обозначал  два  машинных  слова,  содержащих   адрес
программы,  выполняющей  обработку  прерываний;  здесь   под    "вектором"
понимается отрезок прямой. И первая, и вторая интерпретация термина  имеют
чисто  математические  параллели,  с  которыми  мы    не    будем    далее
соприкасаться. Здесь нам важно эти термины не смешивать).
     При построении изображений на  экране  дисплея  средствами  векторной
графики используются только  прямые.  В  этом  случае  машинная  программа
специфицирует две крайние точки прямой, а  собственно  дисплей  "проводит"
между ними прямую.
     Если взять обычный экран дисплея - будь то телевизионный приемник или
компьютерный терминал - то в случае  растрового  сканирования  электронный
луч,  генерирующий  изображение  перемещается  по  стандартному   шаблону,
образуемому строками развертки, заполняющими весь экран. В случае дисплея,
работающего на принципах векторной графики, перемещение электронного  луча
осуществляется  по  команде,  рисующей  заданную  прямую  между  заданными
точками.  В  рамках  системы    векторного    сканирования,    перемещение
электронного луча осуществляется по заданной в каждом случае траектории, а
не по раз и навсегда установленному шаблону.
     Векторная  графика  обладает  рядом  существенных  преимуществ  -  ей
присущи  высокая  четкость,  и  точность,  а  также  сравнительно  высокое
быстродействие. Все это делает ее эффективной в сфере инженерной  графики,
а также при построении особенно сложных или точных  графических  дисплеев.
Однако векторно-графические системы  используются  лишь  для  вычерчивания
прямых  (или  изображений,  которые  могут  быть  представлены   в    виде
совокупности  коротких  отрезков).В  рамках  этой   системы    оказывается
невозможным заполнять изображения цветом сложной формы. Это сильно  сужает
область их возможных применений.
     В основе растровой или пиксельной графики лежит другой принцип. Экран
дисплея здесь разделяется на прямоугольную сетку, состоящую  из  множества
мельчайших элементов изображения, называемых также пикселями  или  пэлами.
Каждый пиксель обладает свойством светимости.  Таким  образом  изображение
синтезируется из множества отдельных точек.
     Размеры пикселей и расстояния  между  ними  тщательно  рассчитываются
таким образом, чтобы промежутки  между  ними  отсутствовали.  Если  группа
смежных пикселей находится в возбужденном состоянии  (т.е.  светится),  то
они воспринимаются глазом не  как  совокупность  отдельных  точек,  а  как
сплошной участок. Если бы точки были достаточно малы, то этот тип  дисплея
мог бы конкурировать с векторным по части четкости и точности,  однако,  у
большинства растровых дисплеев этот показатель оставляет желать лучшего.
     В  принципе,  любая  система  машинной  графики   может    обеспечить
воспроизведение цвета, однако, чаще всего, цвет ассоциируется с  растровой
графикой. Цвет -  это  веский  (но  не  единственный)  аргумент  в  пользу
превосходства систем растровой графики над системами векторной  графики  в
игровой  и  деловой  сферах.    Способность    воспроизводить    сплошные,
прямокриволинейные поверхности в цвете делает  растровую  графику  намного
предпочтительней векторной (исключение составляют специальные  приложения,
например, технические чертежи).
     И последний аспект. В отличие от систем векторной графики, в  которых
изображение  генерируется  с  помощью  последовательности  команд  (каждая
команда рисует одну небольшую прямую), системы растровой графики допускают
использование хранимого  в  памяти  образа  экрана  (эти  вопросы  мы  уже
рассматривали применительно к текстовым образам). В компьютере  IBM/PC  мы
имеем дело именно с сиcтемой растровой  (пиксельной)  графики;  управление
процессом  построения  изображения  на  экране  дисплея  осуществляется  с
помощью хранимого образа экрана. Все  преимущества  дисплеев  с  хранимыми
образами экрана распространяются на растровый дисплей компьютера IBM/PC  -
и в первую очередь способность к считыванию и записи  отображаемых  данных
непосредственно из памяти дисплея.


     9.2. Понятие элемента отображения (пикселя)

     По мере движения сканирующего луча по экрану дисплея высвечиваются те
или иные пиксели. (По крайней мере те пиксели, которые находятся в видимой
части экрана; дело в том, что сканирующий луч выходит за  пределы  видимой
части экрана, в  так  называемую  "закадровую"  область.  Эта  область  не
содержит пиксели, однако, для нее может  быть  установлен  цвет.  В  языке
Бейсик для этого служит параметр  границ  оператора  COLOR  (ЦВЕТ);  кроме
того, одна из функций обслуживания BIOS-ПЗУ может  быть  использована  для
установки закадрового цвета).
     Напомним, что  в  текстовом  режиме  экран  персонального  компьютера
IBM/PC  состоит  из  25  горизонтальных  текстовых  строк;  из  материалов
предшествующей главы, связанных с описанием курсора, известно  также,  что
на  каждый  символ  цветного  графического  дисплея   приходится    восемь
горизонтальных строк развертки. Отсюда следует,  что  вертикальный  размер
общего пиксельного поля IBM/PC равен 200 строкам (8Х25).
     Горизонтальный размер  пиксельного  поля  может  варьироваться.  Этот
размер зависит от объема памяти, требуемой  для  управления  пикселями,  а
также  от  величины  пикселя  (точки),  высвечиваемой  на  том  или   ином
графическом мониторе.
     Компьютер IBM/PC имеет два различных горизонтальных формата (размера)
пиксельного поля, устанавливаемых в зависимости от требуемого размера  (а,
следовательно, и количества) пикселя(ей).  В  режиме  среднего  разрешения
ширина экрана составляет 320 точек, а в режиме высокого разрешения  -  640
точек. (Компьютер IBM/PC  допускает  также  возможность  работы  в  режиме
низкого разрешения, однако, этот  режим  практически  не  используется.  В
режиме низкого разрешения поверхность экрана представляется в виде матрицы
160Х100 пикселей. Аппаратура цветного графического  адаптера  поддерживает
режим низкого разрешения, однако, программная поддержка на уровне BIOS-ПЗУ
Предыдущая страница Следующая страница
1 ... 32 33 34 35 36 37 38  39 40 41 42 43 44 45 ... 47
Ваша оценка:
Комментарий:
  Подпись:
(Чтобы комментарии всегда подписывались Вашим именем, можете зарегистрироваться в Клубе читателей)
  Сайт:
 
Комментарии (1)

Реклама