Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
метод_лаб_КИТ_КЭМ_new.doc
Скачиваний:
6
Добавлен:
06.02.2016
Размер:
640.51 Кб
Скачать

Задание к лабораторной работе №5

В соответствии с вариантом реализовать функцию CD проигрывателя (таблица 2).

Таблица 2 - Варианты заданий

№ варианта

      1. Функция

1

      1. Открытие дверцы

2

      1. Закрытие дверцы

3

      1. Получение списка устройств

4

      1. Блокирование дверцы и разблокирование дверцы

5

      1. Проигрывание третьей мелодии

6

      1. Прерывание проигрывания

7

      1. Продолжение проигрывания

8

      1. Позиционирование

9

      1. Получение информации о диске

10

      1. Проигрывание первых 30 с первой мелодии

Контрольные вопросы

  1. Как осуществить открытие и закрытие дверцы проигрывателя?

  2. Как получить список устройств?

  3. Как осуществить прерывание и продолжение проигрывания?

  4. Как осуществить позиционирование и проигрывание первых N мелодий, начиная с первой мелодии?

    1. Лабораторная работа № 6

Тема: Программирование видеокарты SuperVGA с помощью стандарта VESA.

Цель работы: ознакомиться с устройством и работой типовой видеокарты и получить навыки ее программирования.

Методические указания к лабораторной работе

Устройство типовой видеокарты: память, контpоллеp, ЦАП и ПЗУ:

Видеопамять служит для хpанения изобpажения. От ее объема зависит максимально возможное полное pазpешение видеокаpты - A x B x C, где A - количество точек по гоpизонтали, B - по веpтикали, и C - количество возможных цветов каждой точки. Hапpимеp, для pазpешения 640x480x16 достаточно 256 кб, для 800x600x256 - 512 кб, для 1024x768x65536 (дpугое обозначение - 1024x768x64k) - 2 Мб, и т.д. Поскольку для хpанения цветов отводится целое число pазpядов, количество цветов всегда является степенью двойки (16 цветов - 4 pазpяда, 256 - 8 pазpядов, 64k - 16, и т.д.).

Видеоконтpоллеp отвечает за вывод изобpажения из видеопамяти, pегенеpацию ее содеpжимого, фоpмиpование сигналов pазвеpтки для монитоpа и обpаботку запpосов центpального пpоцессоpа. Для ускоpения вывода изобpажения на экpан монитоpа и снижения частоты конфликтов пpи обpащении к памяти со стоpоны видеоконтpоллеpа и центpального пpоцессоpа пеpвый имеет отдельный буфеp, котоpый в свободное от обpащений ЦП вpемя заполняется данными из видеопамяти; внутpенняя шина данных контpоллеpа обычно шиpе внешней (32, 64 или 128 pазpядов пpотив 16 или 32). Если конфликта избежать не удается - видеоконтpоллеpу пpиходится задеpживать обpащение ЦП к видеопамяти, что снижает пpоизводительность системы; для исключения подобных конфликтов в pяде каpт пpименяется так называемая двухпоpтовая память (VRAM, WRAM), допускающая одновpеменные обpащения со стоpоны двух устpойств.

Многие совpеменные видеоконтpоллеpы является потоковыми - их pабота основана на создании и смешивании воедино нескольких потоков гpафической инфоpмации. Обычно это основное изобpажение, на котоpое накладывается изобpажение аппаpатного куpсоpа мыши и отдельное изобpажение в пpямоугольном окне, поступающее, напpимеp, от TV-пpиемника или декодеpа MPEG. Видеоконтpоллеp с потоковой обpаботкой, а также с аппаpатной поддеpжкой некотоpых типовых функций называется акселеpатоpом или ускоpителем, и служит для pазгpузки ЦП от pутинных опеpаций по фоpмиpованию изобpажения.

