Формат хранения текста программы на Бейсике
Строки бейсик-программы размещаются в порядке возрастания номеров в области памяти, адрес
начала которой задается системной переменной PROG (23 635/36). Они хранятся в следующем фор-
мате:
Номер строки может принимать значения от 0 до 9999 (правда, из Бейсика редактировать стро-
ку с номером 0 невозможно). Обратите внимание также на то, что номер записан «наоборот», то
есть сначала размещается старший байт, а затем младший. Длина текста бейсик-программы рас-
считывается с учетом символа перевода строки (код #0D).
Текст строки хранится в виде кодов ASCII-символов и токенов — кодов операторов Бейсика
(см. «Таблица символов»). Непосредственно после символьной записи числа размещается его об-
раз во внутреннем формате: байт #ОЕ и 5 байт собственно числа (1 байт порядка и 4 байта ман-
тиссы). При записи пользовательской функции DEF FN после каждого параметра резервируются 6
байт для записи чисел в аналогичном формате.
_Формат хранения переменных
В именах переменных бейсик-программы допускается использовать буквы латинского алфавита
A...Z и a...z (в числовых переменных могут также использоваться цифры от 0 до 9). Интерпре-
татор Бейсика не делает различий между строчными и прописными буквами. Кроме того, пробелы в
именах числовых переменных игнорируются, например, имена «Label 12» и «LABEL12» в программе
будут указывать на одну и ту же переменную._
*)Некоторые внешние устройства, например, Interface 1, могут перехватывать это сообщение и заменять
стандартное ПЗУ своим, существенно расширяя возможности работы с каналами.
После определения переменной в бейсик-программе она помещается в специально отведенную об-
ласть памяти, адрес начала которой задается системной переменной VARS (23627/28). Порядок
расположения переменных соответствует последовательности их определения в программе.
При записи переменных их тип задается тремя старшими битами первого байта формата:
010 — символьная переменная;
011 — числовая переменная с одним символом в имени; i
100 — числовой массив;
101 — числовая переменная с несколькими символами в имени;
110 — символьный массив;
111 — переменная цикла FOR...NEXT.
Числовые переменные (numeric variables)
Имена числовых переменных в бейсик-программе могут состоять из неограниченного числа сим-
волов (букв или цифр), но первым символом имени обязательно должна быть буква. Хранение в
памяти переменных, имя которых задано одним символом, и переменных с многосимвольным именем
осуществляется в различных форматах.
Для записи числовых переменных с односимвольным именем используется 6 байт: 1 байт иденти-
фикатора и 5 байт под численное значение переменной во внутреннем формате:
Числовой массив (numeric array)
Имя числового массива может состоять только из одной буквы. Элементы массива хранятся в
памяти последовательно в сторону увеличения индекса. Например, элементы массива 5(2,3,4)
(количество измерений — 3;
первая размерность — 2; вторая — 3; третья — 4) в памяти будут располагаться в такой после-
довательности: (1,1,1); (1,1,2); (1,1,3); (1,1,4); (1,2,1); (1,2,2); (1,2,3); (1,2,4);
(1,3,1); ...; (1,3,4); (2,1,1); (2,1,2); ...; (2,3,4).
При определении массива оператором Бейсика DIM всем его элементам присваивается нулевое
значение.
Управляющая переменная цикла FOR...NEXT (index variable)
Имя управляющей переменной цикла FOR...NEXT может состоять только из одной буквы. Кроме
идентификатора, начального и конечного значений, а также шага цикла, запись переменной со-
держит номер строки оператора FOR и номер в строке оператора, следующего за FOR. Обратите
внимание, что номер строки в этом случае хранится «правильно» — сначала младший, а затем
старший байт.
Символьная переменная (string)
Имя символьной переменной задается одной буквой, за которой следует знак $. Количество
байт, отводимых для записи символьной переменной, не ограничено и равно длине строки, храня-
щейся в переменной в данный момент, плюс 3 байта (идентификатор и 2 байта длины текста). Ес-
ли переменная принимает значение «пустой строки», под нее отводится только три байта (байты
длины равны нулю).
В остальные биты первого байта записываются младшие 5 бит имени переменной (если перемен-
ная многосимвольная, то младшие 5 бит первой буквы ее имени):
Стек калькулятора
Для вычислений значения выражений интерпретатор Бейсика использует подпрограмму калькуля-
тора из операционной системы ZX Spectrum, которая вызывается инструкцией RST #2 8. Калькуля-
тор организован по стековому принципу — исходные значения для вычислений сначала помещаются в
стек, а затем с помощью специальных команд над ними производятся необходимые действия. В
стеке калькулятора сохраняются также промежуточные результаты вычислений.
Стек операционной системы
Стек операционной системы — это стек микропроцессора Z80. Обычно его величина вполне дос-
таточна для работы как бейсик-программ, так и подпрограмм в кодах, вызываемых из Бейсика.
Размер области памяти, отводимой под стек, не должен быть меньше 80 байт, в противном случае
будет выдано сообщение 4 Out of memory.
Если в своей программе Вы переназначили указатель стека, то при возврате в Бейсик его зна-
чение необходимо восстановить.
Стек оператора GO SUB
Этот стек используется для сохранения адресов возврата при вызове подпрограмм оператором
GO SUB.
При выполнении каждого оператора GO SUB в стек помещаются три байта: номер следующего за
GO SUB оператора (1 байт) и номер строки, в которой он расположен (2 байта).
Область символов, определяемых пользователем
При запуске системы область определяемых пользователем символов размещается в самом конце
ОЗУ. Изменив значения переменной UDG, можно переместить область в любое место памяти (см.
«Русификация ZX Spectrum», «Системные переменные»).