Графические устройства

Работа с текстом


Работа с текстом
Работа с текстом При выполнении графических задач на экран выводятся различные текстовые сообщения. Это могут быть названия окон, пояснения к выбранным значкам, информационные строки ра...
Вывод информационных строк
Вывод информационных строк В процессе выполнения графических программ на экран могут выводиться информационные строки, которые делятся на две основные категории. К первой категории отно...
Расположение и адрес строки
Расположение и адрес строки Прежде чем выводить символ, надо решить, в каком месте экрана он будет располагаться, и определить, какому участку видеопамяти соответствует это место. Спосо...
Пример 5 20 Вычисление адреса начала информационной строки
Пример 5.20. Вычисление адреса начала информационной строки mov ax, versize ; ax = количество строк на экране sub ax, hsymb ; уменьшаем его на высоту символа mul horsize ; разность умножае...
Манипуляции с исходным фоном
Манипуляции с исходным фоном Информационная строка, как правило, располагается не на пустом экране. Поэтому надо сохранять изображение в той части рабочей области экрана, которую займет...
Размер и размещение фона
Размер и размещение фона Высота информационной строки нам известна, точнее мы знаем, что ее значение хранится в переменной hsymb. Ширина строки равна произведению ширины символов на их...
Подпрограмма Savinfo
Подпрограмма Savinfo Текст подпрограммы, выполняющей сохранение исходного фона, приведен в примере 5.21. Перед ее вызовом надо сохранить содержимое переменной cur_win и поместить в нее...
Пример 5 21 Сохранение фона на месте информационной строки
Пример 5.21. Сохранение фона на месте информационной строки Savinfo: PushReg <Cur_win,ax,ex,si,di,fs,es>; сохранение в стеке call setwin установка исходного окна mov fs, Vbuff f...
Подпрограмма Delinfo
Подпрограмма Delinfo Текст подпрограммы, восстанавливающей исходный фон из оперативной памяти, приведен в примере 5.22. Перед ее вызовом надо сохранить содержимое переменной Cur_win и п...
Пример 5 22 Восстановление фона
Пример 5.22. Восстановление фона на месте информационной строки Delinfo : PushReg <Cur win, ax , ex, si, di, fs>; сохранение в стеке call setwin установка исходного окна mov...
Упрощение подпрограмм
Упрощение подпрограмм Во всех режимах PPG при выбранном нами размере и расположении информационная строка полностью помещается в последнем окне видеопамяти. Поэтому в цикле пересылки п...
Пример 5 23 Вывод текста информационной строки
Пример 5.23. Вывод текста информационной строки Outlnf: push Cur_win ; сохранение исходного значения Cur_win mov ax, Inflinw ; ax = номер окна информационной строки mov Cur_win, ax ; Cur_...
Текстовый курсор в графическом режиме
Текстовый курсор в графическом режиме При вводе и редактировании текста, для указания позиции вводимого или изменяемого символа, традиционно используется курсор. В графических режимах а...
Предварительные замечания
Предварительные замечания При работе в графических режимах на экране югут находиться рисунки двух курсоров, один из которых указывает теку-цее положение манипулятора "мышь", а...
Способ построения курсора
Способ построения курсора В процессе редактирования текста изображение урсора может перемещаться по строкам и располагаться на месте уже выеденных символов. Поэтому надо принять специа...
Таблица 5 1 Схема выполнения операции хоr
Таблица 5.1. Схема выполнения операции хоr Состояние бита источника 0 0 1 1 Состояние бита приемника 0 1 0 1 Состояние бита...
Пример 5 24 Подпрограмма изменения
Пример 5.24. Подпрограмма изменения состояния текстового курсора TglCrsr: PushReg <ax,ex,di,Cur_win>; сохранение в стеке call Setwin ; установка исходного окна mov al, grnd...
Таблица 5 2 Варианты переменных команд для примера 5 24
Таблица 5.2. Варианты переменных команд для примера 5.24 Режимы PPG Режимы Hi-Color Режимы True Color mov al, grndcol mov ax, grndcol mov eax, grndcol...
Мигающий курсор
Мигающий курсор Текстовый курсор обычно мигает, т. е. его изображение периодически появляется и исчезает. Для получения эффекта мигания надо вызывать подпрограмму TglCrsr через равные п...
Перехват прерываний от таймера
Перехват прерываний от таймера Каждый тик таймера вызывает так называемое аппаратное прерывание. Текущий процесс вычислений приостанавливается и выполняется специальная процедура BIOS....
Пример 5 25 Сохранение и изменение содержимого вектора 1Ch
Пример 5.25. Сохранение и изменение содержимого вектора 1Ch хоr ах, ах ; очистка регистра ах mov CurStat, al ; запрет построения рисунка курсора mov fs, ax ; очистка сегментного регис...
Восстановление вектора прерывания
Восстановление вектора прерывания Перед завершением задачи восстанавливается исходное значение вектора ich, т. е. подпрограмма Timeint исключается из списка заданий таймеру. Если это н...
Пример 5 26 Восстановление исходного содержимого вектора 1Ch
Пример 5.26. Восстановление исходного содержимого вектора 1Ch хоr ах, ах ; очистка регистра- ах mov fs, ax ; очистка сегментного регистра fs mov ax, cs:VeclC ; ax = содержимое VeclC...
Пример 5 27 Подпрограмма создающая эффект мигающего курсора
Пример 5.27. Подпрограмма, создающая эффект мигающего курсора Timeint: PushReg <ax,ds,es>; !! сохранение регистров ах, ds и es mov ax, data ; ! ! ах = значение сегмента данных...
Ввод символов с клавиатуры
Ввод символов с клавиатуры Для иллюстрации способов работы с описанными подпрограммами мы рассмотрим ввод текста в специально выделенный буфер строки. Такой буфер нужен для того, чтобы...
Чтение введенного символа
Чтение введенного символа При нажатии и отпускании любой клавиши контроллер клавиатуры генерирует аппаратное прерывание, при этом прекращается выполнение текущего вычислительного проце...
Управление курсором
Управление курсором Изменение состояния курсора можно разрешить перед началом ввода строки и запретить в конце ввода. Однако в таком случае при редактировании вводимого текста придется...
Обработка служебных символов
Обработка служебных символов При вводе с клавиатуры BIOS не отображает символы на экране, это должна делать подпрограмма, используемая для записи кодов символов в буфер строки. Перед в...
Подпрограмма Inline
Подпрограмма Inline Текст подпрограммы, выполняющей ввод символов с клавиатуры и простые функции редактирования, приведен в примере 5.28. В разделе данных задачи надо выделить буфер, им...
Пример 5 28 Ввод символов текста в буфер строки (Linbuf)
Пример 5.28. Ввод символов текста в буфер строки (Linbuf) Inline: lea si, Linbuf si = адрес буфера строки ; Ввод очередного символа и управление курсором Gs: cli запрещаем прерывания m...
Пример вызова Inline Для иллюстрации
Пример вызова Inline. Для иллюстрации использования описанной подпрограммы мы перепишем текст примера 5.23, заменив в нем строку комментария двумя командами. Результат показан в примере 5....
Пример 5 29 Вывод текста информационной строки
Пример 5.29. Вывод текста информационной строки Outlnf: push Cur win сохранение исходного значения Cur win mov ax, Inflinw ax = номер окна информационной строки mov Cur_win, ax Cu...
Текстовые режимы
Текстовые режимы Текстовые режимы отличаются от графических следующими особенностями: видеобуфер расположен в сегменте ввооь (а не A000h); в видеобуфере хранятся коды символов в...
Русский текст на экране
Русский текст на экране Прежде всего, разберемся с тем, как появляются символы на экране. Задача самостоятельно или с помощью функций BIOS помещает выводимый текст в видеопамять. Коды с...
Таблицы знакогенератора
Таблицы знакогенератора При отображении содержимого видеопамяти в текстовых режимах видеоконтроллер последовательно выбирает коды символов из видеобуфера. По коду символа вычисляется а...
Загрузка собственной таблицы
Загрузка собственной таблицы Функции BIOS позволяют загрузить в знакогенератор собственные таблицы выполняемой задачи или таблицы, принадлежащие русификатору. В первом случае использует...
Таблица должна располагаться в
Таблица должна располагаться в выделенном для задачи пространстве оперативной памяти. Если при выполнении задачи таблица загружается в знакогенератор один раз, то постоянно держать ее в оп...
Пример 5 1 Загрузка таблицы символов 8x16 в знакогенератор
Пример 5.1. Загрузка таблицы символов 8x16 в знакогенератор push es сохранение содержимого es les bp, dword ptr RsFntl6; es:bp = адрес начала таблицы mov ex, 256 количество символов в табл...
Использование таблиц русификатора
Использование таблиц русификатора Собственная таблица делает выполнение задачи независимым от наличия русификатора на компьютере. Отсутствие русификатора не такая уж редкость, если пользова...
Пример 5 2 Загрузка таблицы символов 8x16 точек из ROM BIOS
Пример 5.2. Загрузка таблицы символов 8x16 точек из ROM BIOS хог bl, bl ; номер таблицы в знакогенераторе mov ax, 1104h ; запрос "загрузка таблицы ROM 8x16" int 10h ; выполн...
Общая характеристика процесса вывода текста
Общая характеристика процесса вывода текста При выводе текста, для записи кодов символов в видеопамять, задача может использовать поддержку BIOS и DOS или делать это самостоятельно. Мы опиш...
Страницы видеопамяти
Страницы видеопамяти. Если не принять специальные меры, то в текстовых режимах задача работает только с младшей частью сегмента видеопамяти, размер которой зависит от установленного ви...
Фрагмент области данных BIOS
Фрагмент области данных BIOS При общей характеристике BIOS в разделе говорилось, что ее процедуры используют пространство оперативной памяти, называемое областью данных BIOS. Оно распо...
Пример 5 3 Фрагмент области данных BIOS
Пример 5.3. Фрагмент области данных BIOS 0000: 0449 - (байт) установленный видеорежим; 0000: 044А - (слово) количество столбцов (размер строки) ; 0000: 044С - (слово) размер страницы в ба...
Вывод текста с использованием поддержки DOS и BIOS
Вывод текста с использованием поддержки DOS и BIOS...
Вывод с помощью функции DOS
Вывод с помощью функции DOS Проще всего вывести строку текста на экран с помощью специальной функции DOS, имеющей код 09, поэтому этот способ часто встречается на практике. Перед обраще...
Пример 5 4 Вывод строки на экран с помощью функции DOS
Пример 5.4. Вывод строки на экран с помощью функции DOS lea dx, commun ; помещаем в dx адрес начала строки mov ah, 09 ; указываем код функции DOS int 21h ; обращаемся к DOS Функция DOS...
Поддержка вывода BIOS
Поддержка вывода BIOS Для более гибкого управления процессом вывода текста на экран предназначены функции BIOS, входящие в группу "video Services" (int 10h) и выполняющие сле...
Вывод повторяющихся символов
Вывод повторяющихся символов Функции 09 и 0Ah хорошо подходят для вывода повторяющихся символов. В примере 5.5 приведен фрагмент программы, рисующий горизонтальную линию, в которой 132...
Пример 5 5 Построение горизонтальной
Пример 5.5. Построение горизонтальной линии с помощью функции 0Ah mov ah, OAh ; код запрашиваемой функции BIOS mov al, OC4h ; код ASCII символа "-" mov ex, 132 ; число повторени...
Вывод строки текста
Вывод строки текста Для вывода последовательности символов лучше использовать функцию ОЕЬ, которая после записи кода символа в четный байт видеопамяти перемещает курсор вперед на следую...
Пример 5 6 Вывод строки с использованием функции BIOS OEh
Пример 5.6. Вывод строки с использованием функции BIOS OEh lea si, commun ; указываем адрес начала строки mov ex, 48 ; задаем количество символов в строке lp: lodsb ; читаем в al очере...
Раскрашивание текста
Раскрашивание текста. BIOS не содержит специальных функций, изменяющих только атрибуты символов, но сочетание функций 09 и ОЕЬ иногда позволяет раскрашивать символы и фон в нужные цвет...
Пример 5 7 "Заливка" экрана синим цветом
Пример 5.7. "Заливка" экрана синим цветом mov ах, 920h ; ah = код функции, al = код символа "пробел" mov bx, IFh ; bh = О, Ы = код атрибута mov сх, 132*25 ; сх = колич...
Пример 5 8 Подпрограмма для вывода символов и атрибутов
Пример 5.8. Подпрограмма для вывода символов и атрибутов Coiortxt: mov ax, 920h ah = код функции, al = код символа "пробел" int 10h закрашивание нужного пространства Outsym:...
Позиционирование текста
Позиционирование текста Для расположения текста в нужном месте экрана можно использовать описанную в разделе функцию прерывания int lOh, имеющую код 02. В примере 5.9 приведен фрагмент...
Пример 5 9 позиционирование курсора
Пример 5.9. позиционирование курсора с помощью функции BIOS 02 хог bh, bh ; номер страницы О BJOV dh, 12 ; номер строки 12 mov dl, 42 ; номер столбца 42 mov ah, 2 ; код функции BIO...
Использование функции 13h
Использование функции 13h Эта функция предназначена для вывода строки текста с явным указанием координат ее начала на экране и возможностью раскрашивания текста. В процессе вывода в вид...
Пример 5 10 Вывод текста с использованием функции BIOS 13h
Пример 5.10. Вывод текста с использованием функции BIOS 13h push es сохранение содержимого es push ds помещаем содержимое ris в стек pop es и выталкиваем его в регистр es lea bp, c...
Непосредственная работа с видеобуфером
Непосредственная работа с видеобуфером Если отвлечься от вспомогательных действий, то функции 09 и OAh вычисляют адрес видеобуфера, используя номера страницы, строки и столбца, и записы...
Пример 5 11 Вычисление адреса на указанной странице
Пример 5.11. Вычисление адреса на указанной странице GetAdr: Push =!.ед <ds, bx> сохранение регистров mov ds , NulSeg очистка регистра ds shl bx , 01 удвоение номера страницы...
Пример 5 12 Запись символов строки с одинаковым
Пример 5.12. Запись символов строки с одинаковым OutLine: push ax сохраняем содержимое ах mov ah, Ы помещаем атрибут в ah wrt: lodsb читаем в al очередной символ stosw пишем ах в виде...
Пример 5 13 Запись символов строки без атрибутов
Пример 5.13. Запись символов строки без атрибутов OutSym: movsb ; копирование символа в четный байт inc di ; пропуск нечетного байта loop outsym ; управление повторами цикла ret ; возв...
Пример 5 14 Раскрашивание символов находящихся в видеопамяти
Пример 5.14. Раскрашивание символов, находящихся в видеопамяти OutAtr: push ax сохраняем содержимое ах mov ai, Ы помещаем атрибут в al wrtatr: inc di пропускаем четный байт stosb з...
Пример 5 15 Перемещение курсора
Пример 5.15. Перемещение курсора по адресу, указанному в регистре di PosCur: call GetAdr ; пересчет координат в адрес MovCur: PushReg <ds,ax,bx,dx> ; сохранение используемых регист...
Установка активной страницы
Установка активной страницы Если по каким-то причинам вы не можете использовать функцию 05 прерывания int lOh, то в текст программы надо включить собственную подпрограмму аналогичного...
Пример 5 16 Установка активной
Пример 5.16. Установка активной страницы, указанной в регистре bх SelPag: PushReg <ds, ax, bx, dx> сохранение используемых регистров mov ds , NulSeg очистка регистра ds mov...
Замечание о переносимости
Замечание о переносимости При разработке видеоадаптера VGA IBM стандартизировала как состав регистров видеоконтроллера, так и способы их программирования. Стандарт распространяется на в...
Графические режимы
Графические режимы Основные особенности графических режимов, имеющие непосредственное отношение к работе с текстом, заключаются в следующем: видеобуфер располагается в сегменте доооь...
Таблицы символов
Таблицы символов Для вывода текста на экран нужен набор заготовок рисунков всех используемых символов. Обычно эти заготовки хранятся в специальных таблицах символов. Структура стандарт...
Доступ к таблице символов
Доступ к таблице символов Доступ к таблице символов. Для доступа к таблице символов надо знать, где она расположена. В текстовых режимах таблицы располагались в видеопамяти. В графичес...
Установка таблицы символов
Установка таблицы символов Как уже говорилось в разделе, в состав прерывания int 10h входит функция иь, обрабатывающая запросы, относящиеся к знакогенератору. Одним из них является след...
Пример 5 17 Определение адреса
Пример 5.17. Определение адреса таблицы с размером символов 8x16 mov bh, 06 ; код таблицы символов mov ax, 1130h ; код запроса на получение информации int 10h ; выполнение запроса...
Программный знакогенератор
Программный знакогенератор В данном разделе будет описана подпрограмма, которая по коду ASCII выбирает из таблицы соответствующую заготовку и рисует изображение символа на экране. В тех...
Общая характеристика знакогенератора
Общая характеристика знакогенератора Структура заготовки символа (см. Рисунок 5.1) ничем не отличается от структуры упакованного двухцветного рисунка. Способ построения строки такого р...
Таблица символов не содержит палитры
Таблица символов не содержит палитры. В зависимости от состояния текущего бита, знакогенератор выбирает код одного из двух заранее задаваемых цветов, они могут различаться для каждого симв...
Новые переменные
Новые переменные Для того чтобы знакогенератор мог выбрать заготовку рисунка символа из таблицы и раскрасить ее в нужные цвета, в разделе данных задачи должны располагаться переменные,...
Пример 5 18 Аргументы программного знакогенератора
Пример 5.18. Аргументы программного знакогенератора ftaddr dd 00 ; полный адрес таблицы символов hsymb dw 16 ; высота символа (размер заготовки в байтах) augment dw 00 ; ! ! константа...
Пример 5 19 Подпрограмма рисования
Пример 5.19. Подпрограмма рисования символов шириной в 8 точек outsgn: PushReg <ax,bx, ex, fs, si,di> ; сохранение используемых регистров call Setwin установка исходного окна...
Изменения для режимов HiColor
Изменения для режимов Hi-Color В режимах Hi-color код точки занимает слово (два байта), а код цвета содержит 15 или 16 разрядов этого слова. В пример 5.18 вносятся следующие изменения....
Изменения для режимов True Color
Изменения для режимов True Color В этих режимах код точки занимает двойное слово (четыре байта), а код цвета — 24 разряда этого слова. В примере 5.18 значение переменной augment вычисляе...
Пропорциональные шрифты
Пропорциональные шрифты В рукописном тексте символы имеют разную ширину. Такая форма записи текста привычна для человеческого глаза, поэтому она применяется при оформлении печатной прод...
Масштабируемые шрифты
Масштабируемые шрифты Область применения таблиц ограничена тем, что в них хранятся готовые точечные (растровые) рисунки символов. Изменить размер такого рисунка, а тем более повернуть е...








Начало