Системные программы для ZX-Spectrum 1992 г.

LASER-BASIC COMPILER - компилятор языка LASER-BASIC предназначен для создания автономной программы, независимой от интерпретатора LASER-BASIC'a.


ПРОГРАММА LASER-BASIC COMPILER

АВТОР: КРИС МЕПЛИНГ

Компилятор языка LASER-BASIC предназначен для создания автономной программы, независимой от интерпретатора LASER-BASIC'a.

Он может выполнять и обработку программ, написанных на стандартном бейсике, но реального выигрыша во времени работы откомпилированных программ не представляет (в два раза или менее). Компилированный код занимает меньший объем памяти, чем исходная программа, но при запуске он должен сопровождаться пакетом рабочих процедур. Любая программа, созданная в расширенном интерпретаторе LASER-BASIC'a поместится в компиляторе.

1. РАСПОЛОЖЕНИЕ ФАЙЛОВ НА ЛЕНТЕ

A: COMPCODE ............ LOAD " " CODE

LOADER   ............ LOAD " "

RT CODE ............ LOAD "RT

CODE" CODE В: DEMO ............ LOAD " "

• 2. КОМПИЛЯЦИЯ

При компиляции программы в памяти должны размещаться только текст исходной программы и компилятор, следовательно после ввода программы с помощью LASER-BASIC'a и ее запуска программу следует записать на ленту, сбросить компьютер и загрузить в компьютер только свою программу без интерпретатора.

Программа, написанная на языке LASER-BASIC, не может редактироваться средствами SINCLAIR-BASIC'a.

Перед загрузкой следует выполнить:

CLEAR   59799

Загружается компилятор:

LOAD   "    "   CODE

LOAD "COMPCODE" CODE

Исходная программа может загружаться как до, так и после Компилятора.

Начало компиляции:

RANDOMIZE USR 59800

При компиляции экран отображает случайную информацию, волнуйтесь, это не сбой — все в порядке, после окончания компиляции экран очищается, выдается сообщение "O.K.", а также номер последней откомпилированной строки. , • 3. 3.СТРУКТУРА ОТКОМПИЛИРОВАННОЙ ПРОГРАММЫ

Скомпилированный код стирает исходный текст, тем не менее компьютер воспринимает его как обычную бейсик-программу. Процедуры загрузки в память и записи на ленту откомпилированного кода ничем не отличаются от соответствующих опе-, раций для обычных бейсик-программ.

Откомпилированный текст дальнейшим изменениям не подлежит, нельзя также выполнять "MERGE", если надо скомпи-”даровать программу. Сначала надо создать один исходный мо-'Дуль (MERGE), а затем его откомпилировать.

После команды "UST" на экране появляется несколько строк текста. Первые две устанавливаются компилятором, независимо ОТ содержания программы.

Первая строка (не выполняется) :

0 PRINT 0,

она содержит недоступную пользователю информацию для пакета рабочих процедур.

Вторая строка — всегда :

RANDOMIZE 59800.

Это вызов откомпилированной программы. Если в исходной Программе имеются функции, определяемые пользователем, то ИХ список (подряд) помещается в третьей строке с номером 0. Это не относится к назначениям процедур LASER-BASIC, которые компилируют отдельно.

Если в исходной программе есть операторы "DATA", to они все собираются в один оператор "DATA" и размещаются в четвертой строке, которая также нумеруется 0. Несмотря на такое объединение, оператор "RESTORE" в откомпилированной программе будет выполняться правильно.

• 4. ВЫПОЛНЕНИЕ ОТКОМПИЛИРОВАННОЙ ПРОГРАММЫ

Для откомпилированной программы необходимо снабдить ее дополнительно пакетом рабочих процедур. RAMTOP следует установить в 59799 (не забывайте об этом при загрузке откомпилированных модулей). Пакет рабочих процедур загружается командой: SPRITES.

Если программа имеет файл SPRITES, его следует загрузить точно так же, как и в программе, выполненной на языке LASER' BASIC.

Загрузка откомпилированной программы выполняется как и для обычной программы на BASIC.

Инициализация выполнения программ:

RANDOMIZE USR 59800 или GOTO I Примечание: нажатие BREAK не прерывает выполнение программы, кроме режимов загрузки и выгрузки.

• 5. КОМПОНОВКА АВТОНОМНОЙ ПРОГРАММЫ

Программу, написанную на LASER-BASIC'e, необходимо соответственно настроить, чтобы для работы было достаточно набрать LOAD " ". Для этого программу необходимо скомпоновать и снабдить загрузчиком. Он входит в набор, имеющийся на исходной ленте. Вот его текст:

10   CLEAR   59799

20   LET   SPST=

30   LOAD   "RTCODE"    CODE

40   LOAD   "SPRITES"    CODE   SPST

50 LET T=INT(SPST/256): POKE

62463, SRST-256*T: POKE 62465, Т

60 POKE 62466, 255: POKE 62467, 220

70 POKE 56575, 0

80   LOAD   "    "

Здесь:

Строка 10: Выделение пространства для пакета рабочих процедур.

Строка 20: Установка начала областей размещения файла SPRITES (см.описание генератора спрайтов).

Строка 30: Загрузка пакета рабочих процедур.

Строка 40: Загрузка файла спрайтов.

Строка 50: Внесение в программу адреса начала области раз-мещения спрайтов.

Строка 60: Внесение в программу адреса конца области размещения спрайтов.

Строка 70: Внесение конца области размещения знакогенератора спрайтов.

Строка 80: Загрузка текста скомпилированной программы.

Примечание: Если спрайты в программе не используются, строки 20-70 “южно исключить.

