Жанр: Учеба

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

сторінка №18

д цвета пикселя формируется в регистре
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
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 мы
имеем дело именно с системой растровой (пиксельной) графики; управление
процессом построения изображения на экране дисплея осуществляется с
помощью хранимого образа экрана. Все преимущества дисплеев с хранимыми
образами экрана распространяются на растровый дисплей компьютера IBM/PC -
и в первую очередь способность к считыванию и записи отображаемых данных
непосредственно из памяти дисплея.

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

По мере движения сканирующего луча по экрану дисплея высвечиваются те
или иные пиксели. (По крайней мере те пиксели, которые находятся в видимой
части экрана; дело в том, что сканирующий луч выходит за пределы видимой
части экрана, в так называемую "закадровую" область. Эта область не
содержит пиксели, однако, для нее может быть установлен цвет. В языке
Бейсик для этого служит параметр границ оператора COLOR (ЦВЕТ); кроме
того, одна из функций обслуживания BIOS-ПЗУ может быть использована для
установки закадрового цвета).

Напомним, что в текстовом режиме экран персонального компьютера
IBM/PC состоит из 25 горизонтальных текстовых строк; из материалов
предшествующей главы, связанных с описанием курсора, известно также, что
на каждый символ цветного графического дисплея приходится восемь
горизонтальных строк развертки. Отсюда следует, что вертикальный размер
общего пиксельного поля IBM/PC равен 200 строкам (8Х25).
Горизонтальный размер пиксельного поля может варьироваться. Этот
размер зависит от объема памяти, требуемой для управления пикселями, а
также от величины пикселя (точки), высвечиваемой на том или ином
графическом мониторе.
Компьютер IBM/PC имеет два различных горизонтальных формата (размера)
пиксельного поля, устанавливаемых в зависимости от требуемого размера (а,
следовательно, и количества) пикселя(ей). В режиме среднего разрешения
ширина экрана составляет 320 точек, а в режиме высокого разрешения - 640
точек. (Компьютер IBM/PC допускает также возможность работы в режиме
низкого разрешения, однако, этот режим практически не используется. В
режиме низкого разрешения поверхность экрана представляется в виде матрицы
160Х100 пикселей. Аппаратура цветного графического адаптера поддерживает
режим низкого разрешения, однако, программная поддержка на уровне BIOS-ПЗУ
отсутствует).
Таким образом, графический режим среднего разрешения предусматривает
наличие 320 точек по горизонтали экрана и 200 точек по вертикали, в то
время как графический режим высокого разрешения - 640 точек по горизонтали
и 200 точек по вертикали. Понятно, что изображение, представленное в
режиме высокого разрешения, способно воспроизводить более мелкие детали
только на горизонтали. Для большинства приложений качество изображения
практически осталось бы неизменным, если бы режим высокого разрешения
выражался параметрами 320Х400.
Каждый пиксель на экране дисплея может находиться либо в активном
(светимость), либо в пассивном состоянии; в режиме среднего разрешения
может быть воспроизведен и цвет. В режиме высокого разрешения цвет не
воспроизводится, отчасти из-за особенностей генерации изображения, отчасти
из-за отсутствия дополнительной памяти, необходимой для воспроизведения
цвета.
Рассмотрим требования к памяти, предъявляемые графическим режимом
высокого разрешения. Если к числу сведений, сообщаемых о пикселе,
относится только признак активного или пассивного состояния (наличие или
отсутствие светимости пикселя) - а именно это и сообщается о пикселе -, то
для управления пикселем достаточно одного бита, принимающего значение 0
или 1. В режиме высокого разрешения имеется 640Х200 (или 128000) пикселей.
Для управления ими требуется 128000 бит, а с учетом того, что байт состоит
из восьми битов, - 16000 байт. Именно такая память выделена цветному
графическому адаптеру (округлена до 16К).
Режим среднего разрешения требует вдвое меньшего числа пикселей. Имея
те же 16К байт памяти мы можем выделить для каждого пикселя два бита. С
помощью двух битов могут быть представлены четыре различные величины (0,
1, 2, 3); но это позволит лишь частично решить проблему воспроизведения
цвета.
Прежде, чем познакомиться с окончательным разрешением проблемы
воспроизведения цвета в графическом режиме, обратим внимание на одно
отличие в специфике использования памяти дисплея в графическом и текстовом
режимах. Из предыдущей главы нам известно о наличии двух текстовых режимов
- 80-ти позиционного и 40-позиционного. Графика представлена также двумя
режимами: режимом среднего разрешения и режимом высокого разрешения. В
обоих случаях число отображаемых элементов одного режима вдвое превышает
число отображаемых элементов другого режима. Соответственно изменяются и
требования, предъявляемые к памяти. На этом сходство между ними
заканчивается. Если в текстовом режиме дополнительная память используется
для увеличения числа страниц, то в графическом режиме дополнительная
память используется для удвоения объема памяти, отводимой под один
пиксель.
В связи со спецификой управления цветом в компьютере IBM/PC возникает
вопрос о количестве одновременно используемых цветов. Цветной графический
адаптер и экран видеомонитора способны воспроизвести любой из шестнадцати
возможных цветов для каждого пикселя. Здесь нет никаких проблем. Проблемы
возникают при спецификации цвета.
Фирма IBM могла пойти по пути создания цветного графического
адаптера, имеющего достаточно памяти для представления всех возможных
цветов каждого пикселя, однако она этого не сделала. Как уже говорилось
выше, в режиме высокого разрешения каждому пикселю отводится только один
бит, поэтому в принципе в этом режиме невозможно воспроизвести более двух
цветов - белого и черного. В режиме среднего разрешения каждому пикселю
отводится два бита, поэтому возможно воспроизведение четырех цветов.
Проблема выбора того или иного набора, состоящего из четырех цветов,
решена необычно и остроумно. В любой момент времени активны только четыре
цвета, но пользователю предоставляется возможность установить любой из
четырех цветов по своему усмотрению. Остальные три устанавливаются в
рамках так называемой палитры. В качестве компенсации фирма IBM
предоставляет на выбор две возможные палитры - первая состоит из зеленого,
красного и коричневого (на большинстве дисплеев воспроизводится как
желтый), а вторая - из циана, малинового и белого.

