ZX Format #03
29 февраля 1996
  Бейсик  

Программистам - Basic для всех №3.

<b>Программистам</b> - Basic для всех №3.


             Бейсик.

               #3


(C) Дм. Рудовский 1996

________________________________


   В  этой  статье речь пойдет о
компиляторах бейсика.
   Этот  раздел прикладных прог-
рамм интересен тем, что позволя-
ет  существенно  увеличить  ско-
рость  работы  бейсик-программ и
тем  самым  снять  одно из самых
серьезных  ограничений бейсика -
медлительность.
        ________________


   Компиляторы бейсикa на Спект-

руме   можно  разделить  на  две

группы:


   1. Компиляторы интерпретирую-
щего  типа. Эти компиляторы пре-
образовывают  программу в специ-
альный код, понятный управляющей
программе,  которая является уп-
рощенным  вариантом  встроенного
интерпретатора,  за  счет чего и
появляется выигрыш в скорости.
   Однако, коды скомпилированной
программы  располагают в области
бейсик-программы или  в  области
переменных,  что не дает возмож-
ности создавать оверлейные (вло-
женные) процедуры.
   2. Компиляторы транслирующего
типа.   Компиляторы  этого  типа
создают  таблицы из адресов под-
программ и размещают скомпилиро-
ванную  программу,  как правило,
по  произвольному адресу, но из-
за усложнения процедуры компиля-
ции,  занимают  больше  места  и
имеют больше ограничений.

   Теперь краткое описание преи-
муществ  и  недостатков  того  и
другого типов компиляторов.

   Компиляторы первого типа, как
правило,не только не накладывают
ограничений на применение их, но
и  позволяют  существенно расши-
рить  средства стандартного бей-
сикa.  Как пример можно привести
Laser  Basic Compiler. Кроме то-
го, они, как правило, используют
те же области, что и стандартный
бейсик  для хранения переменных,
что  позволяет  использовать без
дополнительных  сложностей  нес-
тандартные  обращения к перемен-
ным и функциям.
   К недостаткам этого типа ком-
пиляторов,  кроме указанного вы-
ше,  можно  отнести еще и невоз-
можность   создания  управляющей
программы  на  бейсикe,  и малую
эффективность   компиляции    по
объему и скорости.
   Для  пояснения немного откло-
нимся  от темы: эффективность по
объему  -  отношение длины прог-
раммы  до  компиляции  к размеру
объектного модуля.
   Эффективность  по  скорости -
отношение времени выполнения ни-
жеследующей  программы до компи-
ляции и после.
   Вот эта программа:

  10 FOR I=16384 TO 22527
  20 POKE I,255
  30 NEXT I
  40 STOP

   Засеките  время с момента на-
жатия <ENTER> и до момента появ-
ления надписи:
9 STOP statement, 40:1


   Ну, пора вернуться к компиля-
торам.  Второй  тип компиляторов
тоже  не  является  идеальным  и
единственными  его достоинствами
являются  скорость  работы и мо-
бильность кода, т.е. возможность
компиляции    практически   куда
угодно, а все остальное - сплош-
ные  недостатки.  Их  более, чем
достаточно:
   Во-первых, масса ограничений,
накладываемых   компилятором  на
программу:  один не "переварива-
ет" команду  BEEP, другой много-
мерные  массивы,  третий  вообще
целочисленный...
   Во-вторых,  из-за  сложностей
компиляции существенно вырастает
"нагрузка"  (блок кодов, необхо-
димый скомпилированной программе
для работы.)

   Теперь подробнее о конкретных
компиляторах:


          Первый Тип.


Оптимизирующий компилятор  BLAST

(должен  поставлятся в комплекте

      с утилитой TOOLKIT).


   Сразу  должен  отметить,  что
