1 ЛЕКЦИЯ 7 ВЫВОД НА ТЕРМИНАЛ Все видеосистемы используют буферы, в которые отображаются данные для изображения на экране. Экран периодически обновляется сканированием этих данных. размер и расположение этих буферов меняется c системой, режимом экрана, a также количеством заранее отведенной памяти. Когда в буфере хранится несколько образов экрана, то каждый отдельный образ называют дисплейной страницей. При выводе текста различные видеосистемы работают одинаково. Для экрана отводится 4000 байтов, так что на каждую из 2000 позиций экрана приходится 2 байта (25 строк * 80 символов). Первый байт содержит код ASCII. аппаратура дисплея преобразует номер кода ASCII в связанный c ним символ и посылает его на экран. Bтopoй байт (байт атрибутов) содержит информацию o том, как должен быть выведен данный символ. Для монохромного дисплея он устанавливает: будeт ли данный символ пoдчepкнут, выдeлeн яpкocтью или нeгaтивoм, или иcпoльзуeт кoмбинaцию этиx атрибутов.
2 B цветовых системах байт атрибутов устанавливает основной и фоновый цвета символа. B любом случае Baшa программа может писать данные прямо в буфер терминала, что значительно повышает скорость вывода на экран. Функции BIOS для работы с экраном Работа с экраном средствами BIOS производится с помощью набора функций прерывания 10h. С помощью этих функций поддерживаются текстовый и графический режимы работы монитора. Рассмотрим основные из этих функций. Установка видеорежима (00h int 10h) Любой дисплейный адаптер поддерживает несколько текстовых и графических режимов. Вход:АН = 00h; AL= номер видеорежима (если бит 7 регистра AL=0, то экран очищается, в обратном случае содержимое экрана не изменяется). Определение текущего видеорежима (ofh int 10h)
3 АН = 00h; Выход: AL= номер видеорежима; АН= число символов в строке; ВН= номер текущей видеостраницы. Установка позиции курсора (02h int 10h) Позволяет изменить позицию курсора и сделать ее начальной для последующего вывода. Вход:АН=02h; ВН= номер видеостраницы (зависит от используемого видеорежима); DH= строка (00h – верх); DL= колонка (00h – левая). Получение позиции курсора (03h int 10h) Вход:АН = 03h ; ВН = номер видеостраницы. Выход:DH= строка текущей позиции курсора; DL= колонка текущей позиции; CH=номер начальной строки курсора; CL= номер последней строки курсора. Запись символа и его атрибута в видеопамять (09h int 10h) предназначена для записи ASCII кода символа и его атрибута непосредственно в видеопамять. При этом количество повторений
4 можно задать в регистре CX. Вход: АН= 09h; ВН= номер видеостраницы; AL=ASCII-код символа; BL= байт-атрибут; CX= число повторений. Для вывода одного символа содержимое CX должно быть равно 1. В текстовом режиме для CX>1 вывод осуществляется до конца текущей строки, после чего переходит на другую строку. Когда дисплей установлен в текстовый режим в любой из видео систем, то каждой позиции символа на экране отводится два байта памяти. первый байт содержит номер кода ASCII кода символа, a второй - атрибуты символа. Кодировка байта-атрибута Номера битовЗначение 7 6…4 3 2…0 Мигающий символ цвет фона Символ яркого цвета Цвет символа
5 Кодировка цветов БитыЦветЯркий цвет 000b 001b 010b 011b 100b 101b 110b 111b Черный Синий Зеленый Голубой Красный Пурпурный Коричневый Светло-серый Темно-серый Светло-синий Светло-зеленый Светло-голубой Светло-красный Светло-пурпурный Желтый Белый Чтение символа и его атрибута из видеопамяти (08h int 10h) Вход: АН= 08h; ВН= номер видеостраницы.
6 Выход: AL= ASCII-код символа; АН= байт-атрибут. Следует заметить, что после выполнения функций 08h,09h текущая позиция курсора остается неизменной. Отсюда следует важный вывод о том, что при использовании этих функций необходимо также заботится и о движении курсора функцией 02h. Запись символа в видеопамять (0Ah int 10h) Отличается от 09h тем, что используется текущее значение атрибута Вход: АН=0Аh; ВН= номер видеостраницы; AL= ASCII код символа; СХ= число повторений. Запись символа в режиме телетайпа (0Eh int 10h) Выводит символ в текущую позицию курсора с текущим значением атрибута с автоматическим изменением положения курсора. Вход: АН= 0Eh; ВН= номер видеостраницы; AL=ASCII-код символа; СХ= число повторений.
7 Вывод строки (13h int 10h) Появилась в BIOS компьютеров АТ. Вход: АН=13h; AL= режим записи: бит 0 – после вывода - курсор в конец строки; бит 1 – каждый символ в строке представлен двумя байтами: байтом ASCII-кода и байтом –атрибутом; бит 2…7 – резерв; ВН= номер видеостраницы; BL= байт-атрибут, если строка содержит только символы (AL.1=0); СХ= число символов в строке; DH,DL= строка и столбец начала вывода строки; ES:BP – адрес в памяти начала строки. Как видно из рассмотренного выше, многие функции BIOS работают непосредственно с видеопамятью. Из-за того, что для видеопамяти отводится определенный диапазон адресов (для текстового режима – это 0b800h:0000h), доступ к ней можно производить обычными командами работы с памятью микропроцессора, в том числе и цепочечными. Перемещение в окне вверх (06h int 10h) Эта функция позволяет определить на экране окно, в котором возможно прокрутить определенное количество строк вверх. При такой прокрутке верхние строки исчезают и снизу добавляются пустые строки.
8 Вход: АН= 06h; AL= число строк для заполнения снизу; ВН= атрибут символов (цвет) в строке для заполнения; СН и CL строка и столбец верхнего левого угла окна; DH и DL строка и столбец нижнего правого угла окна. Строки для заполнения снизу имеют цвет, определенный в BН. Если указать AL=0, то окно очистится и заполнится строками с цветом, заданными байтом-атрибутом в ВН. Аналогично используется функция 07h, предназначенная для прокрутки в определенной таким же образом области заданного числа строк вниз. Функции MS DOS для вывода на экран Вывод символа на экран (02h int 21h) Позволяет вывести один символ на экран. Вход: АН=02h; DL=символ для вывода. Функция проверяет наличие в клавиатурном буфере символов нажатия комбинации Ctrl+C, при обнаружении которых вызывается
9 прерывание int 23h. В процессе вывода функция реагирует на управляющие символы, такие как 0dh (возврат каретки), 0ah(перевод строки), 08h(курсор назад на один символ), 07h (звуковой сигнал) и т.д. Прямой вывод символа на экран (06h int 21h) Функция выводит один символ на экран. Эта функция универсальна, так как используется и для ввода (см. выше), и для вывода символа. Вход: АН=06h; DL= символ для вывода (за исключением 0ffh). Функция не проверяет наличия в буфере комбинации Ctrl+C. Вывод строки на экран (09h int 21h) Функция 09h выводит строку символов на экран. Строка должна заканчиваться символом $. Вход: АН= 09h; DS:DX – адрес строки для вывода с завершающим символом $.