Студопедия
Случайная страница | ТОМ-1 | ТОМ-2 | ТОМ-3
АрхитектураБиологияГеографияДругоеИностранные языки
ИнформатикаИсторияКультураЛитератураМатематика
МедицинаМеханикаОбразованиеОхрана трудаПедагогика
ПолитикаПравоПрограммированиеПсихологияРелигия
СоциологияСпортСтроительствоФизикаФилософия
ФинансыХимияЭкологияЭкономикаЭлектроника

Адаптер ЕGА

Задание

1. Организовать вывод на экран “бегущей” текстовой строки.

2. Изменить цвет текста.


 

Представление текстовых данных

Во всех видеоподсистемах компьютеров IВМРС и РS/2 для хранения в видеобуфере текстовой информации применяется одинаковый формат. В этом формате каждый символ представляется простой структурой из двух байтов (рис. 1). Символы хранятся в буфере в линейной последовательности, соответственно отображаясь на экране слева направо и сверху вниз

Младший байт Старший байт

АSCII-код Атрибут

Рис..2. Карта видеобуфера в текстовых режимах 80х25

Аппаратный знакогенератор преобразует код каждого символа в соответствующий точечный набор на экране. Схема декодера атрибутов синхронно генерирует соответствующий данному символу - цвет, яркость, мерцание и т. д. Поскольку каждому коду символа в видеобуфере соответствует байт атрибута, экранными атрибутами каждого знака можно управлять независимо. Аппаратный знакогенератор отображает каждый текстовый символ в пределах прямоугольной матрицы из пикселов. В этой матрице символ составляется из пикселов основного цвета (или пикселов переднего плана). Цвет основных и фоновых пикселов символа определяется младшей и старшей тетрадами соответствующего байта атрибута. Для вывода символа следует записать его АSCII-код и атрибут в соответствующее место •видеобуфера. Благодаря линейному отображению можно легко найти адрес (относительно начала 'буфера) конкретного знакоместа экрана. Общая формула выглядит следующим образом

смещение = (строка * ширина + столбец) *2.

В этой формуле ширина есть число символов в каждой строке. Коэффициент 2 введен потому, что символ занимает 2 байта (одно 16-битовое слово) видеобуфера. Значения строки и столбца нумеруются относительно 0, начиная с левого верхнего угла экрана. (Символ в верхнем левом углу расположен в строке 0, колонке 0). Если проверить содержимое видеобуфера, можно увидеть соответствие между видеобуфером и экраном

Несмотря на то что во всех видеоподсистемах компьютеров семейств 1ВМ РС и РS/2 применяется один и тот же способ представления текстовых символов, способы интерпретации байтов атрибута различны. В общем, байт атрибута рассматривается как две тетрады. Младшая тетрада (биты 0 — 3) определяет основной атрибут переднего плана, т. е. цвет и яркость самого знака. Старшая тетрада (биты 4 — 7) представляет собой атрибут фона, хотя в некоторых случаях бит 7 может управлять мерцанием.

Четырехбитовые основные и фоновые атрибуты в конечном счете декодируются в сигналы управления видеомонитором. В простейшем случае у адаптера СGА 4 бита соответствуют непосредственно трем цветовым сигналам и яркостному сигналу В других видеоподсистемах схема декодирования может быть и более сложной, как, например, в ЕGА.

Адаптер ЕGА

В 16-цветных текстовых режимах ЕСА использует формат байта атрибута, идентичный этому формату для СGА. Однако 4-битовые значения основного и фонового атрибутов непосредственно отображаемым цветам не соответствуют. Вместо этого каждое 4-битовое значение маскируется четырьмя младшими битами регистра разрешения цветовой плоскости (12Н) контроллера атрибутов, а 4-битовый результат указывает на один из шестнадцати регистров палитры EGA (рис. 5). Каждый бит 6-битового значения цвета, содержащегося в указанном регистре палитры, соответствует одному из 6 RGB-сигналов, управляющих монитором (рис. 6).

ЕGА-совместимый цветной монитор управляется шестью цветовыми сигналами — тремя основными (высокой интенсивности) и тремя дополнительными (низкой интенсивности). Все 64 комбинации этих шести сигналов появляются как различные цвета с различной или одинаковой интенсивностью. В 200-строчном цветном мониторе или в 200-строчном режиме ЕGA-совместимого монитора биты 0, 1 и 2 управляют цветовыми сигналами, а бит 4 — сигналом интенсивности.

Метод косвенного генерирования цвета через регистры палитры более сложен, нежели прямой метод адаптера CGA, но оказывается более гибким. Можно выбирать основные и фоновые цвета Рис. 6. Значения регистра палитры EGA и соответствующие цветовые сигналы для монитора. Номера контактов даются для 9-штырькового разъема адаптера EQA

Как в адаптерах CGA и MDA, старший бит каждого байта атрибута управляет мерцанием или интенсивностью цвета фона. Бит 3 регистра управления режимом контроллера атрибутов EGA (регистр 10H адресуется с помощью порта ЗС0Н) является битом разрешения мерцания. Установка.его в единицу разрешает мерцание, поэтому регистр палитры определяет только три младших бита тетрады фона (биты 4 — 6 байта атрибута). Таким образом, когда разрешено мерцание, для выбора цвета фона можно обращаться только к первым восьми регистрам палитры. Сброс бита разрешения мерцания запрещает мерцание, обеспечивая доступ ко всем 16 регистрам палитры

Когда с помощью BIOS адаптера EGA выбирается текстовый режим, в регистры палитры по умолчанию записываются соответствующие цветам CGA значения. Значения цветов во вторых восьми регистрах палитры являются яркими вариантами первых восьми. Таким образом, если рассматривать бит 7 байта атрибута символа как бит "интенсивности фона или мерцания", программа будет выполняться с адаптерами EGA и CGA.

Изменять содержимое любого регистра палитры можно как непосредственно, так и при помощи функции 10H прерывания INT 10H (листинг 3). Использовать процедуру BIOS более удобно, так как при этом устраняется необходимость написания аппаратно-зависимых программ. После того, если задана таблица значений соответствующих цветов, процедура BIOS может загрузить одновременно все 16 регистров палитры Тем не менее иногда, например в мультипликации, для быстрой смены цветов на экране может потребоваться непосредственное программирование регистров палитры.


 

 

Листинг программы

 

CSEG segment

org 100h

begin:

mov ax,dx

mov es,ax

;cls

mov al, 02h

mov ah, 00h

int 10h

 

mov bx, 0;spaces counter

 

main:

;get ticks count

MOV AH, 00H

INT 1AH

ADD DX, 3;delay=3/18

MOV WAIT_TIME,DX

 

TIMER:

MOV AH, 00H

INT 1AH

CMP DX,WAIT_TIME;if time is came - exit

JB TIMER

 

;output to videobufer

mov ax, 0B800h;videobuffer addres->es

mov es,ax

mov di,0h;

 

mov cx,len

add cx, bx

mov si, 0;char counter

 

;set color

mov ax, bx;

mov dx, 15

div dl

mov al, 0;

inc ah;

 

cycle:

;if need spaces

cmp cx, len

ja space;

;char to write

mov al, byte ptr string [si]

jmp output;

space:

;space output

mov al, 32;space code

mov es:[di],ax

add di,2

jmp endloop

output:

;char output

mov es:[di],ax

add di,2

inc si;next string char

endloop:

loop cycle;end char cycle

inc bx;inc space counter

cmp bx, 65

jb main;if moved 65 times - exit

mov ax,4C00h

int 21h

 

WAIT_TIME dw 100

string db 'Hello World'

len=$-string

CSEG ends

end begin

 


 


Дата добавления: 2015-08-10; просмотров: 38 | Нарушение авторских прав


<== предыдущая страница | следующая страница ==>
Тема: Сохранение исторической памяти, русского языка.| Результат выполнения программы

mybiblioteka.su - 2015-2024 год. (0.013 сек.)