данное описание в большей степе-
ни составлено на основании книги
"Справочник  по  системным прог-
раммам 48К" фирмы СОЛОН и многое
из   изложенного   нуждается   в
экспериментальной проверке. Про-
верить   все   нижеследующее  на
практике  мне  не  удалось из-за
отсутствия  в  моем  архиве нор-
мально   дискетированной  версии
BLAST'а.
   BLAST  позволяет  скомпилиро-
вать  в  непосредственном режиме
программы  размером не более 3К.
При  больших  размерах требуется
предварительная  обработка прог-
раммы отладчиком TOOLKIT. Компи-
лятор воспринимает следующие ко-
манды:

   *C - Компиляция программы.
   *R - Старт  откомпилированной
      программы.
   *S - Запись откомпилированно-
      го модуля на диск.
   *I - Выбор входного устройст-
      ва для компиляции.
      R - память;
      E - магнитофон;
      М - микродрайв.
   *O - Выбор  выходного устрой-
      ства (аналогично входному)

   BLAST  позволяет  существенно
расширить  возможности стандарт-
ного   бейсикa,  используя  кон-
струкцию: REM option.

   Options:

   !AUTORUN - Автозапуск скомпи-
лированной  программы после заг-
рузки;
   !PCODE - Генерация защищенно-
го Pi-кода;
   !MACHINE CODE   -   Генерация
обычного кода;
   !INT  парам. - Объявление це-
лых  переменных (занимают 2 бай-
та, вместо обычных 5);
   %... - Обычный комментарий;
   '&BREAK (ON/OFF) -  Включение/
выключение  останова  по клавише
BREAK.
   '&WHILE   условие  -  оператор
цикла, знакомый многим по языкам
Pascal,  C. При истинности усло-
вия оператор пропускается, иначе
-  происходит  переход на опера-
тор, следующий за '&WEND.
   '&WEND  - действует аналогично
GO TO '&WHILE и служит для указа-
ния  конца  цикла  WHILE...WEND.
   '&REPEAT - На оператор, следу-
ющий за этим, происходит переход
с инструкции '&UNTIL.
   '&UNTIL   условие  -  оператор
аналогичный '&WHILE, используется
в конструкции REPEAT...UNTIL.

   Небольшое отклонение для тех,
кто не знаком с Паскалем или С.
   В алгоритмических языках при-
нято  разделять циклы на два ти-
па: циклы с предусловием и циклы
с постусловием.
   Циклы  с предусловием ('&WHILE
...WEND),  при исходном значении
условия  -  ложь, ни разу не вы-
полняются. В отличии от них,цик-
лы  с  постусловием (FOR...NEXT,
REPEAT...UNTIL) выполняются хотя
бы  один  раз, даже если условие
ложно.

   '&DOKE  x,y  - Версия POKE, но
заносит в x слово (2 байта) y;
   '&DEEK  x,y  - Функция, равно-
сильная:Y=256*PEEK(X+1)+PEEK(X);
   '&CALL  x,[a,b,c,...]  - Вызов
подпрограммы в машинных кодах по
адресу  x,  с передачей необяза-
тельных   параметров   a,b,c,...
так, что на первый из них указы-
вает регистр IX;
   '&ELSE  операторы  - Очень по-
лезное   дополнение,  существует
практически во всех версиях бей-
сикa  и используется в конструк-
ции   IF...THEN...ELSE...,   где
указывает, какие действия произ-
водить в случае невыполнения ус-
ловия после IF.

   И еще несколько тонкостей:
   1.  Скорее  всего BLAST попал
(или  попадет)  к Вам с неснятой
защитой,  с этой проблемой реко-
мендую  обратиться к упомянутому
выше источнику.
   2.  Ежели  Вам удалось отком-
пилировать   Вашу   программу  в
BLAST'е,  то  вот метод выгрузки
программы на ленту (на диск так-
же ?):

 15 LOAD "PROC"
 20 RANDOMIZE USR PEEK 23635+
     256*PEEK 23636+150: SAVE
     "PROC" LINE 15

   3.   Скомпилированный  модуль
