PDA

Просмотр полной версии : Концептуальная доработка функции USR У Бейсиков



Alikberov
28.08.2023, 01:09
Как известно, функция «USR(адрес)» вызывается пользовательский код, находящийся по указанному адресу, предварительно записанному в память, например, операторами DATA/READ/FOR/POKE/NEXT.
Как-то задумался над вопросом, чтобы добавить модификацию функции - «USR("строка" или строковая_переменная$)», которая могла бы сама транслировать/запускать псевдо-код, тело которого хранится прямо в строке.
Типа, «DEF FN MY(X) = USR("21 D0 76 3E 4E [[ 36 XX 23 3D C2 +0 ]]")» будет всякий раз при обращении «FN MY(код)» заполнять верхнюю строку экрана…
Здесь «[[» и «]]» открывают/закрывают тело блока операций, а интервал +0…+9 вставляет ссылку на начало n-го блока (+0 - текущий блок, +1 - блок на 1 уровень выше и т.д.)

Чтобы не быть голословным, ниже - сам набросок транслятора кода и скриншоты.

Alikberov
28.08.2023, 14:08
Листинг представляет собою расширенный шестнадцатеричный дамп машинных кодов, в
котором можно частично использовать механизмы блочного программирования.

Пример #1

«21[ "HELLO, WORLD" 00 ] CD 18 F8 C3 6C F8»

Здесь:

Конструкция «[ … ]» формирует блок инструкций или таблицы
Код «21» команды «LXI H» непосредственно перед «[» помещает адрес блока в HL


Пример #2

«21 D0 76 0E 4E [ 36 17 23 0D C2] C3 6C F8»
«21 D0 76 0E 4E [ 36 17 23 0D C2 +0] C3 6C F8»
«21 D0 76 0E 4E [ 36 17 23 0D CA -0 C3] C3 6C F8»

Здесь:

Код «C2» команды «JNZ» непосредственно перед «]» организует цикл в блоке
Код «С2» с величиной «+0» означает условный переход на блок текущего уровня
Код «CA» с величиной «-0» означает условный выход из блока текущего уровня


Пример #3

«[ CD 03 F8 FE 20 CA -0 4F FE 0D CA[ 0E 07 ] CD 09 F8 C3] C3 6C F8»

Здесь:

Код «CA» команды «JZ» и непосредственно «[» организует условный блок


Пример #4

«2A X1 22 Y»

Здесь:

Символы «G…Z» адресуют область ОЗУ под переменные
Каждая переменная занимает 10 ячеек памяти
Цифра за буквой определяет индексное смещение относительно адреса переменной


Ниже - архив с самим транслятором и скриншот с примером трансляции листинга недо-Питона в исполняемый код.