Вывод на экран текста средствами BIOS 


Мы поможем в написании ваших работ!



ЗНАЕТЕ ЛИ ВЫ?

Вывод на экран текста средствами BIOS



 

Много способов вывода текста на экран. Например, функция 09h DOS выводит текст до символа «$», или файл 40h, для которого длина выводимого сообщения. Однако возможности DOS весьма ограничены: DOS не имеет функций для изменения цвета выводимых символов и позиционирования курсора. Текст, выводимый DOS, это последовательность белых символов на черном экране.

Прерывание 10h BIOS позволяет использовать все возможности видеосистемы компьютера и обладает большой скоростью.

 

Использование памяти BIOS

 

Положение Длина Описание
40:10 Байт Установленная аппаратура 1
40:11 « «2
40:12 « Состояние _____________ после включения питания
40:13 Слово Размер памяти
40:15 Слово Резерв
40:17 Байт Управление клавишей 1
40:18 « «2
40:1А Слово Указатель начала буфера клав. (голова)
40:1С « Указатель конца буфера клав. (хвост)
40:1Е 32 байта Буфер клав.
40:49 Байт Режим дисплея
40:4А Слово Число колонок
40:4С Слово Длина буфера регенерации в байтах
40:4Е « Адрес буфера регенерации
40:50 « Позиция курсора на стр.1
40:52 « «2
40:54 « «3
40:56 « «4
40:58 « «5
40:5А « «6
40:5С « «7
40:5Е « «8
40:60 « Тип курсора
40:62 Байт Текущая строка изображения
40:63 Слово Базовый адрес видеоконтура
. . .
. . .
. . .
40:6С Слово Счетчик таймера
40:70 Байт  
40:71 « Сост.клав.Break

 


Режимы дисплея

 

Номер Тип Макс. цветов Формат текста Макс. Страниц Нач. адрес
  Т   40х25   В8000
  Т   40х25   В8000
  Т   80х25   4 8 8 В8000
  Т   80х25 4 8 8 В8000
  Г   320х200 40х25   В8000
  Г   320х200 40х25   В8000
  Г   640х200 80х25   В8000
  Т Моно 80х25 1 8 В0000
  Г   160х200 20х25   В0000
  Г   320х200 40х25   В0000
А Г   640х200 80х25   В0000
D Г   320х100 40х25   А0000
Е Г   640х200 80х25  
F Г Моно 640х350 80х25  
  Г   640х350 80х25  

 

 

Видеоадаптеры имеют в своем составе оперативную память, однако CPU может обратиться к ней, как к своей оперативной памяти, т.к. адаптер может поддерживать более одной страницы изображения, то не каждой странице имеется свое место для курсора. Когда BIOS переключает со страницы на страницу BIOS запоминает положение курсора на текущей странице.

Информация флагов оборудования определяет какой из адресов буфера будет использовать видеопрограмма BIOS.

 

5 | 4 биты

40:10 01 - цв. 40х25

10 - цв. 80х25

11 – моно?

 

Для монохромных в ЕS загружается 0В000h, а для цветных ОВ800h – это позволяет остальным программам BIOS работать без информации о том, какой адаптер работает в системе. Все ссылки к буферу делаются ЕS.

В DOS практически нет для работы с цветным адаптером. Такие есть в BIOS. Все следующие функции запрашиваются посредством int 10h

 


Номер функции в АН Описание

00H уст. видео режим
01H уст. размер и форму курсора
02H уст. позицию курсора
03H читать позицию курсора
04H читать световое перо
05H выбрать активную страницу дисплея
06H листать окно вверх (или очистить)
07H листать окно вниз
08H читать символ/атрибут
09H писать символ/атрибут
0aH писать символ
0bH выбрать палитру/цвет бордюра
0cH писать графическую точку
0dH читать графическую точку
0eH писать символ в режиме TTY
0fH читать видео режим
10H EGA уст. палитру
11H EGA генератор символов
12H EGA специальные функции
13H писать строку (только AT + EGA)

 

Многие функции BIOS требуют задания атрибута выводимых символов. Атрибут символа занимает одна байта и определяет цвет символа и фона под ним, а также некоторые дополнительные характеристики изображения. Структура байта атрибутов

 

 

 

 


