Вход

Просмотр полной версии : ZX COMPILER



ALKO
26.12.2009, 13:16
Господа, подскажите пожалуйста: " Где можно скачать самый оптимальный,в плане быстродействия и менне емкий по обьему basic-compiler на спеку ?"
Заранее спасибо !

Vovoi
26.12.2009, 17:32
На мой взгляд, лучше смотреть на MCoder-2 v.5 (переделка А.Евдокимова). Можно использовать в сочетании с асмом. Это единственный компилятор для Speccy, который создает независимый от самого компилера результирующий код. В остальных известных случаях, для работы скомпилированного кода, обязательно присутствие в памяти и самого компилера (вернее, его библиотек) - Tobos FP, Softek, MCoder-2 v.1, Laser Basic.

ps:
http://trd.speccy.cz/

ALKO
28.12.2009, 15:03
Ух тышка!
Огромнейшее спасибо, а то я замудохався подгружать свой компилятор (как минимум минуту приходится ждать)

существуют ли компилы ускоряющие работу векторной графики (draw & circle)?

Дмитрий
28.12.2009, 15:19
ALKO, зачем тебе бейсик? учи асм, на спеке писать на бейсике - это разве что для баловства.

ALKO
28.12.2009, 15:33
Учить асм?
Так я Z80 назубок знаю.
Даже некоторые подпрограммы на АСМе пишу через васик.
но сложность заключается в расчетах меток тем более все метки приходится расчитывать для двух отдельных байт(если это CALL или JP).
чуть ошибся где - все....хана...клавиатура дымится....телевизор грохочет...помогает лишь экстренный ресет...
а васик я люблю за удобство взаимодействия с компом.
к тому ж я на нем пишу проги с 6-ти лет...

Хотя это уже мертвый язык (как фортран,модула,кобол,алгол, ада или латынь) скоро такая же участь постигнет и Pascal его спасают только обновляемые версии Delphi.
Пора переходить на Си++ а то и на Java##
но ностальгия берет верх,поэтому я до гроба буду верен васику.

jerri
28.12.2009, 15:35
Пиши на С - Испанцы пишут :)

goodboy
28.12.2009, 15:40
Пиши на С - Испанцы пишут :)

не всегда. иногда используют вот такой БейсикКомпилер
http://www.boriel.com/software/the-zx-basic-compiler

а для написания/редактирования программ на бейсике есть такая штука BASin.
ftp://ftp.worldofspectrum.org/pub/sinclair/emulators/pc/windows/BASin_r14c.exe

Vitamin
28.12.2009, 16:35
Даже некоторые подпрограммы на АСМе пишу через васик.
Не путай машинные коды и ассемблер.

ALKO
28.12.2009, 16:54
Не путай машинные коды и ассемблер
особой разницы нет, так как асмовские мнемо-коды сперва на клочке от туалетной бумаги записываю, а лишь потом смотрю по таблице десятичные цифры.
Это и есть так называемый "средневековый ассемблер".

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

Vitamin
28.12.2009, 17:09
особой разницы нет
Для тебя. Поэтому ты и паришься с рассчетом смещений и адресов. В то время как за всех остальных это делает компилятор.

Vovoi
28.12.2009, 17:54
Ух тышка!
Огромнейшее спасибо, а то я замудохався подгружать свой компилятор (как минимум минуту приходится ждать)
существуют ли компилы ускоряющие работу векторной графики (draw & circle)?
Да, "вектор" ускорен. В частности, в версии "5" MCoder-2, круг рисуется в 2 раза быстрей.
Ты говоришь "свой компилятор". Сам написал? Давай поподробнее.


ALKO, зачем тебе бейсик? учи асм, на спеке писать на бейсике - это разве что для баловства.
Тут, прости, не соглашусь.
Некоторые команды компилятся в оперативку одинаково. Так что без разницы на чём писать, на асме, либо на компилере бэйсика (т.е. на -чистом-*). Если важна скорость набора проги, либо промежуточные тесты, то компилятор самое то.
Но, повторюсь, чистого компилятора на Спеке ещё не было. Мои поделки не в счёт.
____________________________
* под "чистым" компилером я понимаю следующее:
Оператор PRINT AT 10,5;"abc" скомпилируется в оперативке, например, в следующую конструкцию:
LD DE,TEXT
LD BC,6
CALL 8252
TEXT DEFB 22,10,5,"a","b","c"

