Скрипты-86РК / Апогей / Северная Пальмира

Советский компьютер Радио-86РК (1986) и его клоны

Moderator: Shaos

User avatar
Alikberov
Doomed
Posts: 367
Joined: 14 Oct 2019 18:10
Location: Tashkent

Скрипты-86РК

Post by Alikberov »

Доработал оболочку и расширил функционал:
  • «F1»/«F2»/«F3» - Переключение между листингами
  • «F4» - Трансляция и запуск активного листинга
  • «УС+S» - Сохранение активного листинга/буфера в файл
  • «УС+O» - Загрузка буфера листинга из файла в память
  • «УС+P» - Установка атрибута цвета фона (90-BF)
  • «УС+Q» - Установка атрибута цвета текста (80-AF)
  • Запуск - «G5DA»
  • Ячейка «0617» - атрибут цвета активной области редактирования.
В качестве демонстрации, ниже представляю несколько файлов.
Сначала загружаем и запускаем сам «SCRIPT86», а затем клавишами «CTRL+O» подгружаем «PITON» и «BEEP».
Теперь можно проверить:
  1. По «F2» и «F4» запускается «Питон» - почти Журнальный вариант
  2. По «F3» и «F4» запустится мой полифонический цикл
P.S.: Также, исправил один глюк.
You do not have the required permissions to view the files attached to this post.
User avatar
Alikberov
Doomed
Posts: 367
Joined: 14 Oct 2019 18:10
Location: Tashkent

Скрипты-86РК / Апогей

Post by Alikberov »

Внёс мелкие правки и доработки.
Адаптировал под Апогей. :idea:
You do not have the required permissions to view the files attached to this post.
User avatar
Alikberov
Doomed
Posts: 367
Joined: 14 Oct 2019 18:10
Location: Tashkent

Скрипты-86РК / Апогей / Свереная Пальмира

Post by Alikberov »

Адаптировал свой код под Северную Пальмиру :idea:
You do not have the required permissions to view the files attached to this post.
User avatar
Alikberov
Doomed
Posts: 367
Joined: 14 Oct 2019 18:10
Location: Tashkent

Скрипты-86РК / Апогей / Северная Пальмира

Post by Alikberov »

Синтаксис языка псевдо-скриптов достаточно прост и в основном состоит из символического представления шестнадцатеричного машинного кода, позволяя кодировать программный код как есть - дампом в текстовой записи.
Главное отличие от голого дампа - небольшой синтаксический сахар, позволяющий использовать:
  1. Блочную структуру с условно неограниченной глубиной вложений
  2. Метки (в ограниченном количестве)
  3. Условную трансляцию и динамическое исполнение кода в трансляторе
  4. Поддержка бинарных данных (для кодирования знакогенератора)
  5. Подобие переменных среды конкретной платформы
Блоки ограничиваются символами «[» («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.