Оптимизирующий компилятор языка бейсик - BLAST
Начало работы
Бласт загружается так:
LOAD "BLAST"
Бласт самостар1*ует и на экране появляется надпись:
BLAST OCSS 1985 ххххх BYTES FREE,
(здесь ххххх - об'ем свободной памяти)
В этом месте Бласт делает проверку на то. имеете ли вы право пользоваться
этой программой.
ENTER THE COLOR IN SQUARE x-x* (W.Y.G.R)?
Для тек. кто пользуется оригинальной версией программы, с неудаленной защи-
той. имеется таблица:
Таблица кодов для входа в Бласт
|
ABC |
DEF |
GHI |
JK |
LMN |
OPQ |
RST |
UVW |
XYZ |
|
|
ABC |
DEF |
GHI |
JK |
LMN |
OPQ |
RST |
UVW |
XYZ |
40 |
RYG |
RYG |
GRY |
GW |
GGY |
RRY |
GYG |
YGW |
YGG |
|
20 |
RGY |
YGY |
RYG |
RY |
RYW |
YRR |
GYG |
RYG |
WYR |
39 |
YGR |
YWG |
YGG |
RG |
YRG |
YGG |
RGR |
GYG |
RGR |
|
19 |
YGR |
GGW |
YGY |
GR |
GWG |
WGG |
WGW |
GGY |
RRG |
38 |
GYG |
GYR |
RGY |
GY |
RGY |
WYR |
YRG |
RGR |
GYG |
|
18 |
RYG |
RGY |
RGR |
RY |
WYG |
YRG |
RYG |
YGR |
GRY |
37 |
RGY |
GRY |
GGR |
YW |
YRG |
YGW |
GYG |
YGY |
GGR |
|
17 |
YWG |
YRG |
RGY |
GG |
YGW |
GYR |
YGY |
GYG |
GYR |
36 |
YRG |
GYG |
RYG |
GG |
RGY |
GRG |
RGW |
GYG |
GGY |
|
16 |
GGG |
RGR |
YRG |
RG |
RGY |
GGG |
GGG |
RGR |
YRG |
35 |
GGY |
YGW |
YEY |
GR |
YRG |
RGY |
GYR |
YGW |
YRY |
|
15 |
YRG |
YRY |
WYG |
RR |
YRR |
YRG |
RYR |
YRG |
WYG |
34 |
RYG |
RRY |
GYR |
YG |
YYG |
YYG |
YRG |
GRY |
GYG |
|
1 4 |
GYR |
RGG |
YGG |
RG |
WGG |
RGY |
GWG |
YGY |
GGY |
33 |
YRG |
YGR |
YGG |
RG |
GGR |
GRY |
GYG |
YGW |
YRG |
|
13 |
GGY |
GYG |
YWY |
GY |
GWY |
GRG |
YGY |
GYG |
YRG |
32 |
RGY |
GYG |
RYR |
YW |
GGY |
RGW |
YGY |
RGY |
RYG |
|
12 |
RYR |
GGR |
GGR |
YR |
GWG |
WYG |
RGG |
YRG |
WGY |
31 |
GYW |
GRY |
GRG |
GR |
YGR |
YRG |
YGR |
YRG |
GRG |
|
1 1 |
YRY |
WGY |
GRY |
WY |
GGY |
GRY |
GYG |
RYR |
YGR |
30 |
YRG |
YGR |
YRY |
RG |
GRY |
GYR |
YRY |
WYG |
YGW |
|
10 |
RGG |
TTG |
RGR |
YG |
RYW |
YGR |
GGW |
GWG |
RGY |
29 |
RYR |
GWG |
GGY |
RY |
WYG |
RGG |
RYR |
GGW |
GRY |
|
9 |
GYG |
RGR |
YGG |
GY |
RGY |
GGY |
RYG |
WYG |
YYG |
28 |
GRG |
YGG |
YRG |
YG |
YGY |
GRR |
YGt |
RRY |
RGG |
|
8 |
RGW |
YRY |
GRY |
RR |
GRG |
RYG |
YGG |
YGR |
GRW |
27 |
RYG |
RYR |
RYR |
GG |
GWG |
RYG |
RWR |
GYR |
GRY |
|
7 |
YRG |
GYW |
GYG |
GY |
GYR |
YYW |
GYR |
GRY |
RYG |
26 |
YRG |
GYG |
YRG |
YR |
YGR |
YRG |
RGG |
YWY |
GYR |
|
6 |
GYR |
YRG |
GGR |
GG |
RRG |
RGG |
YRY |
WYG |
YRG |
25 |
GYR |
YRW |
GYR |
GG |
RYR |
GYR |
GYR |
GYG |
RGY |
|
5 |
YWG |
GGY |
YWG |
YW |
GGR |
GYR |
GYG |
YGY |
GYR |
24 |
RGG |
RGY |
GRY |
WG |
RGG |
RGW |
YGG |
RGY |
GYR |
|
4 |
GGY |
RGR |
GGY |
RR |
YRG |
YWY |
GRY |
RGW |
YRG |
23 |
GGG |
YRG |
RYG |
GY |
YRY |
GRG |
GWY |
GRR |
YGY |
|
3 |
RYR |
GYG |
RYR |
YG |
RGY |
GGR |
RGR |
GYG |
RGY |
22 |
YWY |
RYG |
YGG |
YG |
RYR |
GYR |
YGR |
RGY |
WYG |
|
2 |
YGG |
GRG |
YGG |
RY |
GRG |
RYR |
YRY |
RGY |
RYG |
21 |
GGR |
GRY |
GYW |
GR |
YGY |
GGY |
RRY |
GRR |
GRY |
|
1 |
WYR |
YGY |
WYG |
YG |
RYR |
GWY |
GYG |
GRY |
GGW |
W - белый, Y - желтый, G - зеленый. R - красный. Введите соответствующую бук-
ву и нажмите ENTER. Чтобы выполнить проверку, надо 4 раза правильно ответить на
запрос. Команды Бласта начинаются со звездочки (*), чтобы отличать их от команд
бейсика.
Теперь загрузите бейсик-программу, не превышающую Зк и наберите «С. чтобы вы-
полнить компиляцию.
Чтобы запустить откомпилированную программу, наберите: *R.
Запись откомпилированных программ: *S.
Компилирование больших программ.
Компилирование RAM-RAM возможно только для коротких программ. Чтобы обойти
это неудобство, Бласт имеет возможность читать исходный файол с ленты или мик-
родрайва и записывать об'ектный код на любое из этих устройств.
Выбор входного и выходного устройств.
Нажмите *1 и ответьте на появившийся вопрос клавишей:
R - память RAM.
Е - магнитофон (лента).
М - микродрайв.
Чтобы задать выходное устойство. нажмите *0.
Работа с лентой.
Вследствие ограниченной возможности ввода/вывода при работе с лентой, програм-
ма, подлежащая комкнляцьм, должна бить сначала переписана на ленту в специальном
формате.Средства дл! этого находятся в прилагаемой к бласту программе TOOLKIT.
После того, как исходная программа будет записана на лент> в нужном формате.
Бласт может бить перезагружен и программа откомпилирована.
Ком(илнрп>вакие с ленты на ленту.
8 этом режиме используется две ленты. Одна с исходным файлом в специальном
формате (см.Выше)
Когда вы нажмете *С для компиляции. Бласт попросит вставить кассету с исход-
ным файлом и включи'ь магнитофон. Через некоторое, время прозвучит сигнал, и вам
будет предложено шменять ленту. Необходимо остановить ленту с исходным файлом
в течение 5-ти с,кунд после звукового сигнала. Если вы этого не сделаете, то
есть вероятность, ч'о какие-либо данные будут потеряны.
Пи-код и машинный код.
Тип кода, который должен быть сформирован, задается с помощью директив:
REM! P-CODE - гегерирует пи-коды (а также по умолчанию).
REM! MASHINE-COO: - генерирует машинные коды.
Обработка машинного кода.
1. 0ткомпилиров1нная программа может резервировать пространство для блока в
машинных кодах путе< понижения RAMTOP обычным путем.
2. Переменные бйснка храниться в Бласте таким же образом, что и в бейсике,
поэтому блок в М1ШИННЫХ кодах, имеющий к ним обращение, будет работать и в
Бласте.
3. Процедуры в машинных кодах, расширяющие бейсик перехватом процедур обра-
ботки ошибок (или какими—либо другими методами) по- прежнему будут работать.
Выполняется это с:едующим образом. Если во время компиляции "Бласт" встречает
выражение, которое выглядит синтаксически неверным, компилятор компилирует его
в об'ектный файл и фиписывает ему выходной код. Когда во время работы програм-
мы процедуры RTS вс речают этот выходной код. они вызывают бейсик-интерпритатор
для его обработки Если выражение содержит ошибку, интерпритатор сообщает об
этом и выходит и: нее обычным путем. Если же это не ошибка, а предусмот-
реннное расширение «ейсика, интерпритатор ведет себя так, будто текст и не ком-
пилирован.
Расширение бейсик*. предусмотренное Бластом. также как и директивы компилято-
ра. вводятся в фо|ме специальных инструкций REM, которые распознаются Бластом
во время компиляции
Если Бласт встречает выражение REM, начинающееся с символа "%". он вырабаты-
вает код, который вызывает передачу выражений REM с опущенным знаком "%" в ин-
терпритатор во врем! рабочего запуска. Бласт сообщает об этом :
COMMENT TRANSFERID AT LINE хххх
1спользование целых переменных
Об'явление типа временной выполняется следующей директивой, например:
REM ! INT I J, К, A(10,5)
здесь переменные .J.К, и весь массив А. т.е. DIM А(10.5) уже давать не надо.
Об'явление типа долхно быть до употребления переменной.
Запита откомпилированных программ
1. Автозапуск.
Если в начале бе»сик-программы включить строку
REM ! AUT0RUN, Бласт вызовет автоматическое выполнение файла после загрузки.
2. Защищенный пи-код.
Пи-код, который (енерируется Бластом. это недокументированный язык и поэтому
предоставляет более высокий уровень его защищенности, чем машинный код. Поэтому
рекомендуем защищаюиие процедуры писать на бейсике. и компилировать их в пи-код.
Копирование программ, прошедших Бласт
Откомпилированные программы не могут б*1ть выгружены напрямую через SAVE. Ко-
манда S доступна Д1Я программ, которые были откомпилированны из RAM в RAM,но S
не выгрузит откомпилированную программу, если она загружалась с ленты или с
микродрайва. Если вы хотите выгрузить программу ка одно из эних устройств, про-
должайте так:
Запись на ленту:
1.Загрузите откомпилированную программу.
2... ставьте следующие строки:
15 LOAD "<PROG>"
20 RANDOMISE USR PEEK 23635+ 256*PEEK 23636 + 150
3.Наберите:
SAVE "<PR0G>" LINE 15
Запись на микродрайв
Процедура записи на микродрайв точно такая же. за исключением того, что дол-
жны присутствовать обычные параметры микродрайва. Например:
15 LOAD* "М";1;"<PR0G>"
20 RTANDOMIZE USR PEEK 23635+256*PEEK 23636 + 150
и наберите:
SAVE*"M";1;"<PR0G>"LINE1 5
Директивы компиллятора.
Бласт предоставляет определенные возможности выбора при компиляции. Они
реализуются посредством директив компиллятора. Выполняется это специальными вы-
ражениями REM в форме:
REM! <Директнва>
Существуют также две дополнительные формы инструкций REM.
REM% обеспечивает передачу текста или комментария ннтерпритатору во время
работы программ.
REM& применяется для открывания дополнительных инструкций бейсика. пред-
усмотренных Бластом.
1. REM! PC0DE - по этой директиве бласт компиллирует программу в пи-коды.
2. REM! MACHINE CODE - генерация в машинные коды.
3. REM! INT I.J.К - об'являет переменные I.J.K как целые.
4. REM! AUT0RUN - обеспечивает автоматический запуск откошнллированной прог-
раммы после загрузки.
Список дополненеий к бейсику:
1. Включение и выключение клавиши BREAK:
REM& BREAK ON
REM& BREAK OFF ( по умолчанию кл. выключена)
2. WHILE...WEND:
форма: REM& WHILE <условне>
REM& WEND
По этим командам блок операторов, замыкаемый REM& WEND выполняется многократ-
но. до тех пор, пока <условие> истинно (не нуль). Если <услсзие> ложно, опера-
торы пропускаются.
3. REPEAT...UNTIL
форма: REM& REPEAT
REM& UNTIL <условие>
Блок операторов между REM& REPEAT и REM& UNTIL выполнняется много кратно. пока
<условие> имеет ненулевое значение.
4. D0KE
форма: REM& DOKE <NE>.<NE>
Здесь '^Е^-числовое выражение. Все это 16-битная инструктя РОКЕ Результат
второго выражения помещается в адрес, на который указывает повое выражение.
5. DEEK - 16-битная инструкция РЕЕК. Форма записи анаюгична предыдущей.
6. CALL
Форма: REM& CALL <NE><cnucok параметров>
Эта команда вызывает процедуру в машинных кодах, содержащуося по адресу, за-
даваемому выражением "NE". Параметры разделяются запятыми; oih могут быть либо
числовыми переменными в диапазоне от 0 до 65535 или адресами числовых перемен-
ных, тогда они записываются так:
& <имя переменной)
Эти параметры хранятся в таком порядке, что первый из них сходится по адре-
су, на который указывает регистр IX.
7. ELSE форма: rem5, else (список инструкций>.
Это дополнительное разрешение расширение к конструкции IF. ..ELSE.
Программа TOOLKIT
К Бласту прилагается довольно обширный набор средств для облегчения разработ-
ки программ (TOOLKIT).
TOOLKIT автостартует после загрузки и выдает на экран сообщение:
BLAST TOOLKIT OCSS 1985
Как и компилятор Бласт, TOOLKIT загружается в верхнюю часть RAM и устанавли-
вает RAMTOP ниже себя. При этом об'ем доступной памяти снижается примерно на
2к.
TOOLKIT не может находиться в памяти компьютера одновременно с Бластом.
Ниже приведен список команд TOOLKITA. Они начинаются со знака (*), обозна-
чаются одной буквой, за ней идут параметры.
N1 - N2 - обозначает: от строки N1 до строки N2.
N1 - - обозначает: от строки N1 до конца программы.
- N2 - обозначает: от начала программы до строки N2.
Если номера строк не даны, предполагается, что речь идет о всей программе.
Команды обработки строк
1. Редактировать строку N1. - *EN1.
2. Копировать строку N1 в N2 - «С N1.N2.
3. Убрать строку N1: - *d N1.
4. Перенос строки N1 в N2 (строка N1- уничтожается)-*М N1,N2.
Команды обработки блоков
1.Копирование:*С<днапазон>,N. По этой команде копируются все строки из задан-
ного диапазона в строки, начиная с n.
2.Стирание:*0<диапазои>
3.Перенос строк:*М<диапазон>.N.
4.Перенумерация:*R<Anana30H>,N1,N2 строки из заданного интервала перенумеро-
вываются, им присваиваются номера от N1 с шагом через N2 . По умолчанию N2 рав-
но 10.
Команды обработки стрингов
1. Поиск:*F<диапазон), N$ по этой команде в заданном диапазоне строк разыски-
вается заданный стрннг. По умолчанию программа будет искать последний введенный
стринг.
2. Поиск с заменой: *S <диапазон> N1$, N2$ отыскивается первый стринг и заме-
няется на второй.
Прочие команды
1. TRACE: *TN по этой команде на экране печатается номер выполняемой в данный
момент инструкции, начиная со строки N. Замедлить вычисления можно клавишей
пробел, а остановить клавишей ENTER.
2. Устранение всех строк REM, кроме тех. которые начинаются с "!", "%".
*К
3. Запись на магнитофон блока программы.
*W <диапазон>,<имя файла>
4. Запись на ленту программы в формате, удобном для компиляции Бластом с лен-
ты. Программа будет выгружена блоками, совместно с информацией, необходимой для
компиляции.
*В <имя файла)
5. Конец работы : *Q
Карта памяти во время рабочего прогона
Карта памяти Бласта программы
PRAMT -------------------------------' PRAMT -----т--------------------------
графика пользователя графика пользователя
бласт RAMTOP --------------------------------
RAMTOP--------------------------------------------------------------стекн GO SUB, машинный стек
стеки GO SUB. машинный стек свободная область RAM
свободная область RAM STKEND-------------------------------—
STKEND ----------------------------------------------------------------STKB0T ---------------г----------------
стек калькулятора рабочее пространство
STKB0T --------------------------------------------------------------WORKSP --------------------------------
рабочее пространство область редактирования
WORKSP --------------------------------------------------------------ELINE --------------------------------
область редактирования переменные
ELINE --------------------------------VARS --------------------------------
переменные бейсика откомпилированная программа
программа на бейснке информация о каналах
PROG -------------------------------CHANS ---------------------------------
информация о каналах карты микродрайва
CHANS ----------------------------------------------------------------рабочие процедуры
карты микродрайва системные переменные интерфенса-1
системные переменные интерфейса-1 системные переменные
системные переменные буфер принтера
буфер принтера атрибуты
атрибуты экранная память
экранная память ROM
ROM