русс | укр

Языки программирования

ПаскальСиАссемблерJavaMatlabPhpHtmlJavaScriptCSSC#DelphiТурбо Пролог

Компьютерные сетиСистемное программное обеспечениеИнформационные технологииПрограммирование

Все о программировании


Linux Unix Алгоритмические языки Аналоговые и гибридные вычислительные устройства Архитектура микроконтроллеров Введение в разработку распределенных информационных систем Введение в численные методы Дискретная математика Информационное обслуживание пользователей Информация и моделирование в управлении производством Компьютерная графика Математическое и компьютерное моделирование Моделирование Нейрокомпьютеры Проектирование программ диагностики компьютерных систем и сетей Проектирование системных программ Системы счисления Теория статистики Теория оптимизации Уроки AutoCAD 3D Уроки базы данных Access Уроки Orcad Цифровые автоматы Шпаргалки по компьютеру Шпаргалки по программированию Экспертные системы Элементы теории информации

Организация памяти в графическом режиме 12h


Дата добавления: 2013-12-23; просмотров: 3376; Нарушение авторских прав


Программы, в которых осуществляется просмотр произвольных видеостраниц, на которые предварительно записана информация способом прямого программирования видеобуфера, удобно писать с применением функции 05h int 10h BIOS.

Рис. 2. Структура байта атрибутов

Структура байта атрибутов приведена на рис. 2.

Типичная схема использования адресного пространства компьютера приведена на рис. 1.

Распределение адресного пространства

Прямое программирование видеобуфера в текстовом режиме

Перезагрузка операционной системы INT 19h.

Вызов прикладной программой прерывания INT 19h приведет к перезагрузке операционной системы.


Адресное пространство - это просто набор адресов, которые умеет формировать процессор; совсем не обязательно все эти адреса отвечают реально существующим ячейкам памяти.

Рис. 1. Типичное распределение адресного пространства.

 


Начальный килобайт оперативной памяти занят векторами прерываний, которые обеспечивают работу системы прерываний компьютера, и включает 256 векторов по 4 байта каждый.

Вслед за векторами прерываний располагается область данных BIOS, которая занимает всего 256 байт, начиная с сегментного адреса 40h. В области данных BIOS хранятся данные, используемые программами BIOS в своей работе. Так, здесь размещаются:

- входной буфер клавиатуры, куда поступают коды нажимаемых пользователем клавиш;

- адреса видеоадаптера, а также последовательных и параллельных портов;

- данные, характеризующие текущее состояние видеосистемы (форма курсора и его текущее положение на экране, видеорежим, используемая видеостраница и проч.);

- ячейки для отсчета текущего времени и т.д.

 

BIOS (от Basic In-Out System, базовая система ввода-вывода) является частью операционной системы, хранящейся в постоянном запоминающем устройстве (ПЗУ BIOS). ПЗУ BIOS располагается на системной плате компьютера и является, таким образом, примером встроенного, или "зашитого" программного обеспечения. В функции BIOS входит тестирование компьютера при его включении, загрузка в оперативную память собственно операционной системы MS-DOS, управление штатной аппаратурой компьютера - клавиатурой, экраном, дисками и прочим.



В области памяти, начиная с адреса 500h, располагается собственно операционная система MS-DOS, которая обычно занимает несколько десятков Кбайт. Программы MS-DOS, как и другие системные составляющие (векторы прерываний, область данных BIOS) записываются в память автоматически в процессе начальной загрузки компьютера.

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


Далее следует старшая, или верхняя (upper) память.

