Скрипты-86РК

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

Moderator: Shaos

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

Скрипты-86РК

Post by Alikberov »

Этой темой я заинтересовался относительно недавно.
Оглядываясь на такие экзотические скриптовые языки, как PERL и RUBY, которые раньше всюду управляли интернет сайтами, я подумал, а не разработать ли нечто подобное и для РАДИО-86РК?
Если в Windows и Linux пакетные файлы описываются как Batch и Bash, синтаксис которых своеобразен, почему бы и на РАДИО-86РК не описывать файлы автоматизации на каком-то своём синтаксисе?

Главное условие - компактность интерпретатора/парсера/транслятора.
Если в машинный код внедрить в синтаксис скрипта, можно существенно сэкономить на размере.

Но, те, кто когда-нибудь программировал в машинном коде, помнит, что ручная адресация всяческих условных и безусловных переходов - настоящая головная боль.
Потому - обязательна поддержка меток.

Ниже я представляю экспериментальную среду для редактирования и запуска скрипта.
В качестве демонстрации я описал там сценарий-затравку для игры «Питон».

Синтаксис прост.
  • Каждый байт транслируется в конечный код как есть
  • Каждое слово транслируется в конечный код как есть
  • Буквы «G-Z» адресуют область переменных/меток (ячейки 7640-767F Монитора)
  • Символ «@» используеся для чтения из ячейки переменной/метки
  • Символами «[» и «]» экранируется блок
  • Символ «:» адресует текущий адрес кода для метки
  • Строчные комментарии отделяются как в ассемблере - через «;»

Code: Select all

;;;;;;;;;;;;;
; SCRIPT-86RK
;;;;;;;;;;;;;
F803K F81BI                     ; LET K=F803,I=F81B
F809S F818T                     ; LET S=F809,T=F818
F821Z                           ; LET Z=F821

:G 21                           ; LXI H,"***ПИТОН***"
[0D 0A "***ПИТОН***" 0A 00]
CD T@                           ; CALL TEXT

:W 21                           ; LXI H,"НАЖМИТЕ <ВК>"
[0D 07 "НАЖМИТЕ <ВК>" 00]
CD T@                           ; CALL TEXT
CD K@                           ; CALL KEY
FE 1B C8                        ; IF KEY==ESC THEN RETURN
FE 0D C2 W@                     ; IF KEY<>13 THEN GOTO W
You do not have the required permissions to view the files attached to this post.