работает  только  при  наличии в
памяти блока рабочих процедур RT
CODE.
   4.  Характеристики компилято-
ра:
Коэффициент объема: 95%
Коэффициент скорости: 145%
Размер "навески": 5К

!  Описание   программы  TOOLKIT
дано во втором номере журнала.


   Компилятор бейсик-программ

     из пакета LASER BASIC

     фирмы OASIS SOFTWARE.


   Об  этом компиляторе говорить
много не буду, т.к. позднее, при
описании   самого  LASER  BASIC,
расскажу  и  о воспринимаемых им
расширениям.
   Итак,  сделав CLEAR 59799 или
ниже, мы загружаем блок компиля-
тора COMPCODE и программу; затем
запускаем  компилятор директивой
RANDOMIZE USR 59800 и ждем, пока
экран не очистится и не появится
надпись, что, дескать, все окей.
Тогда  записываем скомпилирован-
ную  программу, как бейсик-блок,
но ни в коем случае не делаем ни
RUN,  ни  CLEAR, т.к. компилятор
размещает  коды  в области пере-
менных,  и  очистка этой области
приведет  к уничтожению програм-
мы.
   Для  запуска программы повто-
ряем  те  же действия, но вместо
компилятора грузим пакет рабочих
процедур  - RTCODE. Запуск прог-
раммы - GO TO 1.
   Характеристики компилятора:
Коэффициент объема: 85-100 %
Коэффициент скорости: 130-150 %
Размер "навески": 5.7K


    Второй Тип Компиляторов.


        ZX COMPILER v1.0

      THRELFALL '& HODGSON.

           1982 год.


   Сей  целочисленный компилятор
является,   наверно,  первым  из
компиляторов для Spectrum-бейси-
ка. Он далеко не самый худший на
сегодняшний день, хотя созданная
через 3 года 2 версия этого ком-
пилятора, живущая в нашей стране
под  именем  MCODER  2, работает
несколько   быстрее.   Так   как
рассказывать   об   ограничениях
этого компилятора слишком долго,
то скажу коротко - если какую-то
конструкцию  компилятор  не вос-
принимает,  он выведет ее на эк-
ран и прервет компиляцию.
   Для   компиляции   необходимо
опустить RAMTOP на уровень АДРЕС
КОМПИЛЯЦИИ-1  (этот метод приме-
няется во всех компиляторах вто-
рого  типа) и запустить компиля-
тор   командой   RANDOMIZE   USR
60000.
   Характеристики компилятора:
                  v1.0     v2.0
Коэф. объема:        140-180%
Коэф. скорости:   2200%    2500%
Размер "навески": 4.8K     4.8K


        INTEGER COMPILER

          Мартин Левис

            1983 г.


   Мартин  Левис в 1983 году вы-
пустил  компилятор,  по характе-
ристикам   равный   ZX  COMPILER
v2.0,   правда   "навеска"  была
длинней  на 0.5К, да в ходе ком-
пиляции высвечивалось меньше ин-
формации.
   В том же году Левис выпускает
и  компилятор, работающий с пла-
вающей  запятой (дробными числа-
ми). FLOATING POINT COMPILER за-
нимал   практически  столько  же
места, сколько и его целочислен-
ный   собрат,   однако,  быстро-
действие  упало в 6 раз, поэтому
если Ваша программа не пользует-
ся дробными числами использовать
сей   компилятор  представляется
неэффективным.
   Оба  эти компилятора запуска-
ются с адреса 59300.
   Характеристики FPC v1.0:
Коэффициент объема: >150%
Коэффициент скорости: 400%
Размер "навески":    5.3K


             TOBOS

 FULL FLOATING POINT COMPILER.


   Пожалуй,   это  самый  мощный
компилятор   второго   типа.  Он
практически  не ставит ограниче-
ний на компилируемую программу.
   Итак, порядок работы  с  этим