Часть адресного пространства старшей памяти отводится для адресации к графическому и текстовому видеобуферам графического адаптера. Графический адаптер представляет собой отдельную микросхему, в состав которой входит собственное запоминающее устройство (видеопамять). Схемы управления видеопамятью настроены на диапазоны адресов A0000h...AFFFFh и B8000h...BFFFFh, входящих в общее с памятью адресное пространство процессора.Поэтому любая программа может обратиться по этим адресам и, например, записать данные в видеобуфер, что приведет к появлению на экране некоторого изображения. Если видеосистема находится в текстовом режиме, а запись осуществляется по адресам текстового видеобуфера, на экране появятся изображения тех или иных символов (букв, цифр, различных знаков). Если же перевести видеосистему в графический режим, и записывать данные в графический видеобуфер, то на экране появятся отдельные точки или линии. Можно также прочитать текущее содержимое ячеек видеобуфера.

 


Для того чтобы изображение появилось на мониторе, оно должно быть записано в память видеоадаптера. В текстовом режиме для VGA-совместимых систем для видеопамяти отводится адресное пространство начинающееся с логического адреса B800h:0000h и заканчивающееся адресом BF00h:0FFFh.Данная область разбивается на 8 секторов по числу видеостраниц (4 Кбайта на страницу). Постраничное деление адресного пространства видеопамяти в текстовом режиме имеет следующий вид:

– B800h:0000h – страница 0, смещение в диапазоне 0000h – 0FFFh

– B900h:0000h – страница 1, смещение в диапазоне 0000h – 0FFFh

– ...........

– BF00h:0000h – страница 7, смещение в диапазоне 0000h – 0FFFh

 

На экране отображается видеобуфер, соответствующий активной странице. В текстовых режимах для изображения каждого символа отводится 2 байта: байт с ASCII-кодом символа и байт с его атрибутом.

По адресу B800h:0000h находится байт с кодом символа (левый верхний угол экрана), а в B800h:0001h – атрибут этого символа; B800h:0002h – код второго символа, а в B800h:0003h – атрибут второго символа и т.д.

При формировании изображения непосредственно в видеобуфере, в обход программ DOS и BIOS, все управляющие коды ASCII теряют свои управляющие функции и отображаются в виде соответствующих символов.


 

Из рис. 2 следует, что каждый символ может принимать любой из 16 возможных цветов, определяемых сочетанием младших 4-х битов. Биты 4-6 байта атрибутов задают цвет фона под данным символом. Последний бит 7, в зависимости от режима видеоадаптера, определяет либо яркость фона под данным символом (тогда фон также может принимать 16 разных цветов), либо мерцание символа(устанавливается DOS по умолчанию).

При загрузке машины устанавливается стандартная палитра, коды цветов которой приведены в табл. 1. Переключение назначения бита 7 осуществляется подфункцией 03h функции 10h прерывания int 10h.

 

Табл. 1. Коды цветов стандартной палитры

Код Цвет Код Цвет
0h Чёрный 8h Серый
1h Синий 9h Голубой
2h Зелёный 0Ah Салатовый
3h Бирюзовый 0Bh Светло-бирюзовый
4h Красный 0Ch Розовый
5h Фиолетовый 0Dh Светло-фиолетовый
6h Коричневый 0Eh Жёлтый
7h Белый 0Fh Ярко- белый

 


Двухбайтовые коды символов записываются в видеобуфер в том порядке, в каком они должны появиться на экране: первые 80*2 байт соответствуют первой строке экрана, вторые 80*2 байт – второй и т.д. При этом переход на следующую строку экрана определяется не управляющими кодами возврата каретки и перевода строки, а размещением кода в другом месте видеобуфера.

Для того чтобы из программы получить доступ к видеобуферу, надо занести в один из сегментных регистров данных сегментный адрес видеобуфера. После этого, задавая те или иные смещения, можно выполнить запись в любые места (ячейки) видеобуфера. Вычислить смещение ячейки в координатах "строка-столбец" (row, clm) можно так:

VidAdd r= (row*160) + (clm*2)


При большом объёме выводимых данных, информационный кадр формируется заранее в буфере пользователя, располагающегося в сегменте данных программы.

Пример: Запись строки в видеобуфер 0-страницы.

;Очистка экрана

;Настроим сегментный регистр ES на страницу 0 видеобуфера, а