и больше никакого дополнительного барахла.
В более грамотном комиляторе код оператора PRINT (да и других тоже) можно изменять по своему усмотрению. Исходя из этого, компилер можно делать сразу на базе асма.
;)

---------- Post added at 17:54 ---------- Previous post was at 17:33 ----------


Пора переходить на Си++ а то и на Java##... Что такое можно написать на "Си++", что нельзя повторить на бэйсике? Пример в студию!

ALKO
28.12.2009, 18:52
Неее - компилятор загружаю HI-SOFTовский (кажется) с бабинника.
А среду С++ я подразумевал для современных машин, где под периферию все уже адаптировано.
В Basice основной недостаток - одинаковый размер всех переменных (нету int,char,float и т.д.) , что обратнопропорционально быстродействию
например: зачем для экрана нужны дробные числа вплоть до миллионной ?
там ватит и полторабайтной переменной.

---------- Post added at 18:52 ---------- Previous post was at 18:49 ----------

На сайте Virtual TR-DOS весь софт в SCL.
Где можно найти такой же софт в TAP/TZX/Z80 для 48-ого спека?

goodboy
28.12.2009, 19:05
На сайте Virtual TR-DOS весь софт в SCL.
Где можно найти такой же софт в TAP/TZX/Z80 для 48-ого спека?

http://www.worldofspectrum.org/utils/index.html

естественно русского софта там нету

psb
28.12.2009, 20:25
Что такое можно написать на "Си++", что нельзя повторить на бэйсике? Пример в студию!
ну вы, ребята, даете:)
на очень многих языках можно делать вообще всё, функционально. разница только в удобстве написания и скорости работы (ну и память еще, само собой).
абсолютно все можно написать на асме, только ведь никто серьезные проекты на нем не делает, правда?
так что глупый вопрос.

В Basice основной недостаток - одинаковый размер всех переменных
да это не основной недостаток. например, в спекобейсике нет локальных переменных, нет функций, нельзя делать рекурсию и все в таком духе. нет, я понимаю, можно все эти механизмы реализовать, но это будет полный отстой, как по коду, так и по быстродействию.

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

Vovoi
28.12.2009, 20:36
ну вы, ребята, даете:)...
Не, всё правильно.
=)
Я ожидал было другого ответа, но всё было принято как следует:
ALKO>А среду С++ я подразумевал для современных машин, где под периферию все уже адаптировано.

Справедливо говоря, для Спекки - бэйсик и асм. Для ПЦ - Си, да Паскаль и прочее. Согласно железу!
=))))

psb
28.12.2009, 20:51
ну ладно:)
но си для спека тоже хорошо, хоть и не принято оно у нас (а зря, я думаю).

Vovoi
28.12.2009, 21:35
Если только сильно порезанный сделать.... чисто под Спек.

psb
28.12.2009, 22:21
порезанный в плане либ? возможно. а так, сам компилятор вполне нормальный может быть, да и есть:)

ALKO
28.12.2009, 23:53
на сайте Worldofspectrum.org я нашел MCoder-2,но работает он как и большинство компилеров на спеке - с использованием библиотек самого компилятора.
и никакими пириемуществами не обладает.

goodboy
29.12.2009, 00:44
попробуй BLAST!
в оригинале он с защитой - надо смотреть цвета по таблице.

