Меню сайта

Урок 139. Текстовый режим

Два текстовых режима цветного графическогоадаптера дают
— — — простой способ вывода символов на экран. Втекстовых режимах
— — — цветная плата аналогична монохромномуадаптеру, но она позволяет
— — — указать цвет каждого символа. Так же, каки в монохромной плате,
— — — каждая символьная позиция цветной платыимеет байт атрибутов. Этот

— — — — — Номер бита — 7 — 6 — 5 — 4 — 3 -2 — 1 — 0
— — — — — — — — — — — -ЪДДВДДДДДДДДВДДВДДДДДДДДї
— — — — — — — — — — — -і Мі Ф — О — Ні Яі СИМВОЛ і Фиг. 8.9 Байт атрибута
— — — — — — — — — — — -АДДБДДБДДБДДБДДБДДБДДБДДЩ — — — — — — — — для ЦГА


— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — 289 — — — — —



— — — байт атрибутов определяет цвета символов ифона каждой позиции.
— — — — — На Фиг.8.9 показана структура байтаатрибутов в цветном
— — — текстовом режиме. Три бита, помеченных Ф ОН, определяют один из
— — — восьми возможных цветов фона. Три битаСИМВОЛ определяют цвет
— — — символа. Бит Я также влияет на цветсимвола: его установка делает
— — — цвет символа более ярким. Тем самымобеспечивается выбор одного из
— — — 16 цветов символа. Байт атрибута управляетединственным символом,
— — — позволяя выбрать любую комбинацию цветовфона и символа каждой
— — — позиции. Старший бит, помеченный буквой М,обычно вызывает мигание
— — — символа. Установка бита мигания равным 1заставляет контроллер
— — — дисплея переключать цвет символа между егоцветом и цветом фона со
— — — скоростью примерно четыре раза в секунду.Так как символ,
— — — изображенный в цвете фона, невидим, тополучается эффект мигания.
— — — Можно заменить бит мигания четвертым битомцвета фона, разрешив при
— — — этом 16 цветов фона и 16 цветов символа.Это делает один из битов
— — — регистра выбора цветов. Еще надо обратитьвнимание на то, что
— — — одинаковая установка цветов символа и фонаозначает, что вы не
— — — видите символ. Символ есть, но это всеравно что пытаться увидеть
— — — северного медведя в пургу — все одногоцвета. На Фиг. 8.10 показаны
— — — все 16 цветов, возможных в текстовомрежиме.

— — — — — I — — -R — — — — — — G — — — B — — — -Цвет
— — — — — ————————————-
— — — — — 0 — — -0 — — — — — — 0 — — — 0 — — — — — — черный
— — — — — 0 — — -0 — — — — — — 0 — — — 1 — — — — — — синий
— — — — — 0 — — -0 — — — — — — 1 — — — 0 — — — — — — зеленый
— — — — — 0 — — -0 — — — — — — 1 — — — 1 — — — — — — морской волны
— — — — — 0 — — -1 — — — — — — 0 — — — 0 — — — — — — красный
— — — — — 0 — — -1 — — — — — — 0 — — — 1 — — — — — — магента
— — — — — 0 — — -1 — — — — — — 1 — — — 0 — — — — — -коричневый
— — — — — 0 — — -1 — — — — — — 1 — — — 1 — — — — — — светло-серый
— — — — — 1 — — -0 — — — — — — 0 — — — 0 — — — — — — темно-серый
— — — — — 1 — — -0 — — — — — — 0 — — — 1 — — — — — — голубой
— — — — — 1 — — -0 — — — — — — 1 — — — 0 — — — — — — светло-зеленый
— — — — — 1 — — -0 — — — — — — 1 — — — 1 — — — — — — светлый морской
— — — — — 1 — — -1 — — — — — — 0 — — — 0 — — — — — — розовый
— — — — — 1 — — -1 — — — — — — 0 — — — 1 — — — — — — светлый магента
— — — — — 1 — — -1 — — — — — — 1 — — — 0 — — — — — — желтый
— — — — — 1 — — -1 — — — — — — 1 — — — 1 — — — — — — белый
— — — — ——————————————— Фиг. 8.10 Цвета
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — (Фирма IBM, приоритет 1981 г.)