ЦАП (цифpоаналоговый пpеобpазователь, DAC) служит для пpеобpазования pезультиpующего потока данных, фоpмиpуемого видеоконтpоллеpом, в уpовни интенсивности цвета, подаваемые на монитоp. Все совpеменные монитоpы используют аналоговый видеосигнал, поэтому возможный диапазон цветности изобpажения опpеделяется только паpаметpами ЦАП. Большинство ЦАП имеют pазpядность 8x3 - тpи канала основных цветов (кpасный, синий, зеленый, RGB) по 256 уpовней яpкости на каждый цвет, что в сумме дает 16.7 млн. цветов. Обычно ЦАП совмещен на одном кpисталле с видеоконтpоллеpом, однако это делается в основном для недоpогих ЦАП, поскольку близкое соседство с интенсивно pаботающими схемами отpицательно влияет на стабильность pаботы ЦАП.

Видео-ПЗУ (Video ROM) - постоянное запоминающее устpойство, в котоpое записаны видео-BIOS, экpанные шpифты, служебные таблицы и т.п. ПЗУ не используется видеоконтpоллеpом напpямую - к нему обpащается только центpальный пpоцессоp, и в pезультате выполнения им пpогpамм из ПЗУ пpоисходят обpащения к видеоконтpоллеpу и видеопамяти. Hа многих совpеменных каpтах устанавливаются электpически пеpепpогpаммиpуемые ПЗУ (EEPROM, Flash ROM), допускающие пеpезапись пользователем под упpавлением специальной пpогpаммы из комплекта каpты.

ПЗУ необходимо только для пеpвоначального запуска адаптеpа и pаботы в pежиме MS DOS, Novell Netware и дpугих ОС, pаботающих пpеимущественно в текстовом pежиме; опеpационные системы Windows, OS/2 и им подобные, pаботающие чеpез собственные видеодpайвеpы, не используют ПЗУ для упpавления адаптеpом, либо используют его только пpи выполнении пpогpамм для MS-DOS.

Hа каpте обычно pазмещаются один или несколько pазъемов для внутpеннего соединения; один из них носит название Feature Connector и служит для пpедоставления внешним устpойствам доступа к видеопамяти и изобpажению. К этому pазъему может подключаться телепpиемник, аппаpатный декодеp MPEG, устpойство ввода изобpажения и т.п. Hа некотоpых каpтах пpедусмотpены отдельные pазъемы для подобных устpойств.

Итак для вывода изображения (да и текста тоже) на экран монитора компьютера служат специальные устройства - ВИДЕОКОНТРОЛЛЕРЫ или ВИДЕОАДАПТЕРЫ. Они могут быть реализованы в виде отдельной платы или же размещаться на материнской плате. Кроме того, любой из режимов представления цвета контроллер поддерживает не вообще, а только для некоторого набора допустимых значений количества пикселов на экране монитора. Величина, которая объединяет в себе количество строк на экране и число точек в строке называется РАЗРЕШАЮЩЕЙ СПОСОБНОСТЬЮ (или просто РАЗРЕШЕНИЕМ). А совокупность разрешающей способности и формата представления цвета носит название ВИДЕОРЕЖИМА.

Первые видеоплаты персональных компьютеров, например, позволяли выводить 200 строк по 320 точек, каждая из которых могла быть одного из четырех цветов. В последние два десятка лет эти устройства бурно развивались (как, впрочем, и другие компоненты персональных компьютеров). Пропустим первые достижения в этой области и остановимся на видеорежиме "цветного" VGA (Video Graphics Adapter), называемого еще MCGA (Multi Color Graphics Adapter), известного программистам также по номеру 13h (шестнадцатиричному). Это был (и есть) 256-цветный режим с разрешением 320x200 точек.

Все ранние видеорежимы, включая и MCGA, появлялись достаточно медленно, по одному и, в силу этого, успевали стандартизироваться. Существование стандарта означало, что с режимами, поддерживаемыми конкретным видеоадаптером, можно было работать стандартным образом, независимо от того, кто эту плату выпустил.

Высококачественные видеорежимы:

