- •1. Основы программирования для dos 9
- •1.1.7. Средства bios 21
- •2. Приемы системного программирования 57
- •Введение
- •1.Основы программирования для dos
- •1.1. Структура и выполнение программ в dos
- •Программа типа сом
- •Программа типа ехе
- •1.2.Использование служебных функций dos и bios
- •1.3.Вывод на экран в текстовом режиме
- •Средства dos
- •Средства bios
- •Выбор видеорежима
- •Управление положением курсора
- •Вывод символов на экран
- •Прямая работа с видеопамятью
- •1.4.Ввод с клавиатуры
- •Средства dos
- •Средства bios
- •1.5.Графические видеорежимы
- •Работа со стандартными графическими режимами
- •Работа с svga-режимами
- •(Продолжение таблицы 4)
- •(Окончание таблицы 4)
- •1.6.Работа с мышью
- •1.7.Другие устройства
- •Системный таймер
- •Последовательный порт
- •Параллельный порт
- •1.8.Работа с файлами
- •Создание и открытие файлов
- •Чтение из файла и запись в файл
- •Закрытие и удаление файла
- •Поиск файлов
- •Управление файловой системой
- •1.9.Управление памятью
- •Обычная память
- •Область памяти umв
- •Область памяти нма
- •Интерфейс ems
- •Интерфейс xms
- •1.10.Организация процессов
- •Запуск программ на выполнение
- •Переменные окружения
- •Командные параметры
- •2.Приемы системного программирования
- •2.1.Управляющие структуры
- •Структуры if... Then... Else
- •Структуры case
- •Конечные автоматы
- •2.2.Процедуры и функции
- •Передача параметров
- •Передача параметров по значению
- •Передача параметров по ссылке
- •Передача параметров по возвращаемому значению
- •Передача параметров по результату
- •Передача параметров по имени
- •Передача параметров отложенным вычислением
- •Передача параметров в регистрах
- •Передача параметров в глобальных переменных
- •Передача параметров в стеке
- •Передача параметров в потоке кода
- •Передача параметров в блоке параметров
- •Локальные переменные
- •2.3.Обработка прерываний
- •Обработчики прерываний
- •Прерывания от внешних устройств
- •Взаимодействие прикладных и системных обработчиков прерываний
- •2.4.Резидентные программы
- •Системные средства организации резидентных программ
- •Взаимодействие с резидентной программой
- •2.5.Драйверы устройств в dos
- •Литература
Работа с svga-режимами
В режиме VGA 320х200 с 256 цветами для отображения видеопамяти на основное адресное пространство используется 64000 = FA00h байт, располагающихся с адреса A000h:0000h. Дальнейшее увеличение разрешения или числа цветов приводит к тому, что объем видеопамяти превышает максимальные границы сегмента в реальном режиме (65535 = FFFFh байт), а затем и размер участка адресного пространства, отводимого для видеопамяти (160 Кб, от A000h:0000h до B800h:FFFFh; с адреса C800h:0000h начинается область ROM BIOS). Для вывода изображения в этих условиях используются два механизма — переключение банков видеопамяти для реального режима работы процессора и LFB (линейный кадровый буфер) для защищенного режима.
Во втором случае вся видеопамять отображается на непрерывный участок адресного пространства, начинающегося с некоторого 32-разрядного адреса. В результате весь образ видеопамяти, который может занимать несколько мегабайт, отображается в один непрерывный массив. В защищенном режиме максимальный размер сегмента составляет 4 Гб, поэтому никаких сложностей с адресацией этого буфера не возникает. Буфер LFB можно использовать, только если видеоадаптер поддерживает спецификацию VBE 2.0.
В реальном режиме вывод на экран осуществляется по-прежнему копированием данных в 64-килобайтный сегмент, обычно начинающийся с адреса A000h:0000h, но эта область памяти соответствует только части экрана. Чтобы вывести изображение в другую часть экрана, требуется вызвать функцию перемещения окна (или, что то же самое, переключения банка видеопамяти), изменяющую область видеопамяти, которой соответствует сегмент А000h. Например, в режиме 640х480 с 256 цветами требуется 307200 байт для хранения всего видеоизображения. Заполнение сегмента A000h:0000h – A000h:FFFFh приводит к закраске приблизительно 1/5 экрана, перемещение окна А на позицию 1 (или переключение на банк 1) и повторное заполнение этой же области приводит к закраске следующей 1/5 экрана, и т. д. Перемещение окна осуществляется подфункцией 05 видеофункции 4Fh или передачей управления прямо на процедуру, адрес которой можно получить, вызвав подфункцию 01. Некоторые видеорежимы позволяют использовать сразу два таких 64-килобайтных окна, окно А и окно В, так что можно записать 128 Кб данных, не вызывая прерывания.
Несмотря на отсутствие общего формального стандарта на режимы Super VGA (SVGA), многие из них поддерживаются большинством производителей видеоадаптеров в соответствии со стандартами VESA BIOS Extension (VBE).
В зависимости от количества бит, используемых для хранения кода цвета, стандартные графические режимы SVGA могут быть 4-, 8-, 15-, 16-, 24- и 32-битными.
Каждый пиксель в 4-битных режимах описывается одним битом, поэтому для вывода цветного изображения требуется программирование видеоадаптера на уровне портов ввода-вывода. Код цвета хранится в 4-битовой ячейке, следовательно, возможны 16 различных цветов для каждого пикселя.
Каждый пиксель в 8-битных режимах описывается ровно одним байтом. Значение байта — номер цвета из палитры, значения цветов которой можно изменять, например, вызывая подфункцию 09 видеофункции 4Fh.
Каждый пиксель в 15-битных режимах описывается ровно одним словом (16 бит), в котором биты 0 - 4 содержат значение синей компоненты цвета, биты 5 - 9 — зеленой, а биты 10 - 14 — красной. Бит 15 не используется.
В 16-битных режимах каждый пиксель также описывается ровно одним словом. Обычно биты 0 - 4 (5 бит) содержат значение синей компоненты, биты 5 - 10 (6 бит) — зеленой, а биты 11 - 15 (5 бит) — красной. В нестандартных режимах число бит, отводимое для каждого цвета, может отличаться, так что при их использовании следует вызвать подфункцию 01 видеофункции 4Fh и получить информацию о видеорежиме.
В режимах с 24-битным и 32-битным цветом каждому пикселю на экране соответствуют три байта и одно двойное слово (4 байта). Если видеорежим использует модель памяти 6 (Direct Color), то младший 6aйт (байт 0) содержит значение синего цвета, байт 1 содержит значение зеленого, байт 2 — значение красного, а байт 3 — в 32-битных режимах резервный и используется либо для выравнивания, либо содержит значение для альфа-канала. Некоторые видеорежимы могут использовать модель памяти 7 (YUV) — при этом байт 0 (младший) соответствует насыщенности красного, байт 1 — насыщенности синего, a 6aйт 2 — яркости.
Таблица 4. Графические режимы SVGA
стандарт |
4-битные (16 цветов) |
8-битные (256 цветов) |
||||
номер |
разре-шение |
объем памяти |
номер |
разре-шение |
объем памяти |
|
VGA |
012h |
640480 |
64 Кб |
013h |
320200 |
64 Кб |
VBE 1 |
102h |
800600 |
256 Кб |
100h |
640400 |
256 Кб |
104h |
1024768 |
384 Кб |
101h |
640480 |
320 Кб |
|
106h |
12801024 |
512 Кб |
103h |
800600 |
512 Кб |
|
|
|
|
105h |
1024768 |
768 Кб |
|
|
|
|
107h |
12801024 |
1,3 Мб |
|
VBE 2 |
|
|
|
120h |
16001200 |
1,9 Мб |