Важная информация

User Tag List

Показано с 1 по 7 из 7

Тема: Вопросы про компилятор для бэйсика и размер бейсик проги.

  1. #1
    Master Аватар для Руслан
    Регистрация
    20.10.2007
    Адрес
    Челябинск
    Сообщений
    505
    Благодарностей: 45
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию Вопросы про компилятор для бэйсика и размер бейсик проги.

    привет, тему не могу найти про компиляторы для бейсика. Подскажите адрес кто знает. А вообще интересует такой.
    1 - побыстрей
    2- поменьше (это если он крепиться к коду обязательно)

    И еще, как узнать сколько памяти пожирает бейсик прога, со всеми переменными и т.д.? Спасибо.
    Изготовление Картриджей для Денди 1-8 игровки с меню. (0,1,2,3,4,7,71 мапперы), для Сеги 1-8
    https://vk.com/retronicaru

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2
    Veteran Аватар для Лас
    Регистрация
    18.11.2008
    Адрес
    пос.Полярный, ЯНАО
    Сообщений
    1,062
    Благодарностей: 780
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Руслан Посмотреть сообщение
    привет, тему не могу найти про компиляторы для бейсика. Подскажите адрес кто знает. А вообще интересует такой.
    1 - побыстрей
    2- поменьше (это если он крепиться к коду обязательно)

    И еще, как узнать сколько памяти пожирает бейсик прога, со всеми переменными и т.д.? Спасибо.
    Из журнала ZX FORMAT:

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

    Компиляторы бейсик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. Скомпилированный модуль работает только при наличии в памяти блока рабочих процедур RTCODE.
    4. Характеристики компилятора:
    Коэффициент объема: 95%
    Коэффициент скорости: 145%
    Размер "навески": 5К

    Компилятор бейсик-программ из пакета 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.

    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. Все компиляторы обоих типов не допускают работы скомпилированной программы с устройствами ввода/вывода (магнитофон, дисковод), обращение к ним возможно только из машинных кодов.

  4. Эти 3 пользователя(ей) поблагодарили Лас за это полезное сообщение:
    Ewgeny7 (28.08.2012), проф (29.08.2012), Руслан (28.08.2012)

  5. #3
    Super Moderator Аватар для Alex Rider
    Регистрация
    07.02.2008
    Адрес
    г. Рязань
    Сообщений
    2,746
    Благодарностей: 958
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Руслан Посмотреть сообщение
    И еще, как узнать сколько памяти пожирает бейсик прога, со всеми переменными и т.д.? Спасибо.
    По адресу 23641 лежит 2-хбайтовая переменная E_LINE - это конец Бейсик-программы, по адресу 23635 - PROG - начало программы. Искомое печатается так:
    PRINT PEEK 23641 + 256 * PEEK 23642 - (PEEK 23635 + 256 * PEEK 23636)

  6. Этот пользователь поблагодарил Alex Rider за это полезное сообщение:
    Руслан (28.08.2012)

  7. #4
    Master Аватар для Руслан
    Регистрация
    20.10.2007
    Адрес
    Челябинск
    Сообщений
    505
    Благодарностей: 45
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    спасибо ребята
    Изготовление Картриджей для Денди 1-8 игровки с меню. (0,1,2,3,4,7,71 мапперы), для Сеги 1-8
    https://vk.com/retronicaru

  8. #5
    Member
    Регистрация
    03.03.2008
    Адрес
    Петербург
    Сообщений
    178
    Благодарностей: 106
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Описание работы с компиляторами можно найти в книге "Диалекты Бейсика для ZX-Spectrum" (Питер'92)
    http://trd.speccy.cz/book/DIALECT.ZIP

  9. Этот пользователь поблагодарил AndTorp за это полезное сообщение:
    Оззя (22.01.2014)

  10. #6
    Guru Аватар для null_device
    Регистрация
    26.09.2009
    Адрес
    г. Красноярск
    Сообщений
    2,694
    Благодарностей: 2043
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Руслан Посмотреть сообщение
    1 - побыстрей
    2- поменьше (это если он крепиться к коду обязательно)
    1 Побыстрее - это почти любой из целочисленных (в сравнении с компиляторами поддерживающими операции с "плавающей" запятой). Но это палка о двух концах - за скорость, обычно приходится расплачиваться количеством команд бейсика "распознаваемых" компилятором.
    2 Яркий представитель - MCODER 2 или его "отчечественный тезка" Mcoder 4.2 от Евдокимова. Основные плюсы второго: нет необходимости держать сам компилятор в памяти после генерации исполняемого кода, относительно небольшой обьем исполняемого кода т.к. компилятор целочисленный, разного рода "плюшки" самого компилятора.
    Последний раз редактировалось null_device; 29.08.2012 в 02:54.
    Когда есть, но не знаеш где - это все равно, что нету.

  11. #7
    Activist
    Регистрация
    01.04.2008
    Адрес
    Москва
    Сообщений
    312
    Благодарностей: 13
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В стандартный бейсик спектрума (прошитый в ПЗУ) можно проводить вставки машинного кода - быстрее, как говориться, некуда.
    Мои сайты:
    Город Полоцк
    О Динозаврах
    Моя Коллекция
    С64, Amiga 500, 1000 (USA, Белоусов), Daewoo CPC400s (msx2), Robotron 1715 1910, ZX Spectrum+, Timex TC 2048, ZXM-Phoenix, Амстрад, БК0010-01, Вектор ПК-6128ц, 06ц, ДВК 3М части, Искра 1030м, Истра 4816 Курск, Кинопроэктор Bauer P8 TS Universal и Русь, Перфосчитыватель FS 1501, УКНЦ МС 0511 с КМД БНГМД 6022, Atari 520 ST

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Коды клавиатуры с бэйсика.
    от Руслан в разделе Разное
    Ответов: 11
    Последнее: 06.09.2013, 23:49
  2. Увеличить размер PDF вложений
    от tnt23 в разделе Форум
    Ответов: 30
    Последнее: 01.08.2012, 06:20
  3. Ответов: 4
    Последнее: 05.05.2012, 20:39
  4. кросс компилятор С для Z80
    от vitasam в разделе Программирование
    Ответов: 24
    Последнее: 04.03.2007, 18:03
  5. Ограничение на размер картинки!
    от CHRV в разделе Форум
    Ответов: 2
    Последнее: 20.04.2005, 23:24

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •