Текстовый ввод/вывод в графическом режиме 15
Рис. 1.2. Назначение разрядов регистра спецэффектов
00 - данные из ЦП переносятся в видеопамять
без изменения (операцией MOV);
01 - используется операция AMD (логическое И);
10 - используется OR (логическое ИЛИ);
11 - используется XOR (исключающее ИЛИ).
Регистр специальных эффектов выбирается посылкой значения 3 в порт $ЗСЕ, после чего его значение устанавливается посылкой нужного байта в порт $3CF.
Регистры фонового цвета и разрешения установки совместно определяют те битовые плоскости, в которые будут помещены единицы в случае, если программа разрешила установку пиксела в регистре маски, но не зажигает пиксел (передает в этом разряде ноль). Если, например, оба регистра содержат единицы в младшем разряде, т.е. кодируют цвет 1 (синиц), то при записи байта в видеопамять во все разрешенные маской и установленные в единицу разряда байта будет помещен код цвета из регистра цвета, в то время как в разрешенные разряды с нулями — код фонового цвета 1. В результате зажигаемые пикселы будут выведены нужным цветом на синем фоне. Регистр фонового цвета выбирается посылкой 0 в порт $ЗСЕ, а регистр разрешения посылкой 1 в этот порт; в обоих случаях данные передаются в выбранный регистр посылкой байта в порт $3CF (в контроллере используются лишь младшие 4 разряда этого байта).
В режиме записи 1 реализуется специальный эффект, связанный с копированием произвольной части экрана на другое место. В этом режиме нужно просто читать байты видеопамяти по одному адресу и записывать их по другому. Содержимое регистров маски битов и цвета в режиме 1 игнорируется.
В следующей программе сначала создается окно в центре экрана, которое постепенно заполняется случайными линиями. После нажатия на любую клавишу окно смещается вверх и вправо. После еще одного нажатия любой клавиши программа завершает свою работу.
Uses Graph,CRT;
var