Текстовый ввод/вывод в графическом режиме 15

h00151.jpg

Рис. 1.2. Назначение разрядов регистра спецэффектов

00 - данные из ЦП переносятся в видеопамять

без изменения (операцией MOV);

01 - используется операция AMD (логическое И);

10 - используется OR (логическое ИЛИ);

11 - используется XOR (исключающее ИЛИ).

Регистр специальных эффектов выбирается посылкой значения 3 в порт $ЗСЕ, после чего его значение устанавливается посылкой нужного байта в порт $3CF.

Регистры фонового цвета и разрешения установки совместно определяют те битовые плоскости, в которые будут помещены единицы в случае, если программа разрешила установку пиксела в регистре маски, но не зажигает пиксел (передает в этом разряде ноль). Если, например, оба регистра содержат единицы в младшем разряде, т.е. кодируют цвет 1 (синиц), то при записи байта в видеопамять во все разрешенные маской и установленные в единицу разряда байта будет помещен код цвета из регистра цвета, в то время как в разрешенные разряды с нулями — код фонового цвета 1. В результате зажигаемые пикселы будут выведены нужным цветом на синем фоне. Регистр фонового цвета выбирается посылкой 0 в порт $ЗСЕ, а регистр разрешения посылкой 1 в этот порт; в обоих случаях данные передаются в выбранный регистр посылкой байта в порт $3CF (в контроллере используются лишь младшие 4 разряда этого байта).

В режиме записи 1 реализуется специальный эффект, связанный с копированием произвольной части экрана на другое место. В этом режиме нужно просто читать байты видеопамяти по одному адресу и записывать их по другому. Содержимое регистров маски битов и цвета в режиме 1 игнорируется.

В следующей программе сначала создается окно в центре экрана, которое постепенно заполняется случайными линиями. После нажатия на любую клавишу окно смещается вверх и вправо. После еще одного нажатия любой клавиши программа завершает свою работу.

Uses Graph,CRT;

var