В дальнейшем, фирмы-производители развивали более совершенные видеоадаптеры, получившие название SuperVGA. И все было бы хорошо, но каждый производитель обеспечивал собственный интерфейс к своим видеоадаптерам, а эти интерфейсы не были совместимы между собой.

Естественно, такое положение не могло существовать долго. Организация под названием VESA (Video Electronics Standards Association) разработала и распространила специальный стандарт на интерфейс к SuperVGA видеоадаптерам. Версия 1.2 этого стандарта датирована 22 октября 1991 года. Версия 1.1 - июнем 1990 года. Стандарт обеспечивает набор функций, которые прикладная программа может использовать для получения информации относительно возможностей и характеристик специфической реализации SuperVGA и управления операциями таких аппаратных средств в терминах инициализации видеорежима и доступа к видеопамяти. Функции реализованы как расширение функций VGA видео BIOS'а и доступны через прерывание 10h. Сначала производители аппаратных средств и независимые разработчики стали снабжать видеоадаптеры специальными драйверами, обеспечивающими выполнение функций стандарта VESA. Появились также так называемые "универсальные" драйверы, типа univesa, univbe и т.п., которые позволяли работать с более или менее широким набором видеоадаптеров. Uni - сокращение от слова универсальный; VESA - понятно, что такое; VBE - VGA BIOS Extension (расширение VGA BIOS). Одновременно производители аппаратных средств начали встраивать поддержку функций стандарта VESA в видеоBIOS своих устройств.

Видеорежимы SuperVGA:

Номера видеорежимов стандартного VGA занимают один байт и имеют диапазон от 00h до 13h. В диапазоне от 14h до 7Fh размещаются так называемые OEM-специфичные расширенные видеорежимы SuperVGA. (OEM - Original Equipment Manufacturer - Основной Изготовитель Оборудования). Номера от 80h до FFh не используются, так как старший бит в стандартном VGA используется как флаг очистки видеопамяти при инициализации видеорежима. Видеопамять очищается, когда этот бит равен нулю. VESA-стандарт SuperVGA отводит два байта для номера видеорежима. Старший байт содержит значение 01h. Младший бит в нем – признак режима VESA, остальные пока не используются (зарезервированы). Младший байт конкретизирует видеорежим. Таким образом полный (двухбайтный) номер видеорежима VESA может лежать в диапазоне от 100h до 17Fh. Старший бит в младшем байте как и раньше служит флагом очистки видеопамяти при инициализации видеорежима. В версии стандарта 1.2 (октябрь 91) определено 28 номеров от 100h до 11Bh (таблицы 1 и 2).

Таблица 3 - Text SuperVGA Video Modes

Номер режима

Столбцы

Строки

108h

80

60

109h

132

25

10Ah

132

43

10Bh

132

50

10Ch

132

60

Таблица 3 - Graphics SuperVGA Video Modes

Номер режима

Разрешение

Глубина цвета

Видеопамять

100h

640x 400

256

250 K =~0.24 M

101h

640x 480

256

300 K =~0.29 M

102h

800x 600

16

234 K =~0.23 M

103h

800x 600

256

468.75K=~0.46 M

104h

1024x 768

16

384 K = 0.35 M

105h

1024x 768

256

768 K = 0.75 M

106h

1280x1024

16

640 K = 0.625M

107h

1280x1024

256

1280 K = 1.25 M

10Dh

320x 200

32K (1:5:5:5)

125 K =~0.12 M

10Eh

320x 200

64K (5:6:5)

125 K =~0.12 M

10Fh

320x 200

16M (8:8:8)

187.5K =~0.18 M

110h

640x 480

32K (1:5:5:5)

600 K =~0.59 M

111h

640x 480

64K (5:6:5)

600 K =~0.59 M

112h

640x 480

16M (8:8:8)

900 K =~0.88 M

113h

800x 600

32K (1:5:5:5)

937.5K =~0.92 M

114h

800x 600

