В.А. Авдеев, В.Ф. Гузик
Компьютеры: шины, контроллеры, периферийные устройства
Учебное пособие. Таганрог: ТРТУ, 2001. - 536 с.
Приложение В. Проверочные задания, основные сведения и примеры программ
Знакогенератор. Режимы дисплея
6.1. Формулировка задания
Необходимо написать программу на ассемблере, отображающую на
экран дисплея увеличенный образ символа, взятого из таблицы знакогенератора и
соответствующего, например, символу нажатой клавиши. В качестве эквивалента
изображения увеличенного символа на экране необходимо использовать заданный
знак кода ASCII.
6.2. Основные сведения
Для преобразования кодов символов в их точечные образы на
экране предназначен знакогенератор, который работает в текстовом и графическом
режимах. Текстовый режим знакогенератора выполняется аппаратным способом и
использует образы символов (таблицы определения символов), размещенных во
втором банке видеопамяти, загрузку таблиц шрифтов в который при инициализации
выполняет BIOS. Текстовый знакогенератор применяет таблицы шрифтов, каждая из
которых содержит 256 символов. Для адаптера VGA второй банк видеопамяти хранит
8 таблиц. Любая таблица имеет размер 8 Кбайт (блок) и использует следующие
смещения: 0000h, 2000h, 4000h, ... , E000h. Начальный адрес видеобуфера равен
B800:0000h или B000:0000h. Каждому символу в таблице соответствует 32-байтный
максимальный набор. Если для описания матричного образа символа используется
меньше байтов, то остальные байты не учитываются знакогенератором. В компьютерах
PC и AT таблица кодов ASCII (0-127) находится по адресу F000:FA6Eh, а для
адаптеров EGA и VGA начальный адрес таблицы определяется вектором прерывания
43h, причем высоту выводимых символов задает переменная по адресу 0040:0085h.
Вторая половина таблицы кодов ASCII (128 - 256) для
компьютеров PC и AT (PS/2) указывается вектором прерывания 1Fh, имеющим адрес
0000:007Ch. Адаптер VGA в текстовых и графических режимах использует матрицы
символов 8х8, 8х14, 9х14, 9х16. В режимах 9х14, 9х16 аппаратный знакогенератор
этого адаптера прибавляет дополнительный пиксел справа для каждой строки матрицы
образа символа. Обычно девятый пиксел повторяет значение восьмого пиксела или
задается фоном. С помощью бита D2 регистра управления режимом (R16) атрибутного
контроллера адаптера можно изменять значение девятого пиксела.
Рассмотрим принципы пикселного представления каждого символа
на экране дисплея. На рис. 1 показан битовый набор 8х8 (а) для описания
символа У и пикселное изображение этого символа (б).
Рис. 1. Табличное и пикселное
представление символа Y
Из рис. 1, а видно, что описание символа Y содержит 8 байт:
00h, 00h, B6h,..., FCh. Каждый байт управляет высвечиванием пикселов в
соответствующем ряду знакоместа символа. В этом случае для описания 128
символов потребуется 1024 байт, а для описания 256 символов - 2048 байт. Как
уже отмечалось, в адаптере VGA используются текстовые и графические режимы с
матрицами 8х8, 8х14 и 8х16, при инициализации одного из которых из ПЗУ в банк 2
видеопамяти переписывается соответствующая таблица определения символов. Обычно
стандартная таблица пересылается в нулевой банк (смещение 0000h) банка 2. Если
в банке 2 содержится несколько таблиц, то для выбора одной из них может быть
применен бит D3 байта атрибута, используемый для управления яркостью символа.
Изменение назначения этого бита осуществляется битами D1, D0 и D3, D2 регистра выбора
набора символов (порт 3C5h секвенсера). Секвенсер координирует работу
видеопамяти и разрешает работу с восемью шрифтами, два из которых могут
одновременно отображаться на экран.
Для записи необходимых данных в регистр выбора набора
символов предназначен адресный регистр (порт 3C4h), в который следует записать
индекс 03 выбора регистра набора символов. Биты D1 и D0 определяют номер
таблицы (банков) символов, если бит D3 атрибута равен 0, а биты D3 и D2 -
номер таблицы, если бит D3 атрибута равен 1. В том случае, если значение пары
битов D1, D0 и D3, D2 совпадают, то бит 3 определяет яркость символа и
используется только блок 0 банка 2 видеопамяти. Можно изменить стандартный
набор символов, который потом восстанавливается передачей стандартной таблицы из
ПЗУ.
В заключение отметим, что в адаптере VGA размер матриц
образов символов устанавливается отдельно от видеорежимов, которые делятся на
текстовые и графические. Для управления знакогенератором используется функция
11h прерывания int10h BIOS. Функция 11h содержит 15 групп. Например,
подфункции 00h - 04h выполняют загрузку таблицы определений символов в банк 2
видеопамяти для соответствующих режимов. Подфункция 00h предназначена для
загрузки таблицы пользователя, подфункция 01h - для загрузки таблицы BIOS с
матрицами символов 8х14, подфункция 02h - для загрузки таблицы BIOS с матрицами
символов 8х8, подфункция 04h - для загрузки таблицы BIOS с матрицами символов
8х16 и подфункция 03h - для выбора текущих таблиц. Для выполнения функции 11h и
подфункции 01h необходимо в регистре процессора AH установить значение 11h, в
регистре AL - 01h, а в регистре BL - номер таблицы (блока) в банке 2
видеопамяти. Функция 00h прерывания int10h осуществляет установку режима
дисплея, причем в регистре AH процессора задается сама функция (AH = 00h), а в
регистр AL заносится номер режима.
Режимы адаптера VGA описываются следующей табл. 1.
Таблица 1
Режим
|
Разрешающая
способность
|
Число
цветов
|
Количество
символов
|
Размер
матрицы
|
Номер
|
Тип
|
0,1
|
Текст
|
360 – 400
|
16
|
40x25
|
9х16
|
2,3
|
Текст
|
720 – 400
|
16
|
80x25
|
9х16
|
4,5
|
Графика
|
320 – 200
|
4
|
40x25
|
8х8
|
6
|
Графика
|
640 – 200
|
2
|
80x25
|
8х8
|
7
|
Текст
|
720 – 400
|
Моно
|
80x25
|
9х16
|
D
|
Графика
|
320 – 200
|
16
|
40x25
|
8х8
|
E
|
Графика
|
640 – 200
|
16
|
80x25
|
8х8
|
F
|
Графика
|
640 – 350
|
Моно
|
80x25
|
8х14
|
10
|
Графика
|
640 – 350
|
16
|
80x25
|
8х14
|
11
|
Графика
|
640 – 480
|
2
|
80x30
|
8х16
|
13
|
Графика
|
320 – 200
|
256
|
40x25
|
8х8
|
При задании режима очищается экран (видеобуфер), загружаются
регистры контроллера ЭЛТ видеоадаптера, устанавливается цветовая палитра. При
включении питания по умолчанию вводится текстовый режим 3 с размером знаковой
матрицы 9х16.
6.3. Пример выполнения варианта задания
Программа использует код ASCII нажатой клавиши символа для
доступа к его матричному образу (набору), размещенному в ПЗУ (таблице
определения символов (0 - 127)). Начальный адрес этой таблицы F000:FA6Eh. Затем
осуществляется выделение каждой строки набора (матрицы образа символа) и
побитная ее обработка с помощью кода маски 1000 0000 и операции сдвига на один
бит. Если значение выделенного бита строки матрицы равно 1, то в видеопамять
вводится символ заполнения (ASCII 219), соответствующий единичному биту
(пикселу) матрицы образа заданного символа. Выход из программы по нажатию
клавиши ESC.
Zseg EQU 0F000h
Zofs EQU 0FA6Eh
Msk EQU 10000000B
Fill EQU 219
Code Segment 'Code'
org 100h
assume
cs:Code,ds:Code
Begin: jmp Start
Message db 'Символ ?: $'
Symb db ?
;-----------------------------Процедура установки позиции курсора---------------------
Set_Curpos Proc Near
push ax
push bx
push dx
mov ah,2
mov bh,0
int 10h
pop dx
pop bx
pop ax
ret
Set_Curpos EndP
;--------------------------------Процедура очистки
экрана---------------------------------
Clear Proc Near
push ax
push bx
push cx
push dx
mov ax,600h
mov bh,7
mov cx,0
mov dh,40
mov dl,79
int 10h
pop dx
pop cx
pop bx
pop ax
ret
Clear EndP
;----------------------------------Основная программа--------------------------------------
Start: call Clear
mov dx,0
call Set_Curpos
mov ah,9
lea dx,Message
int 21h
;------------------------------------Обработка
символа--------------------------------------
Symbol:mov ax,Zseg ;
Задаем базовый адрес ПЗУ
mov ds,ax ;
в DS, его
mov si,ZOfs ;
смещение в SI
mov ah,0 ;
читаем символ
int 16h
cmp al,27 ;
если ESC - выход
jz Quit
mov cl,8 ;
В ПЗУ 8 байт кода символа
mul cl ;
смещение
add si,ax
mov dh,15
mov dl,20
call Set_Curpos
mov cx,8 ; 8
линий в символе
Line: mov al,ds:[si] ; Читаем
код символа
mov ah,al ;
копируем
mov dl,8 ;
8 точек в линии
Point: push ax
and al,msk ;
сравниваем с маской,
jnz Pixel ;
если 1 ,то ставим точку
mov ah,0Eh ;
иначе пробел
mov al,' '
int 10h
jmp NextPX ; Точка
Pixel: mov ah,0Eh
mov al,Fill
int 10h
NextPX:pop ax ;
сдвигаем код символа
shl ah,1
mov al,ah
dec dl ;
смотрим, напечатаны ли все линии
jz NextLn ;
если нет, то следующая
jmp Point ;
линия
NextLn:inc dh
mov dl,20
call Set_Curpos
inc si
Loop Line
jmp Symbol
;------------------------------------------------Выход------------------------------------------
Quit: mov ax,4c00h
int 21h
Code Ends
End Begin
6.4. Варианты заданий
Морфологический граф вариантов заданий представлен на рис. 2.
Рис 2. Морфологический граф вариантов
заданий
Задание на разработку программы определяет маршрут в графе,
например, маршрут 1-3-5-9. Морфологический граф устанавливает 30 вариантов
заданий без учета вершины 8, определяющей параметры творческого задания.
Первый уровень, содержащий вершины 1 и 2, указывает
соответственно, что символы могут быть введены с клавиатуры либо могут
находиться в области данных программы. Вершина 3 следующего уровня
сопоставляется с ПЗУ (BIOS), хранящим таблицу определений символов, а вершина 4
- с банком 2 видеопамяти, содержащим до восьми таблиц символьных образов.
Третий уровень устанавливает размер матрицы символа:
вершина 5 -
размер 8х8, вершина 6 - размер 8х14, а вершина 7 - размер 8х16 (9х16). Кроме
того, вершина 8 указывает на необходимость применения в разрабатываемой
программе собственной таблицы определения символов. Вершина 9 четвертого уровня
графа задает масштаб 1:1 изображения символа на экране, т. е. каждому пикселу
на экране соответствует выбранный символ - заполнитель, например, символ с
кодом 176 (177, 219 и т. д.). Вершина 10 соответствует масштабу 1:2
представления символа. В этом случае каждому пикселу сопоставляется два символа
- заполнителя, размещенных по оси Х координатной системы экрана. Вершина 11
обуславливает использование масштаба 1:2, требующего заменить каждый пиксел
двумя символами, расположенными по оси Y.
Похожие материалы:
Знак правовой охраны смежных прав
Знак охраны топологии интегральной микросхемы - ст.1455 ГК РФ
Знак охраны товарного знака
Значение ошибки в уголовном праве
Коммерческая деятельность: Значение, область применения и цели ценообразования в коммерческой деятельности
Золотая Орда
|