Вам остается внести требуемое значение SPST и подготовить набор файлов на чистой ленте. Помните, что, делая "SAVE" для откомпилированной программы, необходимо указать строку автостарта. • 6. ОГРАНИЧЕНИЯ ДЛЯ СТАНДАРТНОГО BASIC'a

Нижеперечисленные ограничения были заложены в компилятор уже на этапе его проектирования.

1. Нельзя использовать вычисляемые выражения в операторах RUN, GOTO, GOSUB, RESTORE, так как на этапе компиляции все переменные будут установлены в 0, как и длина всех стрингов переменных.

2. В операторе DIM допустимы вычисляемые границы, но только такие, которые в процессе компиляции будут установлены в 0, и, следовательно, нельзя объявлять переменные вида DIM <N+12) — здесь значение в скобках после компиляции будет равно 12, а в ходе выполнения программы перевычисляться не будет.

3. Ограничения на число переопределения массива компилятор не накладывает. Учтите, что первое определение выполняется в ходе компиляции и оно переносится в откомпилированную программу. Следовательно, если в программе есть переход к началу программы в точку, расположенную выше первого оператора DIM, то при втором переходе этой же части программы объявление массива может оказаться недействительным. Эту сложность можно обойти, поместив все описания массивов в самом начале программы до той точки, где начинаются ветвления.

4. Использование оператора CLEAR не допускается.

5. Команда RUN, как и в BASIC'e. Но сброса переменных нет.

6. Недопустимы операторы: MERGE, CONTINUE, LIST, LUST.

7. Командой CONTINUE нельзя запускать сбившуюся программу или программу с оператором STOP.

8. Команды OPEN и CLOSE работают только с потоками S и Р. Подкачка и сброс файлов в режиме работы с микродрайвом не поддерживаются.

9. Команды LOAD, SAVE, VERIFY являются недопустимыми. Если загружается бейсик-программа, рабочие процедуры рассматривают ее как откомпилированную программу на LASER-BASIC'e и попытаются ее выполнить, передав управление на первый оператор.

• 7. ИСПОЛЬЗОВАНИЕ КОМПИЛЯТОРА С МИКРОДРАЙВОМ

Компилятор и пакет рабочих процедур можно использовать с микродрайвом. Исключения: в процессе выполнения компилирования программы обмен файлами с микродрайвами не поддерживается.

Все примеры, приведенные в данной инструкции, можно перенести на Х микродрайв, соответствующим образом изменив команды ввода-вывода.

• 8. СООБЩЕНИЯ ОБ ОШИБКАХ

1. ILLEGAL STATEMENT FOUND — встретился один из недопустимых операторов: CLEAR, MERG, LIST, LUST, CONTINUE.

2. PROCEDURE DEFENITION NESTING ERROR —   найдено два описания процедуры без промежуточного оператора RETN. В описаниях процедур вложенности не допускается.

3. RETN WITHOUT DEF IN ERROR — найден оператор RETN без соответствующего описания процедуры.

4. PROCEDURE NOT FOUND — обращение к неописанной процедуре. Описание процедуры обязательно должно предшествовать ее использованию.

5. PROGRAMM NOT COMPILED — это сообщение пакета рабочих процедур. При старте программы ее начало не было идентифицировано как начало откомпилированной программы.

В ходе выполнения программы могут также выполняться стандартные сообщения об ошибках. Однако пакет рабочих процедур не в состоянии указать точку возникновения ошибки. Кроме того, следует игнорировать цифровые коды, сопровождающие сообщения об ошибках стандартного бейсика. Словом, для того, чтобы быть полностью уверенным в работе откомпилированной программы, ее предварительно следует тщательно отладить и отредактировать перед компиляцией.

При возникновении ошибок в ходе выполнения программа или ее часть должна быть перекомпилирована, для чего необходимо загрузить компилятор и исходную программу (предварительно исправленную). • 9. КАРТА ПАМЯТИ

Компилятор и пакет управляющих процедур загружаются начиная с адреса 59800. Пакет рабочих процедур занимает всю верхнюю часть памяти, конец компилятора — по адресу 62586, то есть его длина 3057 байт. Следовательно, перед загрузкой этих модулей необходимо зарезервировать для них области памяти, соответствующие их начальным и конечным адресам.

Откомпилированная программа размещается в памяти следующим образом:

ПРОГРАММА

ПЕРЕМЕННЫЕ

СПРАЙТЫ

СТЕК Z80

RT CODE

PROG

VARS

 

ELINE

 

56575

 

59800 –65535

 

• 10. РЕКОМЕНДАЦИИ ПО ПРОГРАММИРОВАНИЮ В КОДАХ

Между областью спрайтов и пакетов рабочих процедур имеется область памяти более ЗК. Обычно для стека процессора требуется менее 256 байт, поэтому здесь можно размещать процедуры в машинных кодах, установив соответствующие значения в оператор CLEAR на конце файла спрайтов.

Кроме того можно, в принципе, отводить под процедуры пользователя всю область начиная с ELINE и до адреса 59800.





СОДЕРЖАНИЕ:


  Оставте Ваш отзыв:

  НИК/ИМЯ
  ПОЧТА (шифруется)
  КОД



Темы: Игры, Программное обеспечение, Пресса, Аппаратное обеспечение, Сеть, Демосцена, Люди, Программирование

Похожие статьи:
Этюды - Программа - каталогизатор дисков.
Жизнь баклана - неужели вы еще в состоянии сидеть за компом и читать уже второй PSY? Неужели вы еще не свихнулись от ужаса, коим напичкана наша газета?
Review - Hardware Retrofetishism .
Они крутые - краткий обзор Chaos Construction'99 и Paradox'99.
От редакции - изменилась структура газеты.

В этот день...   21 ноября