РАБОТА С ПАМЯТЬЮ_
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, А$
Средняя треть экрана будет скопирована в верхнюю и нижнюю.