Меню сайта

Урок 137. Адаптер монохромного дисплея и принтера

Сначала поговорим о монохромном дисплее,он — простейший из
— — — двух адаптеров. Мы отложим описание тойчасти платы, которая
— — — работает с печатающим устройством, пока недойдем до адаптера
— — — печатающего устройства. Схема адаптерапечатающего устройства на
— — — монохромной плате идентична схемеотдельного адаптера печатающего
— — — устройства, поэтому способыпрограммирования их также одинаковы.

— — — — — Черно-белая плата работает в одном режиме.Этот видео адаптер
— — — предназначен для вывода 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 AssemblerVersion 5.00 — — — — — — — — — — — — — — 1/1/80 04:05:26
— — — — — — — — — — — Фиг. 8.8 Горизонтальный сдвиг вправо — — — — — — — — — — — — — — — — — — — — Page — — — — 1-1

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

— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — STACK SEGMENT STACK
— — — — — — — — — — — -0000 — 0040[ — — — — — — — — — — — — — — — — — — — — — — — DW — — — 64 DUP (?)
— — — — — — — — — — — — — — — — — — — ????
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — -]

— — — — — — — — — — — -0080 — — — — — — — — — — — — — — — — — — STACK ENDS

— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — DISPLAYSEGMENT AT — — — — — 0B800H
— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — DISPLAY_START — — — — LABEL WORD
— — — — — — — — — — — -0FA0 — — — — — — — — — — — — — — — — — — — — — — — — ORG — — 4000
— — — — — — — — — — — -0FA0 — — — — — — — — — — — — — — — — — — DISPLAY_END LABEL WORD
— — — — — — — — — — — -0FA0 — — — — — — — — — — — — — — — — — — DISPLAYENDS

— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — CODE — SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ASSUME — — — — — CS:CODE
— — — — — — — — — — — -0000 — — — — — — — — — — — — — — — — — — SIDE_SCROLL PROC — FAR
— — — — — — — — — — — -0000 — 1E — — — — — — — — — — — — — — — — — — — — PUSH — DS
— — — — — — — — — — — -0001 — B8 0000 — — — — — — — — — — — — — — — — — — — — — MOV — — AX, 0
— — — — — — — — — — — -0004 — 50 — — — — — — — — — — — — — — — — — — — — PUSH — AX
— — — — — — — — — — — -0005 — B8 —- R — — — — — — — — — — — — — MOV — — AX, DISPLAY
— — — — — — — — — — — -0008 — 8E D8 — — — — — — — — — — — — — — — — — — — — — — — MOV — — DS, AX
— — — — — — — — — — — -000A — 8E C0 — — — — — — — — — — — — — — — — — — — — — — — MOV — — ES, AX
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ASSUME — — — — — DS:DISPLAY, ES:DISPLAY

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

— — — — — — — — — — — — — — — — — -Фиг. 8.8 Горизонтальный сдвиг вправо
— — — — — — — — — — — -000C — B9 0019 — — — — — — — — — — — — — — — — — — — — — MOV — — CX, 25
— — — — — — — — — — — -000F — 8D 3E 004E R — — — — — — — — — — — — — — — — LEA — — DI, DISPLAY_START+78
— — — — — — — — — — — -0013 — B8 0720 — — — — — — — — — — — — — — — — — — — — — MOV — — AX, 720H
— — — — — — — — — — — -0016 — — — — — — — — — — — — — — — — — — BLANK:
— — — — — — — — — — — -0016 — 89 05 — — — — — — — — — — — — — — — — — — — — — — — MOV — — [DI], AX
— — — — — — — — — — — -0018 — 81 C7 00A0 — — — — — — — — — — — — ADD — — DI,160
— — — — — — — — — — — -001C — E2 F8 — — — — — — — — — — — — — — — — — — — — — — — LOOP — BLANK

— — — — — — — — — — — — —
— — — — — — — — — — — — — — — — — — — — — — —— — — — — — Сдвиг вправо

— — — — — — — — — — — -001E — B9 07D0 — — — — — — — — — — — — — — — — — — — — — MOV — — CX, 2000
— — — — — — — — — — — -0021 — 8D 36 0F9E R — — — — — — — — — — — — — — — — LEA — — SI, DISPLAY_END-2
— — — — — — — — — — — -0025 — 8D 3E 0FA0 R — — — — — — — — — — — — — — — — LEA — — DI, DISPLAY_END
— — — — — — — — — — — -0029 — FD — — — — — — — — — — — — — — — — — — — STD
— — — — — — — — — — — -002A — F3/ A5 — — — — — — — — — — — — — — — — — — — — — — REP — — MOVSW

— — — — — — — — — — — -002C — A3 0000 R — — — — — — — — — — — — — MOV — — DISPLAY_START, AX

— — — — — — — — — — — -002F — CB — — — — — — — — — — — — — — — — — — — — RET
— — — — — — — — — — — -0030 — — — — — — — — — — — — — — — — — — SIDE_SCROLL ENDP
— — — — — — — — — — — -0030 — — — — — — — — — — — — — — — — — — CODE — ENDS
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — END

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

— — — — — Программа на Фиг. 8.8 делает этотгоризонтальный сдвиг очень
— — — простым способом. Правая колонказаполняется пробелами в результате
— — — записи 25 пробелов через каждые 160 байтпамяти. Затем программа
— — — сдвигает весь дисплейный буфер по памятина один байт вверх.
— — — Поскольку буфер дисплея непрерывнопродолжается строка за строкой,
— — — символ, который был в колонке 79 строки 0,после сдвига оказывается
— — — в колонке 0 строки 1. Наконец, программазаменяет первый символ
— — — буфера пробелом.

— — — — — Монохромный адаптер имеет также несколькопортов ввода-вывода,
— — — которые можно использовать припрограммаровании дисплея, но они
— — — будут рассмотрены очень бегло. Конструкциямонохромного адаптера
— — — использует эти порты ввода-вывода в первуюочередь для удобства
— — — аппаратной организации. Кроме того,программирование черно-белой
— — — платы в общих чертах аналогично цветнойплате. Поскольку цветная
— — — плата имеет намного больше специальныхвозможностей в использовании
— — — портов ввода-вывода, мы поговорим о них восновном в следующем
— — — разделе.

— — — — — Монохромный адаптер порождает сигналывертикальной и
— — — горизонтальной синхронизации, необходимыедля нормального
— — — изображения, с помощью контроллераэлектронно-лучевой трубки 6845
— — — фирмы Motorola. Эта микрсхема содержит двапорта ввода-вывода,
— — — имеющих адреса 3B4H и 3B5H. Адаптер такжеимеет управляющий порт
— — — 3B8H и порт состояния 3BAH. Послеинициализации адаптера
— — — модифицировать коды в этих портах вряд листоит. Существуют и
— — — другие режимы работы, возможные длямонохромной платы, но мы
— — — сконцентрируем наше внимание на цветнойплате. Полное, детальное
— — — описание портов ввода-вывода монохромногоадаптера можно найти в
— — — техническом описании.

Категория: Программирование на Ассемблере | Дата: 10.03.13

Меню раздела
Блок