64K (5:6:5)

937.5K =~0.92 M

115h

800x 600

16M (8:8:8)

1406.25K=~1.37 M

116h

1024x 768

32K (1:5:5:5)

1536 K = 1.5 M

117h

1024x 768

64K (5:6:5)

1536 K = 1.5 M

118h

1024x 768

16M (8:8:8)

2304 K = 2.25 M

119h

1280x1024

32K (1:5:5:5)

2560 K = 2.5 M

11Ah

1280x1024

64K (5:6:5)

2560 K = 2.5 M

11Bh

1280x1024

16M (8:8:8)

3840 K = 3.75 M

В стандарте предусмотрены как графические (таблица 2), так и текстовые (таблица 1) видеорежимы высокого разрешения.

Самое высокое качество графики обеспечивает режим 11Bh (1280x1024 x16M цветов), самый мелкий текстовый режим 10Ch (132символа на 60строк). Конечно, не все видеоплаты могут поддерживать все режимы. Здесь существует ограничение, связанное с объемом видеопамяти. Действительно, для самого качественного графического видеорежима 11Bh требуется 1280x1024x3 = 3.75 M видеопамяти (3 байта на каждый пиксел).

Самые слабые видеоплаты SuperVGA имеют всего 512 К видеопамяти, и для них могут быть доступны только видеорежимы до 1024x768 x 16 цветов (384 K), 800x600 x 256 цветов (~470 K), 320x200 x 16M цветов (187.5 K).

Наиболее распространенные сейчас мегабайтные платы, в принципе, позволяют:

для 16 цветов - 1280x1024 ( 640 K),

для 256 цветов - 1024x 768 ( 768 K),

для 64K цветов - 800x 600 (~940 K),

для 16M цветов - 640x 480 ( 900 K).

Конечно, не следует думать, что видеоадаптер будет поддерживать все доступные по размеру его памяти видеорежимы. Это не так. Для поддержки того или иного видеорежима необходимо, чтобы в драйвере адаптера были записаны соответствующие программы, а для этого нужно место в ПЗУ BIOS'a. Список поддерживаемых видеорежимов можно получить, вызвав функцию 00h видео BIOS'a.

Окна видеопамяти:

Процессор ПК не может непосредственно обращаться к видеопамяти. Для операций с ней предусмотрен специальный механизм "отображения" видеопамяти в сегменте адресного пространства, доступном процессору. Обычно этот сегмент начинается с адреса A000h, но может быть и по адресу B000h. Размер сегмента при 16-ти разрядной адресации - 64 К. Для видеорежимов VGA и более ранних этого сегмента хватало для отображения всей видеопамяти. Однако даже самый плохонький режим SuperVGA требует в два раза больше памяти (не говоря уже о 4-х мегабайтном монстре 1280x1024 при почти 17 миллионах цветов).

Было принято решение, подобное тому, которое сделала в свое время фирма Intel для адресации с помощью 16-ти разрядных регистров (которые дают только 64К) памяти до 1 Мегабайта. Видеопамять отображается на 64-х килобайтный сегмент не вся, а частями, называемыми страницами. Необходимо только указать адрес начала отображаемой страницы видеопамяти. Этот адрес не может быть произвольным. Он определяется с точностью до некоторого значения, называемого GRANULARITY (грэньюлэрети), по-русски – СТЕПЕНЬ ДЕТАЛИЗАЦИИ.. Например, если для работы с изображением вам нужны его куски по 40 килобайт (0-40, 40-80 и т.д.), при степени детализации равной 64K второй кусок будет находиться в двух страницах видеопамяти (40-64 и 64-80), и вам необходимо будет их постоянно переключать, а при степени детализации равной или меньшей 32K вы сможете каждый кусок отобразить на свою видеостраницу (первый на 0-64, второй на 32-96), и, соответственно, не переключать постоянно страницы при работе со вторым куском. Окон отображения видеопамяти может быть два, и в этом случае можно работать одновременно с двумя участками видеопамяти. Это бывает полезно, например, при копировании части изображения из одного места в другое.

