На главную Назад
Добро пожаловать, уважаемый посетитель!

Сначала поговорим о монохромном дисплее, он - простейший из

двух адаптеров. Мы отложим описание той части платы, которая

работает с печатающим устройством, пока не дойдем до адаптера

печатающего устройства. Схема адаптера печатающего устройства на

монохромной плате идентична схеме отдельного адаптера печатающего

устройства, поэтому способы программирования их также одинаковы.

 

Черно-белая плата работает в одном режиме. Этот видео адаптер

предназначен для вывода 25 строк символов по 80 символов в строке.

Такое построение изображения называют режимом 80*25. Вы помещаете

символы на экран, записывая коды ASCII в буфер дисплея. Буфер

дисплея - это специальная область памяти, расположенная в адресном

пространстве по адресу 0B0000H. Эта память - часть платы адаптера,

а не системной памяти. Всякий раз, когда вы записываете символ в

коде ASCII в буфер дисплея, он появляется в соответствующем месте

экрана. Преобразование символа из кода ASCII в точки на экране

выполняется аппаратно.

 

Каждый символ на дисплее имеет атрибут. Атрибуты символов

определяют вид, в которым адаптер выводит символы на экран. На Фиг.

8.7 показаны атрибуты символов и их значения. Вам нужно знать эти

значения, так как их тоже надо помещать в буфер дисплея. Позиция

каждого символа в буфере дисплея занимает два байта. Четный байт

пары содержит код символа, а нечетный - значение атрибута. По Фиг.

8.7 можно определить значение атрибута, с которым выводить на экран

символ. Обычно выводится белый (на самом деле зеленый) символ на

черном фоне. Для этого случая значение атрибута равно 07H. Чтобы

сделать изображение негативным, нужно изменить значение атрибута на

70H. Атрибут 00H делает символ невидимым. Хотя код ASCII символа и

записан в байт символа, значение атрибута не дает символу появиться

на экране.

 

Дисплейный буфер черно-белой платы содержит 4K байта памяти.

Этого достаточно, чтобы иметь байты символов и атрибутов для каждой

из 2000 позиций экрана. Первый символ буфера дисплея появляется в

верхнем левом углу экрана, следующие два байта изображают следующий

символ справа, и так далее. Первый символ второй строки находится в

байтах 160 и 161. Теперь можно определить адрес любого символа на

экране. Сначала определим позицию в верхнем левом углу экрана, как

находящуюся в строке 0 и колонке 0; нижний правый угол находится в

строке 24 и колонке 79. Тогда формулой вычисления адреса для

произвольной строки и позиции будет

 

адрес = 2*(строка*80 + колонка) + 0B0000H

 

Умножение на 2 выравнивает адрес к двум байтам на позицию.

Прибавление значения 0B0000H отражает начальный адрес буфера

дисплея. Обычно в программе либо регистр DS, либо регистр ES

загружается значением 0B0000H, и в остальном программа работает со

смещениями в буфере дисплея.

ЗначениеАтрибут

----------------------------------------------------------

00Hничего не выводится

01Hподчеркнутые символы

07Hбелый символ на черном фоне

0FHярко-белый символ, черный фон

70Hчерный символ, белый фон

80Hпри добавлении к любому другому символ

мигает

----------------------------------------------------------

Фиг. 8.7 Символьные атрибуты для монохромного адаптера

 

На Фиг. 8.8 в качестве примера для монохромного дисплея

приведена программа, которая перемещает содержимое экрана на одну

позицию вправо. Она выбрасывает крайнюю справа колонку, а слева

помещает колонку из пробелов. Если вы хотите испытать эту

программу, но имеете в своей системе только цветную плату, то

программа работает при установке сегмента DISPLAY на адрес 0B800H.

Оба видео адаптера очень похожи при работе в текстовом режиме, и

различаются только адресами памяти и ввода-вывода.

Microsoft (R) Macro Assembler Version 5.001/1/80 04:05:26

Фиг. 8.8 Горизонтальный сдвиг вправоPage1-1

 

PAGE,132

TITLEФиг. 8.8 Горизонтальный сдвиг вправо

 

0000STACKSEGMENT STACK

00000040[DW64 DUP (?)

????

]

 

0080STACKENDS

 

0000DISPLAY SEGMENT AT0B800H

0000DISPLAY_STARTLABELWORD

0FA0ORG4000

0FA0DISPLAY_ENDLABELWORD

0FA0DISPLAY ENDS

 

0000CODESEGMENT

ASSUMECS:CODE

0000SIDE_SCROLLPROCFAR

00001EPUSHDS

0001B8 0000MOVAX, 0

000450PUSHAX

0005B8 ---- RMOVAX, DISPLAY

00088E D8MOVDS, AX

000A8E C0MOVES, AX

ASSUMEDS:DISPLAY, ES:DISPLAY

 

;-----Заполнение столбца 79 пробелами

 

Фиг. 8.8 Горизонтальный сдвиг вправо

000CB9 0019MOVCX, 25

000F8D 3E 004E RLEADI, DISPLAY_START+78

0013B8 0720MOVAX, 720H

0016BLANK:

001689 05MOV[DI], AX

001881 C7 00A0ADDDI, 160

001CE2 F8LOOPBLANK

 

;-----Сдвиг вправо

 

001EB9 07D0MOVCX, 2000

00218D 36 0F9E RLEASI, DISPLAY_END-2

00258D 3E 0FA0 RLEADI, DISPLAY_END

0029FDSTD

002AF3/ A5REPMOVSW

 

002CA3 0000 RMOVDISPLAY_START, AX

 

002FCBRET

0030SIDE_SCROLLENDP

0030CODEENDS

END

 

Фиг. 8.8 Горизонтальный сдвиг направо

 

Программа на Фиг. 8.8 делает этот горизонтальный сдвиг очень

простым способом. Правая колонка заполняется пробелами в результате

записи 25 пробелов через каждые 160 байт памяти. Затем программа

сдвигает весь дисплейный буфер по памяти на один байт вверх.

Поскольку буфер дисплея непрерывно продолжается строка за строкой,

символ, который был в колонке 79 строки 0, после сдвига оказывается

в колонке 0 строки 1. Наконец, программа заменяет первый символ

буфера пробелом.

 

Монохромный адаптер имеет также несколько портов ввода-вывода,

которые можно использовать при программаровании дисплея, но они

будут рассмотрены очень бегло. Конструкция монохромного адаптера

использует эти порты ввода-вывода в первую очередь для удобства

аппаратной организации. Кроме того, программирование черно-белой

платы в общих чертах аналогично цветной плате. Поскольку цветная

плата имеет намного больше специальных возможностей в использовании

портов ввода-вывода, мы поговорим о них в основном в следующем

разделе.

 

Монохромный адаптер порождает сигналы вертикальной и

горизонтальной синхронизации, необходимые для нормального

изображения, с помощью контроллера электронно-лучевой трубки 6845

фирмы Motorola. Эта микрсхема содержит два порта ввода-вывода,

имеющих адреса 3B4H и 3B5H. Адаптер также имеет управляющий порт

3B8H и порт состояния 3BAH. После инициализации адаптера

модифицировать коды в этих портах вряд ли стоит. Существуют и

другие режимы работы, возможные для монохромной платы, но мы

сконцентрируем наше внимание на цветной плате. Полное, детальное

описание портов ввода-вывода монохромного адаптера можно найти в

техническом описании.


 

Mail.ru