Системное программное обеспечение персональных ЭВМ


Пример 5



Пример 5

/*== ПРИМЕР 9.3 ==*/ /*==== Цветовые атрибуты. Прямая запись в видеопамять ====*/ #include <dos.h>

/* Сегментный адрес видеопамяти */ #define VSEG 0xb800 /* Вычисление смещения в видеопамяти */ #define VADDR(x,y) y*160+x*2-162 #define byte unsigned char #define word unsigned int char st[]=" x "; /* Обpазец */ word voff; /* Смещение в видеопамяти */ byte color; /* Цветовой атpибут */ int x,y; /* Экpанные кооpдинаты */ byte key; /* Код клавиши */ byte mode; /* Режим мерцания/код палитры */ byte pl[]= /* Исходные палитры 16 цветов */ { 0,1,2,3,4,5,6,56,7,8,16,24,32,40,48,56 }; union REGS rr; char *s; int i; main() { /* очистка экрана */ for (voff=0; voff

Образ экрана размером 80 x 25 символов в видеопамяти занимает 4000 байт. Но видеопамять часто имеет значительно больший объем. Так, для EGA объем ее может достигать 256 Кбайт. Половина этого объема используется только в графических режимах, вторая половина составляет адресное пространство в 32 Кбайта, что позволяет разместить в ней 8 образов экрана. Это пространство разбито на 4-Кбайтные участки, называемые страницами. Таким образом, в EGA может быть 8 текстовых страниц (а при 40 символах в строке - 16 страниц по 2 Кбайта). По умолчанию построением изображения на экране управляет образ, записанный в нулевой странице, но имеется возможность переключить адаптер на отображение 1-й, 2-й и т.д. страниц. Это обеспечивает функция 5 (номер страницы задается в AL). Получить номер активной в данный момент страницы можно из области памяти BIOS. Программа примера 9.4 заполняет видеопамять текстом (разным на разных страницах), а затем обеспечивает переключение активной страницы.




- Начало -  - Назад -  - Вперед -