компилятором:
  1. Опускаете  RAMTOP на нужный
адрес, но не выше 50000.
  2. Загружаете компилятор.
  3. Загружаете программу, кото-
рую хотите скомпилировать.
  4. Запускаете  компилятор  ди-
рективой RANDOMIZE USR 53100.
  5. Записываете кодовый блок по
указаниям компилятора.

   Главный недостаток этого ком-
пилятора  - огромный размер "на-
вески", а также очистка всей па-
мяти между скомплированным моду-
лем и "навеской".
   Характеристики компилятора:
Коэффициент объема:  95-140%
Коэффициент скорости: 600%
Размер "навески":  12.1K

!  Внимание:

   Все  компиляторы второго типа

требуют присутствия в памяти се-

бя для нормальной работы скомпи-

лированной программы.


   P.S.  Все  компиляторы  обоих
типов  не допускают работы ском-
пилированной программы с устрой-
ствами ввода/вывода (магнитофон,
дисковод),  обращение к ним воз-
можно только из машинных кодов.
________________________________



Другие статьи номера:

IS-DOS - "IS-DOS - начинающим" No 3

IS-DOS - "Оконная система IS-DOS".

IS-DOS - "Формат объектных модулей *.obj IS-DOS Ассемблера".

IS-DOS - "Формат таблицы локальных символов IS-DOS Ассемблера".

Авторы журнала - ZX-Format No.3

Железо - Исправление ошибки TR-DOS.

Железо - новая звуковая карта: General Sound.

Железо - новая модель Спектрума: Scorpion ZS 256 Turbo+.

Железо - о турбировании Спектрум-машин.

Железо - обзор модемов для ZX Spectrum.

Железо - Шинная архитектура Спектрума (концептуальная разработка).

Игрушки - "Last battle" (Последняя битва) подробное описание.

Игрушки - 48 утюгов (второй уровень).

Игрушки - десятка наиболее продаваемых в С.-Петербурге.

Игрушки - описание игры BATMAN-II.

Игрушки - что новенького: The Light Corridor, Jonny Quest in Doctor Zins, Bedlam, Bubble Dizzy, Navy Seals, Пираты.

Конкурс - конкурс на компьютерный анекдот.

Лотерея - лотерея для читателей журнала.

От авторов - о третьем выпуске журнала.

Отдохнём - HУ, ЮЗЕР, ПОГОДИ!

Отдохнём - глюкодром: Самые ОПЕЧАТКИ.

Помощь - Очередной трактат об очердной оболчке и не только.

Почтовый ящик - дискуссия.

Почтовый ящик - доска обьявлений.

Почтовый ящик - письма читателей.

Премьера - TASM 4.0 (Turbo ASseMbler for ZX-Spectrum 128k)

Премьера - Приключения ВИННИ ПУХА.

Программистам - Basic для всех №3.

Программистам - Адаптация игр: адаптация программ на диск.

Программистам - Адаптация игр: зыкрытые коды.

Программистам - адаптцация игр: бессмертия.

Программистам - ассемблер: Экскурс в анатомию ZX

Разное - Amiga: вопросы и ответы.

Разное - Амига: новости.

Разное - Перспективы П/О.


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

Похожие статьи:
Netmail - письма читателей: Глущенко Кирилл (Kristoph), Никитин Олег (NIK-O), Гаркушин Алексей (GAS-13), Энгельгардт Юрий (X-MAN), Колесников Сергей (SKL-KEEPER), Чичканёв Константин (ERASER), Токарчук Денис (D-W-T), Кленин Дмитрий (RamTop).
Реклама - Реклама и объявления ...
Мозаика - О фирмах, производящих ZX-Spectrum. Cheat к игре "Street Fighter 2".
НА-ЧАЛО - Здaрoвa спeктрумist! У нaс в ptz щaс нoчь...
Listh language project - Forth is implemented much simpler than Lisp, but it has big drawbacks.

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