Вызовы BIOS расширенного VGA:

Для работы с BIOS видеоадаптера SuperVGA в настоящее время существует 9 операций, которые сгруппированы под одним номером функции - 4Fh прерывания INT 10h. Как обычно, номер функции передается программе обработки в регистре AH, а номер операции или подфункции в регистре AL. Эти операции таковы:

  • Операция 00h - Получить общую информацию о SuperVGA.

  • Операция 01h - Получить информацию о режиме SuperVGA.

  • Операция 02h - Установить SuperVGA видеорежим.

  • Операция 03h - Получить текущий видеорежим.

  • Операция 04h - Сохранение / Восстановление SuperVGA видеосостояния.

  • Операция 05h - Управление окнами видеопамяти.

  • Операция 06h - Установить / Получить длину логической строки.

  • Операция 07h - Установить / Получить начало экрана.

  • Операция 08h - Управление цифро-аналоговым преобразователем.

Если видео BIOS поддерживает VESA стандарт SuperVGA, онпостарается выполнить операцию, а если нет, то ничего непроизойдет. Как же определить, выполнена операция или нет? Каждая функция возвращает статусную информацию в регистре AX. В младшем байте (регистр AL) будет содержаться 4Fh, если BIOS поддерживает VESA стандарт, любое другое число говорит о том, что этот стандарт не поддерживается. Старший байт (регистр AH) сообщает о том, выполнена или нет конкретная операция. В случае успешного выполнения AH=0.

Теперь рассмотрим некоторые наиболее часто используемые операции VESA расширения видео BIOS.

Операция 00h - Получить общую информацию о SuperVGA:

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

1) поместить в регистр AX код 4F00h (0-я подфункция функции 4Fh);

2) поместить в регистры ES:DI адрес 256-ти байтного участка

памяти, в который будет возвращена информация;

3) вызвать INT 10h.

В результате выполнения (или невыполнения) операции в регистре AX появится статусная информация. В случае успешного выполнения это будет 004Fh (старший байт равен 0 - успешное выполнение, младший равен 4Fh - VESA стандарт поддерживается). По адресу, указанному в регистрах ES:DI будет размещен блок информации о SuperVGA, ради которой, собственно говоря мы и вызывали эту функцию. Этот блок имеет следующую структуру:

VgaInfoBlock STRUC

VESASignature char[4] 'VESA' ; 4 байта сигнатуры (текст "VESA")

VESAVersion word ? ; номер версии стандарта VESA

OEMStringPtr dword ? ;дальний указатель на строку

;определения изготовителя платы

Capabilities byte[4] ? ; возможности DAC

VideoModePtr dword ? ;указатель на список номеров ;поддерживаемых SuperVGA режимов

TotalMemory word ? ; объем памяти на плате VGA

Reserved byte[236] ? ; Резерв

VgaInfoBlock ENDS

Операция 01h - Получить информации о режиме SuperVGA:

Эта функция возвращает информацию об определенном SuperVGA видео режиме. Функция заполняет блок информации по адресу, определяемому вызывающим оператором. Размер блока информации 256 байт. Кое-что из этой информации неявно определяется номером режима VESA.

Для выполнения операции необходимо сделать следующее:

1) поместить в регистр AX код 4F01h (1-я подфункция функции 4Fh);

2) поместить в регистр СX номер поддерживаемого платой видеорежима;

3) поместить в регистры ES:DI адрес 256-ти байтного участка памяти, в который будет возвращена информация;

4) вызвать INT 10h.

В результате выполнения (или невыполнения) операции в регистре AX появится статусная информация, о которой мы уже говорили. В случае успешного выполнения это будет 004Fh (старший байт равен 0 - успешное выполнение, младший равен 4Fh - VESA стандарт поддерживается). По адресу, указанному в регистрах ES:DI будет размещен блок информации о режиме SuperVGA, ради которой, собственно говоря мы и вызывали эту функцию. Наиболее важные поля этого блока таковы (таблица 3):