; ds на сегмент данных

mov ax,0B800h

mov es,ax

 

;Перешлём в видеобуфер строку символов, настроив

; соответствующим образом регистры si, di и cx

mov si,offset msg ;Смещение источника

mov di,160*12+36*2 ;Смещение приёмника (36 столбец 13 -ой

; строки),

 

mov cx,msglen ;Число пересылаемых байт

cld ;Просмотр вперёд

rep movsb ;Переслать строку символов с атрибутами

;в видеобуфер

 

;Останавливаем программу для наблюдения результата (иначе

;после завершения программы запрос DOS на ввод команды

;может затереть выведенную информацию)

mov ah,01h

int 21h

 

;Поля данных в сегменте данных программы. Символы и

;атрибуты: 0B0h – cветло-бирюзовый по чёрному,

;0E4h –красный по жёлтому

msg db ‘*’,0B0h,’T’,0E4h,’E’,0E4,’S’,0E4,’T’,0E4,’*’,0B0h

msglen=$-msg

 


Если выводимые символы имеют одни и те же атрибуты, то способ формирования полей данных, предназначенных для прямой записи в видеопамять, упрощается.

Например, если необходимо осуществить вывод символов текста из сегмента данных с единственным атрибутом 0E4h, то нужно изменить код следующим образом:

 

;Настроим сегментный регистр ES на страницу 0 видеобуфера, а ds

;на сегмент данных

mov ax,0B800h

mov es,ax

mov si,offset msg ;Смещение источника

mov di,160*12+36*2 ;Смещение приёмника (36 столбец 13 –ой

;строки),

mov cx,msglen ;Число пересылаемых байт

cld ;Просмотр вперёд

mov ah,0E4h ;Атрибут выводимых символов 0E4h –

;красный по жёлтому

cycle:

lodsb ;Загрузка в al очередного символа (al ← ds:si)

stosw ;Выгрузка “символ + атрибут” из ах в

;видеобуфер (ax→es:di)

loop cycle ;Повторить msglen раз

;Поля данных в сегменте данных программы.

msg db ‘*TEST*’

msglen=$-msg

 

 


Видеопамять в графическом режиме 12h организована следующим образом:

–начало видеобуфера находится по адресу 0A0000h.

–память организована в виде битовых матриц.

 

В режиме 12h этих матриц четыре. Каждому пикселю экрана соответствует один бит каждой из битовых матриц. Таким образом каждой адресуемой ячейке видеопамяти - байту - соответствует восемь пикселей. Значение цвета пикселя получается как результат объединения значений соответствующего ему бита всех битовых матриц.

Режим 12h имеет разрешающую способность - 640х480 пикселов. В видеопамяти задействованы все четыре цветовых слоя. Структура видеопамяти показана на рисунке 3.

 

Рис. 3. Структура видеопамяти режима 12h.

 

Формулы, используемые для вычисления битов, управляющих данным пикселом экрана, соответствуют формулам режима 10h.




<== предыдущая лекция | следующая лекция ==>
Работа с системными часами. | Модель характеристики ГТД.


Карта сайта Карта сайта укр


Уроки php mysql Программирование

Онлайн система счисления Калькулятор онлайн обычный Инженерный калькулятор онлайн Замена русских букв на английские для вебмастеров Замена русских букв на английские

Аппаратное и программное обеспечение Графика и компьютерная сфера Интегрированная геоинформационная система Интернет Компьютер Комплектующие компьютера Лекции Методы и средства измерений неэлектрических величин Обслуживание компьютерных и периферийных устройств Операционные системы Параллельное программирование Проектирование электронных средств Периферийные устройства Полезные ресурсы для программистов Программы для программистов Статьи для программистов Cтруктура и организация данных


 


Не нашли то, что искали? Google вам в помощь!

 
 

© life-prog.ru При использовании материалов прямая ссылка на сайт обязательна.

Генерация страницы за: 0.005 сек.