Диалекты бейсика для ZX Spectrum 1992 г.

PRO-DOS - Теневой экран.


ТЕНЕВОЙ ЭКРАН_

♦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 Мгновенно перебрасываем на видимый экран




СОДЕРЖАНИЕ:
  1. Laser Basic - Вывод спрайтов на экран; Вывод на экран части спрайта; Перенос атрибутов; Преобразование окна экрана; Наборы переменных; Перемещение спрайтов; Наложение спрайтов; Копирование изображения с экрана в спрайт; Преобразование спрайтов; Скроллинг пейзажа; Изменение размеров области спрайт-файла; Вспомогательные графические операторы и функции; Определение столкновений спрайтов; Сервисные операторы и функции; Процедуры; Загрузка и запись программ.


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
привет - кажется, это всё...
Письмо №325 - Московская обл, г Лосино-Петровский
WarGames - как сделать War Game.
Mail - errata: игры из СССР
Сеть - Сетевые новости. Список BBS ZX-Net 095.

В этот день...   28 марта