Vovoi
29.12.2009, 12:45
на сайте Worldofspectrum.org я нашел MCoder-2.......
Ёшкин-кошкин!
я же ссылочегу дал, где нада пошукать.
;(((
Версия 5!

ALKO
29.12.2009, 15:00
Ёшкин-кошкин!
я же ссылочегу дал, где нада пошукать.
;(((
Версия 5!
TRD конечно клевый сайт,но мне нужна программа соответствующая двум критериям:
ПЕРВОЕ - tap,z80 or tzx формат.
ВТОРОЕ - что бы проги нормально функционировали на сорокавосьмикилобайтных машинах.

---------- Post added at 14:56 ---------- Previous post was at 14:53 ----------

Ах да, еще что б никакой связи с дисковым интерфейсом не было.
Т.к. у меня нет дисковода на спеках , а обьем памяти жалко расходовать на такие вестчи.

---------- Post added at 15:00 ---------- Previous post was at 14:56 ----------

Оффтопик -> где можно по выше указанным параметрам найти компрессор изображений.(что б управление осуществлялось через бэйцык командами Randomidze USR [address])?

psb
29.12.2009, 15:06
ПЕРВОЕ - tap,z80 or tzx формат.
может из trd проще в тап перевести на пц?

Vovoi
29.12.2009, 15:08
Насчёт Си, я имел в виду начать с составления списка начальных операторов и операций, которые потребуются для создания простейшей проги типа - puts ('Speccy foreva!') и которые с вероятностью в 100% реализовываются на камне Z80 без извратов. Затем, постепенно можно расти вверх.
Так я поступил со Спектрум-бэйсиком, переводя один оператор за другим в машинный код. "http://zx.pk.ru/attachment.php?attachmentid=6235&d=1192144869". Просьба не ругать, поделке лет 10 уже. Бэйсик программа демонстрирует возможности миниатюрного компилятора.


...Оффтопик -> где можно по выше указанным параметрам найти компрессор изображений.(что б управление осуществлялось через бэйцык командами Randomidze USR [address])?

На том же сайте есть и упаковщики, найдёшь. Всё равно с ПЦ постишь, значит и Unreal запустить можешь, а там сконвертишь как тебе нужно :)

Higgins
02.01.2010, 02:49
Насчёт Си, я имел в виду начать с составления списка начальных операторов и операций, которые потребуются для создания простейшей проги типа - puts ('Speccy foreva!') и которые с вероятностью в 100% реализовываются на камне Z80 без извратов. Затем, постепенно можно расти вверх.

На местных форумах это обсуждалось несколько раз. Если сказать коротко, резюме получается такое: без оптимизаций практического смысла в компиляторе мало, а реализация оптимизаций -- это очень большая задача даже для опытных в этом деле людей. А компиляторов, которые генерируют код для Z80 с показателями оптимальности в диапазоне от "никак" до "так себе", их и без того хватает.

Vovoi
05.01.2010, 00:39
На местных форумах это обсуждалось несколько раз....без оптимизаций практического смысла в компиляторе мало....
Да, поэтому проще на асме писать, или, если возникнет такой уж неугасимый жар - писать компилятор спектрум-бэйсика.
=)

null_device
06.01.2010, 19:14
цитата: TRD конечно клевый сайт,но мне нужна программа соответствующая двум критериям:
ПЕРВОЕ - tap,z80 or tzx формат.
ВТОРОЕ - что бы проги нормально функционировали на сорокавосьмикилобайтных машинах.

Если еще интересна тема компилятора лови калыбаху! ;) Мануал прилагается.:v2_clapp:

Бласт мосч! Правда там пакет состоит из нескольких частей оптимизатор-компилятор. И довольно геморойно на кассетах компилить-править-снова компилить.. повторять по мере необходимости;)

Vovoi
06.01.2010, 23:40
Фрагмент описания MC2b.v5:
{ Параметры процедурам в машинных кодах могут передаваться через переменные.
Имя числовой переменной транслируется в два байта ее адреса. Например:
100 LET var=10: REM LINE 42,var
Оттранслируется как команда
LD HL,(var)
}
Из примера чётко видно, что интерпретация вышеуказанной программы средствами spectrum-basic невозможна. Компилятор MCoder-2 "привинчивает" к бэйсику дополнения, которые могут выполняться только в скомпилированном коде.
В статье "ZX Review #5-6" Форум - По поводу компилятора бейсика "Blast" [http://www.zxpress.ru/article.php?id=1673] обсуждается другой, более полный компилятор спектрум-бэйсика. Авторы хотят положить конец неполным компилерам для ZX-Spectrum, создав один полноценный. В статье, в качестве примеров присутствуют такие выкрутасы как:
10 LET A=VAL((STR$ A)(1 TO 3))
(выходит ошибка)
10 LET A=VAL(STR$ A)(1 TO 3)
(все нормально)
А ведь учившиеся по книжке "Как написать игру" [http://trd.speccy.cz/book.htm], хорошо помнят о подобных приёмах, которые лишь накручивают логику в компилерах, увеличивая объём самого компилятора
:)
Так вот, что я подумал.
Один вариант построения компилятора Spectrum-Basic, это опираться на бэйсик-программы и бэйсик-игры и затачивать компилятор исключительно под них. Тогда с исходной программой будет великолепно справляться интерпретатор ПЗУ, а полноценный копилятор лишь ускорит программу.
Но таких программ немного, так что сейчас наверное этим заниматься не имеет смысла, да и никто не будет.
Второй вариант - увлечённо строить компиляторы типа MC2b.v5, когда бэйсик-программа, может лишь частично выполняться интерпретатором ПЗУ и в полной мере проявлять себя ТОЛЬКО в скомпилироанном виде.
Здесь, на мой взгляд, теряется очень важная фишка - возможность отладки программы. В этом случае выигрыш лишь в том, что программа быстро набирается и подходит лишь тем, которые отлично знают, ЧТО делает каждый оператор в тексте и КАК он будет сформирован в RAM. Это некий переходный вариант бэйсик-ассемблер.
Своими вставками немного напоминает Пакет машиннокодовых процедур SUPERCODE/NEW SUPERCODE (авторы F.Vachha & V.Rumsey) [http://grands.land.ru/tzxutils.htm], когда программа на бэйсике обращается в оперативку, запуская фрагменты кода, заранее выполненного на ассемблере. Таким образом, в бэйсик-программе возникают новейшие операторы, например, по выводу спрайтов и т.д. Можно скомпилировать сей гибрид программой MCoder-2, но придется вести расчёты, чтобы расположить полученный код впритык к библиотекам SUPERCODE. Тот ещё гемор.
В книге Капульцевичей говорилось, что программы по стилю написания в конечном счете уже не похожи на обычные для спектрум-бэйсика, они пишутся так, как этого желает компилятор. Програмер ограничивает себя в сладком.
Так что остается вариант компилятора, когда в бэйсик можно вставлять мнемоники асма (вместо числовых значений) и забирать/передавать этим кускам кода данные.
Учитывая некоторый момент, что на Спеке, надеюсь, всё же возникнет какая-то графическая ОС, следует помечтать о каком-то отдельном редакторе, в котором присутствуют хотя бы ассемблер и сокращенный бэйсик, а прога компилится с учетом API самой системы (вывод музыки, текста, спрайтов). Тогда програмер уже не станет заботиться об оперативке, либо о том, как и где разместить музыку/спрайты.
Но это уже другой разговор о том, остановиться ли на бэйсике, либо использовать Си/Паскаль.
Ну с Си мы уже всё решили, да?
Pascal или Basic?
;))))))))))
_____________
У меня же в STC-1 была мечта прикрутить асм, но на словарь мнемоник ушло бы много оперативки. Посчитал скока выйдет, опечалился и забросил идею.
Программа представляет собой текстовый редактор, который поделен на две части. Поделены условно, поскольку на экране лишь какая-то одна.
В одной части происходит редактирование бэйсик-программы. В другой, редактирование (по желанию) ассемблерного текста операторов, этот бэйсик составляющих. Библиотеки текстов асма грузятся вместе с редактором. Вся кухня напоминает макроассемблер. Только в макроасме сложно реализовать FOR-NEXT, а здесь, этим занимается сама програмуля. В ходе трансляции, программа читает оператор, лезет в текст асма, его составляющий, компилит встроенным ассемблером, ставит значение, идёт к следующему. Таким образом, всё сводится к умелому жонглированию асм-текстов. Вот такой был план.
Начинающему, не составит сложность набрать програмулю, а для кодера перешедшего на асм, это быстрый набор листинга.
Новые операторы можно составлять самостоятельно, в том числе по управлению спрайтами и т.п.