— — — — — Если вы сравните байт атрибута для ЦГА сатрибутами для
— — — монохромного адаптера на Фиг. 8.7, тоувидите, что они аналогичны.
— — — Конечно, вы не можете указать цветамонхромному адаптеру, но все
— — — остальное совпадает. Поскольку цветнаяплата не поддерживает
— — — атрибут подчеркивания, то установкамонохромного атрибута
— — — подчеркивания соответствует голубомусимволу на черном фоне.

— — — — — Такая организация байта атрибутов являетсяпопыткой сделать два
— — — видео адаптера по-возможностисовпадающими. Каждый символ в буфере
— — — дисплея находится по четному адресу, а байтатрибутов — по
— — — нечетному. Память цветного дисплеянаходится на видео адаптере, но
— — — по другому адресу: у монохромного дисплеяона имеет адрес 0B0000H,
— — а у цветного — 0B8000H. О сходстве дисплеевговорит то, что если
— — — при модификации программы для монохромногодисплея на Фиг. 8.8,
— — — изменить содержимое указателя AT сегментана значение 0B800H,
— — — программа будет верно работать и нацветной плате. То есть одна и
— — — та же программа работает на любом видеоадаптере при минимуме
— — — изменений.

— — — — — Для управления адаптером на цветной платетакже используется
— — — контроллер ЭЛТ 6845 фирмы Motorola. Двапорта ввода-вывода этого
— — — контроллера имеют адреса ввода-вывода 3D4Hи 3D5H. На самом деле
— — — контроллер 6845 имеет 18 внутреннихрегистров. Доступ ко всем
— — — регистрам осуществляется с помощью двухпортов ввода-вывода и
— — — косвенной адресации. Для обращения крегистру микросхемы 6845,
— — — нужно сначала загрузить индекс регистра впорт 3D4H, а затем читать
— — — этот регистр или записать в него данныечерез порт 3D5H.

— — — — — Приведем пример, чтобы пояснить, какработает контроллер. На
— — — Фиг. 8.11 перечислены все 18 регистровмикросхемы 6845. В примере
— — — мы используем только регистры R10 и R11.Эти регистры определяют
— — — начальную и конечную строки растра одногознакоместа для курсора.
— — — Каждый символ, порождаемый цветной платой,состоит из восьми строк
— — — растра, имеющих номера от 0 до 7. Выможете поместить курсор в
— — — любых из этих восьми строк. Регистр R10сообщает микросхеме 6845,
— — — на какой строке начинается курсор, арегистр R11 определяет
— — — последнюю строку курсора. ROM BIOSинициализирует курсор,
— — — находящийся на строках 6 и 7- это делаетсязагрузкой числа 6 в R10
— — — и числа 7 в R11.

— — — — — Прогамма на Фиг.8.12(а) модифицируеткурсор цветной графической
— — — платы. Она смещает курсор так, что оноказывается на верхних пяти
— — — строках растра вместо нижних двух. Сначалапрограмма загружает в
— — — индексный регистр контроллера 6845 (3D4H)число 10, а затем
— — — записывает номер начальной строки, равный0, в регистр данных
— — — (3D5H). Затем, поместив 11 в индексный регистр,она устанавливает
— — — номер конечной строки равным 4. Теперькурсор имеет вид мигающего
— — — блока в верхней части позиции символа, ане митающего
— — — подчеркивания. Подобный этому способмодификации курсора
— — — используется несколькими редактирующимипрограммами (редакторами)
— — — персональной ЭВМ, включая встроенныйредактор интерпретатор языка
— — — Бейсик. При установке режима вставки вовремя редактирования,
— — — курсор становится жирнее- интерпретаторБейсика делает это, меняя
— — — параметры в микросхеме 6845.

