РАБОТА С ПАМЯТЬЮ_
DPOKE, DPEEK(), POKE, MEMORY$()
Beta Basic, как и любой другой серьезный диалект Бейсика, может оперировать не только одно-, но и двухбайтовыми числами.
Для записи в память двухбайтового числа достаточно выполнить оператор
DPOKE < адрес > ,< число > - а для чтения двухбайтового числа применить функцию
DPEEK {< адрес >)
Более того, Beta Basic располагает также
средствами записи в память целых строк символов (точнее, кодов этих
символов), начиная с указанного адреса. Для этих целей используется все
тот же РОКЕ, но с новым синтаксисом:
РОКЕ < адрес >, < строка символов>
Предусмотрена и обратная функция,
воспринимающая всю память как одну большую строку кодов символов и
выделяющая участок памяти, который можно, например, скопировать в
символьную переменную:
MEMORY $ () (< адрес начала > ТО < адрес конца >)
Все эти новые средства позволяют быстро
обрабатывать большие порции памяти. Впечатляющим примером может
послужить такая программка:
10 LET A$=STRING$ (6144,CHR$ BIN 01010101) 20 LET B$=STRING$ (6144,CHR$ BIN 10101010) 30 DO: POKE 16384,A$: POKE 16384,B$: LOOP
В ней функция STRINGS (к подробному
рассмотрению ее мы вернемся позже) формирует строки длиной по 6144
символа, коды которых представляют собой в двоичном виде чередующиеся
нули и единицы. А оператор РОКЕ записывает эти коды в экранную область
памяти (6144 байта — размер этой области без атрибутов).
Результатом работы такой программки будут быстро бегущие по экрану
вертикальные полоски.
Пользуясь оператором РОКЕ и функцией MEMORY$,
можно запоминать экранные картинки как символьные строки, а затем снова
выводить их на экран:
10 PLOT 60,60: DRAW 100,100,4000
20 LET A$=MEMORY$()(16384 TO 23295): REM Запоминаем экран 30 CLS: PRINT "Нажмите любую клавишу" 40 PAUSE 0: POKE 16384, A$
Возможно также быстрое копирование участков памяти. Дополним предыдущую программу строками:
70 LET A$=MEMORY$ () (18432 ТО 20479) 80 РОКЕ 16384, А$: РОКЕ 20480, А$
Средняя треть экрана будет скопирована в верхнюю и нижнюю.