Код Цвет Биты 4-6 цвет фона под символом.
  черный Бит 7 – в зависимости от режима видеоодаптера
  синий Определяет либо яркость фона под данным символом
  зеленый (тогда фон принимает 16 цветов), либо мерцание сим-
  бирюзовый вола..
  красный Так, в режиме мерцания значения старшего полубайта
  фиолетовый атрибута 8h обозначает не серый фон, а черный при
  коричневый мерцающем символе. Сh- не розовый, а красный
  белый  
  серый  
  голубой  
А салатовый  
В светло-бирюзовый  
С розовый  
D светло-фиолетовый  
E желтый  
F ярко-белый  

 

; Очистим экран, наложив на него черно-белое окно

mov AH,06h; функция задания окна

mov Al, 0; режим создания (не прокрутка)

mov BH,07h; атребут всех символов в окне – ч/б

mov CH, 0; верхняя Y – коорд.

mov CL, O; левая Х – коорд.

mov DH, 24; нижняя Y – коорд.

mov DI, 79; правая Х – коорд.

Int 10h; прер. BIOS.

 

; Выведем на экран цветное окно

mow AH,06h; функция задания окна

mov Al, 0; режим создания (не прокрутки)

mov BH, 1Eh; атрибут желтый по синему

mov CH,5; верхняя Y – коорд.

mov CI,40; левая Х – коорд.

mov DH, 9; нижняя Y – коорд.

mov DI, 75; правая Х – коорд.

Int 10h; прер. BIOS

 

 

; Позиционируем курсор

mov AH, 02h; функция позиционирования

mov BH,0; видеостраница

mov DH,7; строка

mov DL, 45; столбец

Int 10h

 

; Строку символов в окно без задания атрибутов (т.е. с атрибутами окна)

mov CX, len1; длина строки

mov BX,offset mes1; адрес строки символа

mov AH,Oeh; функция выбора одного символа

metka: mov Al, [Bx]; символ в Al

Int 10h; сдвиг по строке

Loop metka

 

; Строка вне окна, задевая атрибуты символов

mov AH, 13h; функция вывода строки

mov AL,0; режим (атрибут в В2)

mov BH,0; видеостраница

mov BL,04h; атрибут всех символов

mov CX, len2; длина строки

mov DH,16; начало позиции - строка

mov DL,25; начало позиции - столбец

push DS; настройка ЕS на наш сегм.

pop ES; данные

mov, BP offset mes2; ES:BP – выв. стр.

Int 10h

; Позицируем курсор в начало посл. строки экрана

mov AH, 02h; функция позиционирования

mov BH,O; видеостраница

mov DH,24; строка

mov DL,0; столбец

Int 10h

 

mes1 DB 16,’Cтрока, выведенная в окно’,17

len1 = $-mes1

mes2 DB 22,22,22,’Строка, выведенная вне окна’,22,22,22

len2 =$-mes2

 

Функция 06h в заданном месте экрана создает цветное окно. Если в созданные ранее окна выведен какой-либо текст, то c помощью этой функции этот текст прокручивается вверх (функция 07h прокручивает вниз). В Аl – число прокручиваемых строк. При этом текст, уход и край окна пропадает, а из-под противоположного края появляются пустые строки с заданными атрибутами. Для заполнения строк используются подсоединенные функции BIOS.

Функция 02h – позиционирование курсора – место положения номер строки (0 – 24) и номер столбца (0…79). Восемь независимых курсоров – на каждую видеостраницу. Функция 02h – позиционирует курсор на любую страницу независимо, какая страница является активной.

Для вывода на экран символов и символов строк используется функция 09h, OАh, OEh и 13h.

Функция ОЕh – фильтрует упр. коды 07h (звук), 08h (возврат каретки на шаг), 10 (перевод строки) и 13 (возврат строки) – выполняя соответствующие им действия после вывода каждого символа курсор перемещается на следующую позицию, что дает возможность выводить в цикл целые строки. Атрибут, однако установить нельзя – символ приобретает атрибут той позиции, куда выводится.

Функция 13h – вывод строк с указанием атрибутов как каждого символа в отдельности, так и всей строки. Четыре варианта выполняются в зависимости от Al. В режиме Al = 0 и 1 – атрибут символа указывается сразу для всей строки.

В режиме 0 – курсор не смещается в процессе

В режиме 1 – смещается на длину строки

 