Если все это звучит недостаточно убедительно, давайте рассмотрим этот
вопрос с другой стороны. При задании цвета любого пикселя в режиме
среднего разрешения мы используем один из четырех кодов 0, 1, 2, 3. Что
стоит за этими числами? Ничего жестко фиксированного. Их смысл
определяется в процессе спецификации используемого цвета. Мы можем
закрепить за кодом 0 один из 16 цветов. Для кодов 1-3 фирма IBM предлагает
две стандартные возможности (две палитры), и пользователь должен выбрать,
какую палитру он будет использовать. Заметим здесь, что пользователь не
может влиять на составление палитры.
Давайте еще раз осмыслим происходящее. Если бы объем памяти был
достаточно велик, то мы могли бы для каждого пикселя использовать полную
гамму цветов (16). В действительности объем памяти таков, что в режиме
высокого разрешения цветовая гамма каждого пикселя состоит только из двух
цветов, а в режиме среднего разрешения - только из четырех. Пользователю
могли бы быть предоставлены более широкие возможности в части выбора
цвета, однако по этому пути разработчики персонального компьютера не
пошли.
В режиме высокого разрешения пользователь лишен возможности выбирать
конкретные цвета (два цвета) по своему усмотрению; этими цветами могут
быть только черный и белый. В режиме среднего разрешения пользователь
имеет некоторую свободу выбора цветовой гаммы. Из четырех цветов один цвет
устанавливается пользователем произвольно. Остальные три цвета
устанавливаются в рамках одной из двух строго фиксированных палитр.
Таким образом, любой цветной дисплей в графическом режиме позволяет
использовать четыре цвета, причем три цвета выбираются из палитры 1
(зеленый, красный, коричневый), либо из палитры 2 (циан, малиновый,
белый).
Если цветной дисплей находится в графическом режиме, то цвет любого
пикселя (из состава имеющихся четырех цветов) можно применить путем
изменения содержимого двух битов, описывающих этот пиксель. Существует и
возможность изменить сразу цвета всего изображения; для этого следует:
либо изменить палитру, либо изменить цвет 0, либо изменить и то и другое.
В этих случаях собственно изображение (картинка) не меняется, изменяется
лишь ее цвет(а). (Для графического режима низкого разрешения предусмотрено
достаточно битов, чтобы каждый пиксель мог воспроизвести любой из 16
возможных цветов. Режим низкого разрешения может быть вполне реализован на
Вашем компьютере; аппаратная поддержка этого режима реализована полностью.
Однако программная поддержка на уровне BIOS-ПЗУ полностью отсутствует.
Если функции программ BIOS возьмет на себя программа пользователя, то
графический режим низкого разрешения будет функционировать).