null_device
09.01.2010, 19:01
..Из примера чётко видно, что интерпретация вышеуказанной программы средствами spectrum-basic невозможна. Компилятор MCoder-2 "привинчивает" к бэйсику дополнения, которые могут выполняться только в скомпилированном коде..

Это, т.с. издержки производства.. как невозможность задать переход с параметром (GOTO n, GOSUB n), иная логика работы команды RND после компиляции (об этом написано в фирменном мануале на MCoder2), и пр. ограничения накладываемые любым компилятором.:v2_cry:


..Программа представляет собой текстовый редактор, который поделен на две части. Поделены условно, поскольку на экране лишь какая-то одна..
Звучит заманчиво.. Идея двухпанельного редактора с компилятором-интерпретатором. Ждем развития и реализации в готовом коде.:v2_thumb:

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

Vovoi
10.01.2010, 00:52
>Компилятор на спектрумe на мой взгляд обречен как вид.
Если считать, что МЫ последние, кто занимается Speccy, то да, нам он по большей части не нужен. Если помечтать и прикинуть, что у молодёжи вдруг возникнет желание программировать на Спектруме, то компилятор будет промежуточным звеном между бэйсиком и асмом. Будем считать, что молодёжь сразу ринется в ассемблер.

null_device
10.01.2010, 01:23
Дык, если обратиться к различным макулатурным источникам, выяснится, что компилятор советуют использовать там, где нехватает скорости интерпритатора (а скорее, знания машинно-кодовых процедур). Т.е. он призван служить посредником при переводе текстов с языков высокого уровня на уровень объектного кода. А если и его не хватает - осваивайте ассемблер..

