Консалтинговая компания Консалтер.Ру
Главная Новости Библиотека Исследования Законодательство Консалтинг Бизнес-форумы Контакты

Реклама

Рекомендуем



Консалтер.Ру > Библиотека > Информационные технологии

В.А. Авдеев, В.Ф. Гузик
Компьютеры: шины, контроллеры, периферийные устройства

Учебное пособие. Таганрог: ТРТУ, 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 ГК РФ
Знак охраны товарного знака
Значение ошибки в уголовном праве
Коммерческая деятельность: Значение, область применения и цели ценообразования в коммерческой деятельности
Золотая Орда



О сайте   Авторам   Реклама и услуги   Контакты
Copyright © 2007-2021, Консалтер.Ру