9.3. Отображение пикселей на экране

Графический режим работы компьютера представляет собой наиболее
сложный режим. Если использовать процедуры BIOS-ПЗУ, ориентированные на
обслуживание графического режима (описаны в параграфе 8.9), то
декодирование образа экрана выполняется автоматически. Это одна из причин
их широкого использования. В тех случаях, когда необходимо использовать
режим прямого управления, следует детально ознакомиться с материалом
настоящего параграфа.
Подобно обычному телевизору, видеомонитор генерирует изображение за
два прохода. На первом проходе электронный луч перемещается только по
четным строкам развертки; после этого (на обратном ходе луча) сканируются
все нечетные строки.
При работе в текстовом режиме это обстоятельство в расчет не
принимается, поскольку функции управления формированием изображения
полностью выполняет контроллер видеомонитора. В графическом режиме эти
особенности необходимо учитывать.
Электронные схемы генерации изображения в графическом режиме должны
воспринимать поток битов, определяющих пиксели, причем воспринимать их в
том порядке, в котором сканирующий луч перемещается по экрану - сначала по
четным, а затем по нечетным строкам. По этой причине образ экрана хранится
не в том виде, который удобен человеку-оператору или программе; структура
хранимого образа отвечает потребностям электронных схем генерации. На
рис.9.1 воспроизводится эта структура.
Для того, чтобы структура хранимого образа экрана соответствовала
механизму сканирования экрана, память дисплея организована в виде двух
блоков, смещенными друг относительно друга на 4К. Первый блок содержит
информацию о пикселях четных строк,а второй блок - о пикселях нечетных
строк. Рассмотрим эти вопросы более подробно (используя в качестве примера
графику с высоким разрешением).
В начале области (блока) памяти располагаются биты, управляющие
процессом отображения на экране дисплея первой строки, т.е. строки с
номером 0. Строка содержит 640 пикселей (графический режим с высоким
разрешением), а каждый пиксель требует для индикации своего состояния 1
бит. Таким образом, для управления первой строкой требуется 640 битов или
80 байтов. Для управления следующей четной строкой (строкой с номером 2)
также требуется 640 битов или 80 байтов и т.д. Самый первый бит управляет
точкой экрана дисплея, находящейся на пересечении нулевой строки и
нулевого столбца (0,0), следующий бит управляет точкой (0,1) и т.д.

Последней точкой первой строки является точка (0,639); следом за ней идет
точка (2,0) и т.д. В конце концов блок памяти, хранящий четные строки,
оказывается исчерпанным, и с нового адреса, кратного 1К, начинается блок
памяти, хранящий нечетные строки.
Для графического режима со средним разрешением память организована
точно также, с той лишь разницей, что горизонтальная координата экрана
состоит из 320 пикселей, причем каждый пиксель представлен двумя битами,
позволяющими представить цветовые комбинации. Для представления строки
по-прежнему требуется 80 байтов; для представления используются два блока
памяти: один - для четных, а другой - для нечетных строк.
Заметим здесь, что конечный адрес памяти будет одним и тем же как для
режима среднего, так и для режима высокого разрешения. Но в одном случае
число пикселей вдвое меньше (при вдвое большем количестве битов,
отведенных для представления каждого пикселя), а в другом случае вдвое
больше (соответственно, количество битов, отведенных для представления
пикселя в два раза меньше). Такой подход позволяет сохранить постоянную
длину строки для обоих режимов - 640 битов или 80 байтов. Программы,
приведенные в приложении (листинг 9.1), дают возможность пользователям,
прог

Список сторінок

Поділитися у соцмережах

☏ Замовлення реклами: +3805044-68-872

© Асоціація електронних бібліотек України

☝ Усі матеріали сайту (зокрема статті, зображення, рекламні оголошення тощо) призначені лише для попереднього ознайомлення. Усі права на публікації, представлені на сайті, належать їхнім законним власникам. Просимо Вас не зберігати копії інформації.