Синтаксис языка псевдо-скриптов достаточно прост и в основном состоит из символического представления шестнадцатеричного машинного кода, позволяя кодировать программный код как есть - дампом в текстовой записи.
Главное отличие от
голого дампа - небольшой
синтаксический сахар, позволяющий использовать:
- Блочную структуру с условно неограниченной глубиной вложений
- Метки (в ограниченном количестве)
- Условную трансляцию и динамическое исполнение кода в трансляторе
- Поддержка бинарных данных (для кодирования знакогенератора)
- Подобие переменных среды конкретной платформы
Блоки ограничиваются символами «[» («BEGIN»), «]» («END») и «!» («ELSE»).
Перед открывающим блоком «[» («BEGIN»)
обязателен код любой трёхбайтовой инструкции - «C3» («JMP»), «CD» («CALL»), «21» («LXI») и прочих.
Для доступа к стеку блочной иерархии и передачи управления между блоками необходимо использовать символ «$» с указанием уровня «n$» вложенности «1$»…«9$» и получением указателя на выход из блока («BREAK»). Чтобы скорректировать указатель на начало указанного блока («CONTINUE»), инструкцию следует дополнить многоточием «n$...».
Метки определяются одним символом с предшествующей константой или символом двоеточия «:» (как в Batch-файлах MS-DOS). Количество меток ограничено символами латинского алфавита «G»…«Z», но допускается использования и символов Кириллицы (на свой страх и риск, так как высока вероятность пересечения с областью стека).
Вместе с метками можно использовать или определить
переменные среды:
- Псевдопеременная «\» - аналог псевдооператора «ORG», задающего начальный адрес трансляции
- Псевдопеременная «^» задаёт стартовый адрес для запуска итогового кода трансляции
Динамическое исполнение кода в ходе трансляции позволило существенно сократить код самого транслятора и предоставить возможность производить вычисления любой сложности.
Следует помнить, что аналогично функции «EVAL» в любых других языках, использовать подобные врезки без соблюдения элементарных правил корректного кодостроения может привести к зависанию транслятора или повреждения данных в ОЗУ.
Фрагменты
кода динамического исполнения экранируются обычными скобками «(…)» и должны возвращать результат в регистровой паре HL, а в регистре D - количество тетрад из HL для записи в итоговый код.
При этом, допускаются блочные вложения и все другие конструкции, поддерживаемые транслятором.
Бинарный формат данных имеет специфическое представление в силу максимальной простоты парсера.
Code: Select all
0-+-+-+-+ ; 0b01010101
0+-+-+-+- ; 0b10101010
Переменные среды являются значительной составляющей частью синтаксиса, позволяющей писать практически кроссплатформенные скрипты.
При грамотном их использовании появляется возможность запускать один скрипт без переделки и адаптации на разных платформах: «РАДИО-86РК», «АПОГЕЙ», «ПАЛЬМИРА» и т.п.
- «0@» - адрес самой первой ячейки экранной памяти: 76D0h
- «1@» - адрес домашней ячейки экранной памяти: 77C2h
- «2@» - адрес рабочих ячеек Монитора с адресом под курсором: 7600h
- «3@» - адрес ИМС К580ВИ53
- «4@» - резерв
- «5@» - адрес ИМС К580ВВ55 клавиатуры: 8000h
- «6@» - адрес ИМС К580ВВ55 периферии: A000h
- «7@» - адрес ИМС К580ВГ75: C000h
- «8@» - адрес ИМС К580ВТ57: E000h
- «9@» - адрес самой нижней ячейки активной экранной области: 7F12h
- «'A'@» или «A@» - подпрограммы чтения клавиатуры: F803h или F81Bh
- «'B'@» или «B@» - подпрограммы опроса буфера экрана или клавиатуры: F821h или F812h
- «'C'@» или «C@» - подпрограммы печати символа, байта или слова: F809h или F815h
- «'D'@» или «D@» - подпрограммы вывода на дисплей: F818h через HL или PC
- «'E'@» или «E@» - подпрограммы установки и чтения позиции курсора: «CUR L,H» или F81Eh
- «'F'@» или «F@» - резерв
- «'T'@» - управление шириной табуляции
- «'V'@» - индекс версии текущей среды скрипта
- «'X'@» - возврат обратно в среду
Особенности обращения к API заключаются в добавлении многоточия, если нужно вызвать конкретную подпрограмму из перечисления.
- «A@» обращается к подпрограмме чтения клавиши с ожиданием: F803h
- «A@...» обращается к подпрограмме чтения клавиши без ожидания: F81Bh
- «B@» обращается к подпрограмме чтения экрана в позиции курсора: F821h
- «B@...» обращается к подпрограмме опроса статуса клавиатуры: F812h
- «C@» обращается к подпрограмме вывода символа на экран: F809h
- «C@...» обращается к подпрограмме вывода байта на экран: F815h
- «C@......» обращается к подпрограмме вывода слова HL на экран: F815h
- «D@» обращается к подпрограмме вывода сообщения по HL экран: F818h
- «D@...» обращается к подпрограмме вывода сообщения по PC экран: F818h
- «E@» обращается к подпрограмме установки относительной позиции курсора по HL
- «E@...» обращается к подпрограмме установки относительной позиции курсора по PC
- «E@......» обращается к подпрограмме чтения позиции курсора: F81Eh
You do not have the required permissions to view the files attached to this post.