В решении (2) и (3) атрибуты символов включаются в выводимую строку, в которой чередуются коды атрибутов и символов. Решение (2) отличается от (3) тем, что в 2 курсор не смещается, а в 3 смещается.

В DХ- координаты начала вывода строки

В СХ- длина

ES:BP- адрес вывода строки

Коды 17h,08h,0Ah,0Dh- как управляющие

 

строка вокно

строка вне окна

 

 

code_seg segment

assume cs:code_seg, ds:code_seg, ss:code_seg

org 100h

start:

jmp begin

line DB 2

column DB 10

sym DB 01h

;

begin:

; mov AH,25h;функция заполнения вектора прерывания

; mov AL,65h; номер вектора

; mov DX,offset new_65h;смещение обработчика

; int 21h

;

xor AX,AX

mov ES,AX

mov BX,65h

shl BX,2

mov ES:[BX],offset new_65h

mov ES:[BX+2],DS

;

mov AL,0;режим создания окна

gogo:

int 65h

mov AH,02h

mov BH,0

mov DH,line

mov DL,column

int 10h

 

 

mov AH,0Ah

mov AL,sym

mov BH,0

mov CX,60

int 10h

;

inc sym

mov AL,line

cmp AL,24

je follo

inc line

follo:

mov AH,08h

int 21h

;

mov AL,1;режим прокрутки

;

jmp gogo

;

new_65h proc near

mov AH,06h

; mov AL,1

mov BH,1Bh

mov cx,0

mov DH,24

mov DL,79

int 10h

iret

;

new_65h endp

code_seg ends

end strart

 

Работа с видеобуфером.

 

Текстовый видеобуфер находится по адресу В800h.

Рассмотрим распределение адресного пространства МП.

 

Объем   Физические адреса Сегментный Адрес
  Системные таблицы и программы DOS    
  COMMAND.COM    
  Свободная память для загружаемых прикладных и системных программ      
  Графический видеобуфер A0000h A000h
  Свободные адреса B0000h B000h
  Текстовый видеобуфер B8000h B800h
  ПЗУ-расширения BIOS C0000h C000h
  Свободнае адреса D0000h D000h
  ПЗУ BIOS E0000h E000h

 

Первые 640Kб адресного пространства с адресами 00000h до 9FFFFh-отводятся под основную оперативную память, которую еще называют структурной. В начало этой области при начальной загрузке компьютера загружаются таблицы и программы DOS, которые занимают несколько десятков Кбайт.

Оставшаяся память до 640 Кбайт свободна для загрузки любых системных или прикладных программ. В начале сеанса в память загружаются резидентные программы. Объем свободной памяти уменьшается.

 

Оставшиеся 384Kб адресного пространства распределяются так:

E0000h-FFFFFh - основное ПЗУ BIOS.

C0000h-CFFFFh - ПЗУ расширений BIOS для графических адаптеров и дисков.

 

Текстовый видеобуфер адаптера EGA включает 8 видеостраниц и занимает 32Кб от сегментного адреса В800h. Начинается он с видеостраницы 0, адрес которой В8000h. Объем видеостраниц 4Kб.

 

Видеостраница Начальный адрес
  В8000
  В9000
  ВА000
  ВВ000
  BC000
  BD000
  BE000
  BF000 До BFFFF, следующий адрес C0000h

 

При включении компьютера активной (видимой) становится видеостраница 0. Выводить текст можно на любую страницу, в том числе и невидимую. Смена видеостраниц осуществляется вызовом функции 05 прерывания 10h BIOS.

Любой код, записываемый в видеобуфер, сразу же отображается на экране в виде изображения цветного символа на одном из знакомест. Каждый символ занимает в буфере поле из 2-х байт. Младшие (четные) байты отводятся под коды,отображаемых символов, старшие (нечетные) байты под их атрибуты.

 

B800h:00 B800h:01 B800h:02 B800h:03 B800h:04…

Символ Атрибут Символ Атрибут Символ …

 

Знакоместо 0 знакоместо 1 знаком...

 

 



Поделиться:


Последнее изменение этой страницы: 2017-02-07; просмотров: 820; Нарушение авторского права страницы; Мы поможем в написании вашей работы!

infopedia.su Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Обратная связь - 18.224.0.25 (0.076 с.)