— — — — — Вернувшись к Фиг. 8.11, можно увидеть, чтов микросхеме 6845
— — — есть и другие регистры. Большинство из нихуправляет сигналами
— — — горизонтальной и вертикальнойсинхронизации телевизионного растра.
— — — Вы можете модифицировать коды в этихрегистрах для каких-либо
— — — действий дисплеем. Например, команда MODEсистемы DOS, которая
— — — может сдвигать катринку на экране влево ивправо, модифицирует
— — — регистр R2, задающий положение строчногосинхроимпульса.
— — — — — Если вы захотите поэкспериментировать сэтими регистрами, вам
— — — придется писать короткие программы,делающие требуемые изменения.
— — — — — — — — — — -ЪДДДДДДДДВДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДВДДДДДДДДДДДВДДДДДДДДВДДДДДДДДї
— — — — — — — — — — — іРегистр і — — — — — — — — — — — — — — — — — — — і Объект в -і — — — — — — — — і — — — — — — — — — — і
— — — — — — — — — — — і — -# і — — — Регистр хранит — — — — — — — — — іпрограмме і чтение і запись і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДД
ДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R0 і — Гориз. сумма — — — — — — — іСимвол — — — і — — — — Нет — і — — — — — Да — -і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R1 і — Выводимая горизонталь — — — — іСимвол — — — і — — — — Нет — і — — — — — Да — -і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R2 і — Гориз. поз. синхронизации іСимвол — — — і — — — — Нет — і — — — — — Да — -і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R3 і — Гориз. ширина синхронизации і Символ — — — і — — Нет — і — — — — — Да — — і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R4 і — Вертикальный итог — — — — — — — — іСимв. ряд і — — — — Нет — і — — — — — Да — — і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R5 і — Общая вертикальн.коррекция — — — — — іСкан.строкиі — — — — Нет -і — — — — — Да — — і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R6 і — Выводимая вертикаль — — — — — іСимв. ряд і — — — — Нет — і — — — — — Да — — і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R7 і — Поз. вертикальной синхрон. — — — — — іСимв. ряд і — — — — Нет — і — — — — — Да — — і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R8 і — Режим совмещения — — — — — — — — — і — — — — — — — — -і — — — — Нет — і — — — — — Да — — і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R9 і — Макс.адрес скан. строки — — іСкан.строкиі — — — — Нет -і — — — — — Да — — і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R10 — — — — — і — Начало курсора — — — — — — — — — — — іСкан.строкиі — — — — Нет — і — — — — — Да — — і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R11 — — — — — і — Конец курсора — — — — — — іСкан.строкиі — — — — Нет — і — — — — — Да — — і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R12 — — — — — і — Начальный адрес (гориз.) — і — — — — — — — — і — — — — Нет — і — — — — — Да — -і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R13 — — — — — і — Начальный адрес (строка) — і — — — — — — — — і — — — — Нет — і — — — — — Да — -і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R14 — — — — — і — Курсор (Гориз.) — — — — — — — — — — і — — — — — — — — — і — — — — Да — — і — — — — — Да — — — і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R15 — — — — — і — Курсор (Строка) — — — — — — — — — — і — — — — — — — — — і — — — — Да — — і — — — — — Да — — — і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДД
ДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R16 — — — — — і — Световое перо (гориз.) — — — і — — — — — — — — і — — — — Да — — і — — — — — Нет — -і
— — — — — — — — — — — ГДДДДДДДДЕДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДЕДДДДДДДДДДДЕДДДДДДДДЕДДДДДДДДґ
— — — — — — — — — — — і -R17 — — — — — і — Световое перо(строка) — — — — і — — — — — — — — — і — — — — Да — — і — — — — — Нет — — і
— — — — — — — — — — — АДДДДДДДДБДДДДДДДДДДДДДДДДДДДДДДДДДДДДДДБДДДДДДДДДДДБДДДДДДДДБДДДДДДДДЩ

— — — — — — — — — — — Фиг. 8.11 Регистры микросхемы 6845
— — — — — — — — — — — — — — -(с разрешения фирмы Motorola)

— — — Если попытаться изменять регистры спомощью утилиты DEBUG, то это
— — — может не сработать. Регистры R14 и R15управляют позицией курсора,
— — — и если утилита DEBUG переместит курсормежду вашими обращениями к
— — — индексному регистру и к регистру данных,изменения не произойдет.
— — — Так получилось потому, что утилита DEBUGизменила содержимое
— — — индексного регистра микросхемы 6845, и онуже больше не указывает
— — — на тот внутренний регистр, который выхотели изменить.

