Существенный недостаток ZX Spectrum — относительно малый
объем свободной памяти (около 40 килобайт). А тут еще интерпре-
татор Бейсика «транжирит» память: под запись любого числа ин-
терпретатор отводит 6 ячеек памяти независимо от размера числа.
Под каждый символ отводится 8 ячеек памяти.
** Более подробно о подключении альтернативных шрифтов см. [1].
Даже если это просто единица или ноль. Вот и приходится про-
граммистам, работающим на Бейсике, изощряться, чтобы втис-
нуться в узкие рамки памяти Speccy.
Прежде всего надо расширить область памяти, отведенную для
работы бейсик-программы. Границы, в которых может размещать-
ся программа с переменными, определяются компьютером, но мо-
гут быть изменены. Старший адрес памяти, разрешенный к ис-
пользованию интерпретатором Бейсика, хранится в системной пе-
ременной RAMTOP (23730/31). Стандартно он равен 65367. Но
если программа не вмещается, его можно увеличить до предела —
до 65535*. Для этого нет необходимости записывать новое значе-
ние RAMTOP с помощью РОКЕ. Изменить RAMTOP можно с по-
мощью специально предназначенного для этого оператора CLEAR с
параметром 65535. Правда, CLEAR к тому же очистит все перемен-
ные, массивы, выполнит операторы CLS и RESTORE, вообще подгото-
вит программу к новому пуску.
Если и после перемещения RAMTOP не хватает памяти, при-
дется применять более изощренные методы.
Приведем несколько самых распространенных способов ,сжатия
бейсик-программ. Хотя в этой области нет предела для фантазии.
Во-первых, надо свести к минимуму длину имен всех числовых
переменных. Если их меньше, чем букв в алфавите, то все сделать
однобуквенными.
Памятуя, что числовые константы занимают много места, не
помешает самые часто используемые из них заменить на перемен-
ные. Надо только единожды в начале программы присвоить им
требуемые значения.
Целые числовые константы выгоднее записывать как символь-
ные и помещать их «под» функцию VAL. К примеру, операторы
LET а=5 и LET a=VAL "5" тождественны, однако второй оператор
занимает в памяти на две ячейки меньше (но, следует учесть,
работает медленнее).
Для сокращения объема памяти, занимаемого программой, бы-
вает полезно вместо числовых массивов использовать символьные.
Ведь под каждый элемент числового массива, независимо от того,
что в нем хранится, отводится по пять ячеек памяти, в то время, как
под элемент символьного массива отводится лишь одна ячейка.
Преобразовать же символьную константу в число можно с по-
мощью той же VAL.
И, напоследок, парочку «хитростей». Например, вместо нуля,
который, как и любое число, занимает в памяти 5 байт, можно
записать просто BIN, либо NOT PI. Число «пи» отлично от нуля, и это
главное, а логический оператор NOT, по определению, превращает
его в ноль. Внешне получилось длиннее и мудреней, но в памяти,
тем не менее, такая запись займет лишь две ячейки. Вывернув-
шись, можно «смоделировать» и единицу. Например, записав
NOT BIN либо SNG PI.
[свернуть]