 |
на 348 точек по вертикали, поэтому один графический экран
требует 32К видеопамяти. MGA имеет две графические страницы:
страница 0 размещается в адресах B0000h - B7FFFh, страница 1 - в
адресах B8000h - BFFFFh. Смещение от начала страницы до байта,
содержащего точку с координатами (X,Y), равно
2000h * (Y % 4) + 90 * int(Y/4) + int(X/8),
а номер соответствующего бита в этом байте равен 7 - (X % 8).
Здесь X - горизонтальная позиция точки (0 - 719), Y - ее верти-
кальная позиция (0 - 347).
В качестве примера приведем программу инициализации MGA в
текстовом или графическом режиме.
; Таблицы значений регистров ЭЛТ для двух режимов
Graph_Tbl db 35h,2Dh,2Eh,07h,5Bh,02h,57h,57h,02h,03h,00h,00h
Text_Tbl db 61h,50h,52h,0Fh,19h,06h,19h,19h,02h,0Dh,0Bh,0Ch
; Установка графического режима:
Gr_Mode:
mov al,2
lea si,Graph_Tbl
mov bx,0
mov cx,4000h
call Set_Mode
. . .
; Установка текстового режима:
Txt_Mode:
mov al,20h
lea si,Text_Tbl
mov bx,0720h
mov cx,2000h
call Set_Mode
. . .
; Подпрограмма инициализации MGA.
; Вход: AL - режим
; SI - адрес таблицы регистров ЭЛТ
; CX - размер экрана в словах
; BX - значение для очистки экрана
Set_mode proc near
- 56 -
push ax ; сохранить регистры
push bx
push cx
mov dx,3B8h ; регистр режимов
out dx,al ; изменить режим адаптера, отключив экран
mov ax,cs
mov ds,ax ; DS:SI = адрес таблицы
mov dx,3B4h ; регистр индекса
mov cx,12 ; 12 регистров ЭЛТ
xor ah,ah
cld
Set_CRT:
mov al,ah
out dx,al ; номер регистра ЭЛТ
inc dx
lodsb
out dx,al ; содержимое регистра ЭЛТ
dec dx
loop Set_CRT
pop cx
mov ax,0B000h
mov es,ax
pop ax
xor di,di ; ES:DI => видеопамять
rep stosw ; очистка экрана
mov dx,3B8h ; регистр режимов
pop ax
add al,8
out dx,al ; активизировать экран
ret
Set_Mode endp
- 57 -
E7.5. Цветной графический адаптер CGAF
Цветной графический адаптер (CGA - Color Graphics Adapter)
- это графический видеоконтроллер среднего разрешения. Для него
зарезервированы порты ввода-вывода 3D0h - 3DFh, имеющие
следующее назначение.
Порт Операция Описание
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
3D4h Запись Регистр индекса ЭЛТ. Используется для выбора
регистра ЭЛТ. Для записи регистра ЭЛТ Rn нужно
выполнить команды:
out 3D4h,n и out 3D5h,данные.
3D5h Запись/ Регистр данных ЭЛТ. Позволяет записывать все
чтение регистры ЭЛТ и читать регистры R12 - R17.
3D8h Запись Регистр режимов дисплея:
7 6 5 4 3 2 1 0
ЪДВДВДДВДДВДДВДДВДДВДДї
іXіXі і і і і і і Бит:
АДБДБВДБВДБВДБВДБВДБВДЩ ДДДД
і і і і і АДД>0: кол-во столбцов в текстовых режимах:
і і і і і 0=40 столбцов, 1=80 столбцов
і і і і АДДДДД>1: 0=текстовый режим, 1=графический режим
і і і АДДДДДДДД>2: 1=запрет цвета на композитном дисплее
і і АДДДДДДДДДДД>3: 0=очистить экран, 1=активизировать
і і экран
і АДДДДДДДДДДДДДД>4: разрешение по горизонтали:
і 0=320 точек, 1=640 точек
АДДДДДДДДДДДДДДДДД>5: 1=бит 7 атрибутов - мерцание
0=бит 7 атрибутов - яркость фона
3D9h Запись Регистр выбора цветов:
7 6 5 4 3 2 1 0
ЪДВДВДДВДДВДДВДДВДДВДДї
іXіXі і іI R G B і Биты:
АДБДБВДБВДБДДБДДЕДДБДДЩ ДДДДД
і і АДДДДДД>0-3: цвет (см. 7.3): для текста - цвет
і і рамки, для графики - цвет фона
і АДДДДДДДДДДДДДД>4: яркость: для текста - яркость фона,
і для графики - яркость пикселей
АДДДДДДДДДДДДДДДДД>5: номер графической палитры (0 или 1)
Примечание: Выбор палитры задает набор основных цветов в
графическом режиме. Палитра 0 - зеленый/красный/коричневый,
палитра 1 - бирюзовый/сиреневый/светло-серый (т. е. отличается
добавлением синего цвета).
- 58 -
3DAh Чтение Регистр состояния дисплея:
7 6 5 4 3 2 1 0
ЪДВДВДВДВДДВДДВДДВДДї
іXіXіXіXі і і і і Бит:
АДБДБДБДБВДБВДБВДБВДЩ ДДДД
і і і АДДД>0: 0=вывод изображения, 1=горизонтальная
і і і или вертикальная синхронизация
і і АДДДДДД>1: 1=триггер светового пера сброшен
і АДДДДДДДДД>2: 1=защелка светового пера открыта
АДДДДДДДДДДДД>3: 0=экран включен, 1=выключен (позволяет
проверить поступление видеосигнала на
на экран - если этот бит установлен,
вывод на экран не вызывает "хлопьев")
3DBh Запись/ Вывод любого байта выключает триггер светового
Чтение пера.
3DCh Запись/ Вывод любого байта включает триггер светового
Чтение пера.
ДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДД
Видеопамять CGA располагается в адесах ОЗУ B8000h - BFFFFh.
CGA имеет два типа текстовых режимов: 25 строк по 40 символов в
строке и по 80 символов в строке. В режимах 25 х 40 одна
страница занимает 800h байтов, поэтому видеопамять состоит из 8
страниц; в режимах 25 х 80 страница занимает 1000h байтов и
видеопамять состоит из 4 страниц.
Адрес кода символа в текстовых режимах равен B800h :
n*P+m*L+2*C, адрес атрибута на единицу больше. Здесь L - номер
строки (0 - 24), C - номер столбца (0 - 79 или 0 - 39), m = 2 *
количество столбцов режима, n = 800h при m=80 и 1000h при m=160.
CGA имеет два типа графических режимов: цветной режим,
имеющий разрешение 320 точек по горизонтали на 200 точек по
вертикали, и черно-белый режим с разрешением 640 точек на 200
точек. В режиме 320 х 200 каждый пиксель задается двумя битами,
кодирующими его цвет; в режиме 640 х 200 цвет пикселя задается
одним битом (белый/черный). В графических режимах один экран
требует 16К видеопамяти, поэтому имеется одна страница
видеопамяти, которая размещается в адресах B8000h - BFFFFh. Эта
страница расслоена на две области: область с адреса B8000h
содержит пиксели, имеющие четные номера строк; область с адреса
BA000h содержит пиксели из нечетных строк. Поэтому адрес байта,
содержащего точку с координатами (X,Y), равен в цветном режиме
B800h : 2000h * (Y % 2) + 80 * int(Y/2) + int(X/4),
а номера соответствующих битов в этом байте равны 7 - 2 * (X %
4) и 6 - 2 * (X % 4). Здесь X - горизонтальная позиция точки (0
- 319), Y - ее вертикальная позиция (0 - 199).
Адрес байта, содержащего точку с координатами (X,Y), равен
в черно-белом режиме
- 59 -
|