ТЕНЕВОЙ ЭКРАН_
♦SCREEN, ♦SWAP
Применение PRO-DOS для создания
демонстрационных и учебных программ (например, для видеосопровождения
лекций и докладов) предъявляет повышенные требования к скорости вывода
картинок и текста на экран монитора. Поскольку система PRO-DOS, как и
стандартный Spectrum-Бейсик, является интерпретатором, то она не в
состоянии обеспечить высокую скорость выполнения операций обработки
экранного изображения. Это приводит к нежелательным задержкам и
побочным видеоэффектам, которые могут отвлекать внимание зрителя. Для
обхода этих трудностей в PRO-DOS заложена возможность работы с так
называемым теневым экраном.
Теневой экран — это область ОЗУ, По
размерам равная экранной области памяти (6912 байт). Предварительно
построенное в ней графическое изображение практически мгновенно можно
переместить на экран.
Адрес начала размещения в памяти области теневого экрана задается оператором
♦SCREEN addr
Параметр addr может принимать значения в
диапазоне 0...65535, но, как нетрудно догадаться, не все адреса из
этого диапазона являются приемлемыми для записи. Хотя ничто не помешает
посмотреть, как выглядят на экране, скажем, первые 6912 байт ПЗУ.
Теневой экран «признают» все
операторы PRO-DOS, а также PRINT и LIST. Инструкции стандартного
Бейсика PLOT, DRAW и CIRCLE работают только с «видимым»
экраном.
Располагать теневой экран лучше всего вслед за
бейсик-прог-раммой, защитив ее командой CLEAR addr—1 (то есть
установив RAMTOP на единицу меньше адреса начала теневого экрана). Если
addr=16384, то области теневого и обычного экранов совпадут. Кстати,
при инициализации PRO-DOS устанавливается именно этот 7 режим, и
мы не замечаем сущест-
вования теневого экрана.
Содержимое теневого экрана мгновенно
«перебрасывается» в экранную область ОЗУ, то есть
становится видимым, с помощью оператора
♦SWAP
При этом содержимое теневой области не
изменяется, и там можно продолжать построения. Все неисполняемые
операторы не различают теневой и обычный экраны, то есть при
переключениях с одного экрана на другой сохраняются описания окон,
шрифтов, заливок. Например, определив окно на основном экране
♦WINDOWS: WSIZE 0,0,10,12
- мы «бесплатно» получим точно такое же окно на теневом и наоборот.
Можно пользоваться двумя, тремя и т. д.
теневыми экранами (сколько поместится в ОЗУ), переключаясь с одного на
другой с помощью оператора +SCREEN. *SWAP будет работать с текущим
экран ^м, то есть с тем, чей адрес был уцомянут в последнем выполненном
операторе +SCREEN.
Перед использованием теневой экран надо
хорошенько «протереть» с помощью *CLEAR или *CLS, поскольку
никто не знает, что там находится. Даже если в этой области памяти
«сидят» одни нули, то это значит, что фон на всем экране
будет «радикального» черного цвета, что не всегда
требуется. Приведем пример, демонстрирующий работу с теневым экраном:
30 CLEAR 39999: REM Резервируем место под теневой экран
40 +ELLIPSE 80, 80, 70, 30: REM Долго рисуем эллипс на видимом экране
50 *SCREEN 40000: REM Переключаемся на теневой экран
60 *CLS: REM Чистим его
70 ^ELLIPSE 70, 60, 45, 30: REM Рисуем эллипс на теневом экране
80 *SWAP: REM Мгновенно перебрасываем на видимый экран