Н TOBOS FP - Полный быстрый компилятор BASIC-a
1. Загрузка и запуск.
Компилятор загружается инструкцией LOAD "". После загрузки
он занимает область памяти от 53100 до 65367. Графика пользователя
остается без изменений. Программа-загрузчик выполняет команду
CLEAR 39999, резервируя память выше этого адреса для нужд ком-
пилятора. Пользователь может изменить значение RAMTOP. Ком-
пиляция производится с помощью инструкции.
RANDOMIZE USR 53100.
Коды скомпилированной программы размещаются, начиная с
адреса 40000. Скомпилированную программу можно исполнить с
помощью инструкции
RANDOMIZE USR 40000,
либо записать в команде
SAVE "имя" CODE ХХХХХ, YYYY
где ХХХХХ - стартовый адрес, a YYYY - длина полученного кода.
1.1. Ограничения компилятора TOBOS.
Компилятор не воспринимает инструкций, связанных с обслу-
живанием магнитофона и MICRODRIVE, CONTINUE и CLEAR с
аргументом. Остальные инструкции принимаются с учетом их фор-
матов. Однако, невозможно продолжить исполнение прерванной
программы. Также не существует простых способов перемещения
переменных между областями памяти BASIC-A и компилятора. Из-
за используемого формата записи данных все числовые результаты
печатаются с точностью до 7 значащих цифр.
1.2. Ошибки во время компиляции и исполнения программы.
Информация об ошибках выводится в соответствии с практикой
ZX SPECTRUM, т.е. с соответствующими номерами строки и инст-
рукции. Ниже описаны сообщения об ошибках, которые имеют осо-
бое значение:
- NONSENSE IN BASIC - использована недопустимая инструк-
ция (см. пункт 2);
- OUT OF MEMORY - (см. пункт 4);
- VARIABLE NOT FOUND - отсутствие описания переменной,
т.е. отсутствие инструкции FOR, LET, INPUT, READ для простой
переменной. Такое сообщение может появиться при исполнении про-
граммы, однако оно не относится при этом к простым числовым
переменным, поскольку они инициализируются нулевыми значени-
ями;
- RAMTOP NO GOOD - переполнение машинного стека. Как
правило, в таком случае достаточно увеличить RAMTOP на 100, или,
если ранее исполнено CLEAR 23999, то выполнить CLEAR 24099.
1.3. Большие программы.
Сообщение OUT OF MEMORY может появиться во время за-
грузки программы, во время компиляции или при исполнении ском-
пилированной программы. В этом случае следует применить один из
описанных ниже методов:
- использовать инструкцию CLEAR ADDR для перемещения
RAMTOP вверх или вниз с целью освобождения большей области
памяти для программы на BASIC-E или для машинного кода;
- использовать режим, при котором в процессе компиляции со-
здается более короткий код. Скомпилированная таким образом про-
грамма выполняется даже быстрее, однако возможные сообщения об
ошибках не содержат соответствующих номеров строки и инструк-
ции. Этот режим обеспечивается с помощью команды РОКЕ 53252,0
и выключается с помощью команды РОКЕ 53252, 55;
- переместить скомпилированную программу на место уже не-
нужной программы на BASIC-E и запустить ее инструкцией
RANDOMIZE USR <АДРЕС_НАЧАЛА_ПЕРЕМЕЩЕННО-
ГО_КОДА>
- код не должен занимать пространство ниже RAMTOP и об-
ласть, занимаемую компилятором;
- использовать режим, при котором уничтожается программа на
BASIC-E в процессе компиляции. Режим включается инструкцией
РОКЕ 53240, 0 и выключается инструкцией РОКЕ 53240, 55.
Лучше всего выполнять CLTAR 53099 максимальное простран-
ство для BASIC-A, загрузить программу на BASIC-E и затем выпол-
нить компиляцию с помощью
RANDOMIZE USR 53100.
По окончании компиляции исполняется инструкция CLTAR
23999, а программа исполняется по инструкции
RANDOMIZE USR 24000.
- Ячейки с адресами 58112 и 58113 служат для определения
адреса, с которого размещается код программы в режиме компиляции
без уничтожения исходного текста (см. пункт 4). Если в обеих ячей-
ках будут нули, то код размещается с адреса RAMTOP+1, в против-
ном случае с адреса
РЕЕК 58112 + 256*РЕЕК 58113;
- Если первая строка программы записана в виде
1 IF 1/2-0.5 THEN RANDOMIZE USR 53100:
RANDOMIZE USR 40000: STOP
то инструкция RUN автоматически вызовет компиляцию и пе-
реход к исполнению программы. Это позволяет исключить ошибки
при записи RANDOMIZE USR... ~
- Во время исполнения скомпилированной программы компиля-
тор должен находиться в памяти ЭВМ;
- Ячейки памяти с адресами 53631 и 53632 содержат информа-
цию об адресе, с которого размещается код программы в случае ком-
пиляции с уничтожением исходного текста (см. пункт 4).
По умолчанию АДРЕС РЕЕК 55631 + 256*РЕЕК 55632 содержит
значение 24000 для магнитофонной версии и 24100 для дисковой
версии TOBOS FP.