Скрипты-86РК

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

Moderator: Shaos

User avatar
Alikberov
Doomed
Posts: 358
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.
User avatar
Alikberov
Doomed
Posts: 358
Joined: 14 Oct 2019 18:10
Location: Tashkent

Re: Скрипты-86РК

Post by Alikberov »

Вложенные блоки позволяют полностью или частично отказаться от использования многочисленных меток.
Иными словами, вместо «GOTO» теперь можно использовать аналоги «BREAK» и «CONTINUE» с указанием конкретного уровня вложенности.

Для доступа к стеку блоков введена специальная операция - «точка» («.»), которая возвращает адрес стека трансляции.
  • « 0.» эквивалентно « .», «00.» или «0000.»
  • « 1.» эквивалентно « .++», «00.++» или «0000.++»
  • « 2.» эквивалентно « .++++», « 1.++» или «01.++»
Полученный адрес нужно использовать как ссылку на конкретный блок:
  • « 0.@» или « .@» возвращает адрес точки выхода из текущего блока («BREAK»)
  • « 0.@+++» или « .@+++» возвращает адрес входа в текущий блок («CONTINUE»)
  • « 1.@» или «01.@» возвращает адрес точки выхода из блока уровнем выше
  • « 1.@+++» или «01.@+++» возвращает адрес входа в блок уровнем выше
Вот иллюстрация управления иерархией:

Code: Select all

C3:[                             ; Родительский блок (безусловный)
    FE 01                        ; <---------------------------------+
    CA:[                         ; Дочерний блок (условие JZ)        |
        FE 02                    ; <-------------------------------+ |
        D2:[                     ; Внучатый блок (условие JNC)     | |
            FE 03                ; <-----------------------------+ | |
            DA                   ; По условию JC                 | | |
            .@+++                ; повторить текущий блок -------+ | |
            E2                   ; По условию JPO                  | |
            1.@+++               ; повторить дочерний блок --------+ |
            EA                   ; По условие JPE                    |
            2.@+++               ; повторить родительский блок ------+
            F2                   ; По условию JP
            2.@                  ; покинуть родительский блок -------+
            FA                   ; По условию JM                     |
            1.@                  ; покинуть дочерний блок ---------+ |
        :]                       ; Закрываем блок в стеке          | |
    :]                           ; Закрываем блок в стеке          | |
    00                           ; <-------------------------------+ |
:]                               ; Закрываем блок в стеке            |
00                               ; <---------------------------------+
P.S.: Код специально разрабатывался для интеграции с моим редактором «ПОБЕДИТ».
(Сам код парсера 0003-00FF - всего 253 байта и с лёгкостью уместится в любое ПЗУ. Например, если F86C-F98F полностью вычистить от CLI и адаптировать под вызов ПОБЕДИТа по Сбросу, вместо директив Монитора можно запускать подобные скрипты.)
You do not have the required permissions to view the files attached to this post.
DmitryMilk
Writer
Posts: 11
Joined: 12 May 2025 21:56

Re: Скрипты-86РК

Post by DmitryMilk »

Не пробовал взглянуть в сторону форта? Может быть даже готовые среды есть (правда для форта "готовые" понятие растяжимое, разной степени наполненности), я в 90-х запускал какой-то форт на Специалисте побаловаться.

Наверное будет пошустрее, чем трансляторы байткода, особенно если шитый код удачно реализовать. А если без всяких плавучек, то и по памяти может получиться очень даже демократично.
User avatar
Alikberov
Doomed
Posts: 358
Joined: 14 Oct 2019 18:10
Location: Tashkent

Скрипты-86РК

Post by Alikberov »

DmitryMilk wrote: 08 Jul 2025 07:16 Не пробовал взглянуть в сторону форта?
Форт не вместится в ПЗУ с Монитором. :roll:
Отсюда и ограничение в ~256 байтов.

В принципе, этим скриптом Форт описать можно, думаю, если плотно описать на одном экране.

P.S.: Кажется, здесь Фортом уже занимались. :idea:
Интегрировать Форт в Монитор - сложнее, чем кажется.
Last edited by Alikberov on 08 Jul 2025 07:33, edited 1 time in total.
b2m
Devil
Posts: 909
Joined: 26 May 2003 06:57

Re: Скрипты-86РК

Post by b2m »

Самый маленький форт для 86РК - это форт шихова, вот тут про него: viewtopic.php?p=154475#p154475
Но даже он целых 2Кб.

Есть ещё такое esoteric forth, но оно для x86. Хотя принцип интересный.
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/
imsushka
Maniac
Posts: 243
Joined: 01 Jan 2022 04:34
Location: USSR, Tashkent

Re: Скрипты-86РК

Post by imsushka »

для форта надо 15 базовых команд
256 байт должно поместицца

https://habr.com/ru/articles/523348/