Если уж супер-компилятору на спектруме и быть, то оптимизировать надо с двух концов: быстродействие и объем конечного кода. При этом не стараться присобачить к обычной компиляции бейсика всякие навороты, типа исполнения машинно-кодовых процедур в теле бейсик-файла и пр. шняги. Но честно обрабатывать максимум бейсик команд. И наверное использовать возможности 128К машинки на полную мощь (при компиляции basic программа и компилятор в доп страницах), например, чтобы использовать всю верхнюю память от ramtop и до 65535. Тогда, может и народ активнее потянется.

А-то получается, пока, одни вырезают дом в скале - другие строят конуру из ж\б блоков.

ALKO
12.01.2010, 15:35
null_device та прога,которую вы скинули грузится как Bytes
без BASIC-вступления.
а вот по какому адресу запускать ее и перед загрузкой нужно сделать CLEAR памяти опять таки я не знаю по какому адресу.

Vovoi
12.01.2010, 23:19
та прога,которую вы скинули грузится как Bytes
без BASIC-вступления.
Перезакидываю разжёванное.
Тут два варианта *.TAP и *.TRD, что понравится. Скачаешь, переименуй в EXE, это самораспаковка - на выходе каталог и 2 файла. Скачай UnrealSpeccy 0.36.7 by SMT и по [F3] откроешь любой файл из архива.

В "Спектруме" лучше перейти в режим 48к. Затем запустить TR-DOS (сначала посмотришь механизм, потом уже повозись с *.tap).
В TR-DOS грузи бэйсик прогу mc26.B, она сама подгрузит компилятор. После чего снова лезешь в диск и запустишь "свою" прогу, что я положил :)

зы:
Адрес компиляции выбираешь сам от 3е4 до 59е3. Ниже - бейсик не влезет, выше - дно самого компилятора. Вот такие неприятности. Многое можно обойти, но следует прочитать полные руководства в книгах на сайте.
;(

null_device
13.01.2010, 02:15
null_device та прога,которую вы скинули грузится как Bytes
без BASIC-вступления.
а вот по какому адресу запускать ее и перед загрузкой нужно сделать CLEAR памяти опять таки я не знаю по какому адресу.

Запускается компилятор как и его предок с адреса 60000. Базовая информация: http://trd.speccy.cz/book/DIALECT.ZIP (раздел компиляторы). Дополнительная в архиве:http://zx.pk.ru/attachment.php?attachmentid=15315&d=1262794333 (файл MC2B_V5.TXT).

---------- Post added at 06:15 ---------- Previous post was at 05:23 ----------

Архив выложен as is, в таком виде он лежал для скачивания. И лично для меня отсутствие бейсик загрузчика не является проблемой - команду clear n можно ввести самому. Есть, правда в использовании им одна тонкость - при компиляции обратите внимание: адрес запуска скомпилированной программы и ramtop совпадают.. т.е данной командой, фактически задается адрес начала вашей программы.

---------- Post added at хх:хх ---------- Previous post was at хх:хх ----------

Также после компиляции фукция rnd будет выдавать несколько иные значения (см. zx_compiler, ибо mcoder написан на его основе), а также невозможность трассировки с диска в память программы со строкой №0.