Таблица 4 - Важные поля блока информации о видеорежиме

Поле

Длина в байтах

Смещение в байтах

Описание

WinAAttributes

1

2

атрибуты окна A

WinBAttributes

1

3

атрибуты окна В

WinGranularity

2

4

степень детализации окна, в Кб

WinSize

2

6

размер окна, в Кб

WinASegment

2

8

сегмент начала окна A

WinBSegment

2

10

сегмент начала окна B

WinFuncPtr

4

12

адрес функции прямой работы с окнами

BytesPerScanLine

2

16

Количество байт в логической строке

Xresolution

2

18

Горизонтальное разрешение

Yresolution

2

20

вертикальное разрешение

XcharSize

1

23

ширина символа

YcharSize

1

23

высота символа

NumberOfPlanes

1

24

число плоскостей видеопамяти

BitsPerPixel

1

25

количество бит на пиксел

Поля WinAAttributes и WinBAttributes показывают существуют ли окна и можно ли читать из них и писать в них:

  • бит 0 показывает существование окна;

  • бит 1 показывает что окна доступно для чтения;

  • бит 2 показывает что окно доступно для записи.

Таким образом, если значение этого поля равно 3, то окно существует и доступно только для чтения; если равно 5 – существует и доступно только для записи; если равно 7 - окно существует и доступно и для чтения, и для записи.

Поле WinFuncAddr определяет адрес функции для прямой работы с окнами видеопамяти CPU. Прямой вызов обеспечивает более быстрое выполнение операций, чем работа через прерывание INT 10h. Следует иметь в виду, что этот адрес может быть различным для каждого из видеорежимов. Если значение этого поля равно NULL, то прямого доступа к функциям управления окнами нет и для этих целей следует использовать функцию с номером 05h.

Поле NumberOfPlanes определяет число плоскостей видеопамяти. Для 16-ти цветных режимов это число равно 4, в других случаях - 1.

Поле BitsPerPixel показывает число бит, определяющих цвет одного пиксела. Для 16-ти цветных режимов это число равно 4, для 256 цветов - 8, для режимов HiColor - 16 и для TrueColor - 24.

Назначение остальных полей ясно из таблицы.

Операция 02h - Установить SuperVGA видеорежим:

Эта функция инициализирует видеорежим. Вызывается она обычным образом. В регистре BX следует указать номер устанавливаемого режима. Старший бит при этом интерпретируется как флаг очистки видеопамяти (0 - очищать, 1 - нет). В результате выполнения (или невыполнения) операции в регистре AX появится статусная информация. Все другие регистры сохраняются.

Операция 03h - Получить текущий видеорежим:

Эта функция возвращает номер текущего видеорежима в регистре BX, в регистре AX - статус. Остальные регистры не меняются.

Операция 05h - Управление окнами видеопамяти:

Функция устанавливает или получает положение отображаемого окна в видеопамяти. При вызове регистр BL содержит номер окна (0 – окно A, 1 - окно B), значение регистра BH определяет вид операции (0 - установить, 1 - получить текущее положение). В регистре DX задается (для операции установки) или возвращается (для операции получения текущего положения) положение отображаемого окна в видеопамяти. Это положение задается в величинах GRANULARITY (степень детализации). Чтобы использовать эту функцию правильно, необходимо предварительно определить размер, степень детализации и адрес отображаемых окон с помощью функции 01h (получение информации о режиме SuperVGA). К этой функции бывает возможен и прямой доступ, дающий более быстрое выполнение. Адрес функции BIOS может быть получен при использовании функции 01h (получение информации о режиме SuperVGA).

Поле WinFuncAddr в ModeInfoBlock содержит адрес этой функции. Перед прямым вызовом функции надо определить только входные параметры в BH, BL, и DX (для установки окна), и нет необходимости загружать AH и AL.