— — — — — Другая интересная регистровая парамикросхемы 6845 — пара
— — — регистров начального адреса R12 и R13.Адаптер цветного
— — — графического дисплея имеет 16K байтпамяти, а монохромная плата 4K
— — — байта. Дополнительная память в цветнойплате используется для
— — — графических режимов, но она целиком ввашем распоряжении и в
— — — текстовых режимах. Для текстового режима80*25 требуется 4K байта
— — — памяти, так что в буфере есть место длячетырех разных страниц
— — — памяти. Сдвигать данные на экране можнопереносом данных с одного
— — — места на другое, как это делалось на Фиг.8.8. В случае же
— — — вертикального сдвига нужно лишь изменитьначальный адрес в
— — — микросхеме 6845. Обычно начальный адресравен 0. Если вы измените
— — — его на 80 (число символов в строке),отображение будет начинаться
— — — со второй строки. Это даст немедленныйэффект сдвига всех данных
— — — экрана вверх на одну строку.

— — — — — На самом деле вы не изменяли данные, асдвинули начало
— — — сканирования памяти дисплея. Можнорассматривать дисплей как окно
— — — 80*25, через которое мы смотрим в8192-символьный буфер дисплея.

— — — — — При использовании начального адреса длясдвига данных возникают
— — — сложности, когда вы приближаетесь кгранице 16K байт. В этой точке
— — — отображение «заворачивается».Верхние строки извлекаются из конца
— — — буфера, а нижние строки — из его начала.Вы, конечно, сможете
— — — решить эту проблему, но для этогопотребуются некоторые размышления
— — — и эксперименты.

— — — [Прим. перев.: стр. 252 текста оригинала вмоей копии отсутствует.
— — — Очевидно, на ней находится только началоФиг. 8.12]

— — — — — — — — -Microsoft (R) Macro Assembler Version 5.00 — — — — — — — — — — — -1/1/80 04:05:31
— — — — — — — — -Фиг. 8.12 Программа управления цветным дисплеем — — — — — — — Page — 1-1

— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — PAGE — — -,132
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — TITLE — -Фиг. 8.12 Программа управления цветным дисплеем

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

— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — DISPLAY_BUFFER — SEGMENT AT 0B800H
— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — DISPLAY_START — — LABEL — — WORD
— — — — — — — — — -0000 — — — — — — — — — — — —
— — — — — DISPLAY_BUFFER — ENDS

— — — — — — — — — -= 03D4 — — — — — — — — — — — — — — — — — — — — — CRT_INDEX — — — — — — — EQU — — — -03D4H
— — — — — — — — — -= 03D5 — — — — — — — — — — — — — — — — — — — — — CRT_DATA — — — — — — — — EQU — — — -03D5H
— — — — — — — — — -= 03DA — — — — — — — — — — — — — — — — — — — — — CRT_STATUS — — — — — EQU — — — — 03DAH
— — — — — — — — — -= 000A — — — — — — — — — — — — — — — — — — — — — CURSOR_START — — — EQU — — — — 10 — — — — — — — — Регистры управления курсором
— — — — — — — — — -= 000B — — — — — — — — — — — — — — — — — — — — — CURSOR_END — — — — — EQU — — — — 11 — — — — — — — — — — — — — в контроллередисплея 6845

— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — CODE — — -SEGMENT
— — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — — ASSUME -CS:CODE
— — — — — — — — — -0000 — — — — — — — — — — — — — — — — — COLOR_GRAPHICS — PROC — — — FAR
— — — — — — — — — -0000 — 1E — — — — — — — — — — — — — — — — — — — — — — — — -PUSH — — — DS — — — — — — — — — — — — Адрес возврата в ДОС
— — — — — — — — — -0001 — 2B C0 — — — — — — — — — — — — — — — — SUB — — — — AX, AX
— — — — — — — — — -0003 — 50 — — — — — — — — — — — — — — — — — — — — — — — — -PUSH — — — AX

Продолжение в комментариях…

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

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