Фрагмент описания 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, а здесь, этим занимается сама програмуля. В ходе трансляции, программа читает оператор, лезет в текст асма, его составляющий, компилит встроенным ассемблером, ставит значение, идёт к следующему. Таким образом, всё сводится к умелому жонглированию асм-текстов. Вот такой был план.
Начинающему, не составит сложность набрать програмулю, а для кодера перешедшего на асм, это быстрый набор листинга.
Новые операторы можно составлять самостоятельно, в том числе по управлению спрайтами и т.п.