Просмотр полной версии : Скрипты-86РК
Alikberov
07.07.2025, 21:00
Этой темой я заинтересовался относительно недавно.
Оглядываясь на такие экзотические скриптовые языки, как PERL и RUBY, которые раньше всюду управляли интернет сайтами, я подумал, а не разработать ли нечто подобное и для РАДИО-86РК?
Если в Windows и Linux пакетные файлы описываются как Batch и Bash, синтаксис которых своеобразен, почему бы и на РАДИО-86РК не описывать файлы автоматизации на каком-то своём синтаксисе?
Главное условие - компактность интерпретатора/парсера/транслятора.
Если в машинный код внедрить в синтаксис скрипта, можно существенно сэкономить на размере.
Но, те, кто когда-нибудь программировал в машинном коде, помнит, что ручная адресация всяческих условных и безусловных переходов - настоящая головная боль.
Потому - обязательна поддержка меток.
Ниже я представляю экспериментальную среду для редактирования и запуска скрипта.
В качестве демонстрации я описал там сценарий-затравку для игры «Питон».
Синтаксис прост.
Каждый байт транслируется в конечный код как есть
Каждое слово транслируется в конечный код как есть
Буквы «G-Z» адресуют область переменных/меток (ячейки 7640-767F Монитора)
Символ «@» используеся для чтения из ячейки переменной/метки
Символами «[» и «]» экранируется блок
Символ «:» адресует текущий адрес кода для метки
Строчные комментарии отделяются как в ассемблере - через «;»
;;;;;;;;;;;;;
; 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
Alikberov
09.07.2025, 16:00
Вложенные блоки позволяют полностью или частично отказаться от использования многочисленных меток.
Иными словами, вместо «GOTO» теперь можно использовать аналоги «BREAK» и «CONTINUE» с указанием конкретного уровня вложенности.
Для доступа к стеку блоков введена специальная операция - «точка» («$»), которая возвращает адрес стека трансляции.
« 1$» возвращает адрес выхода из блока текущего уровня вложенности («BREAK»)
« 2$» возвращает адрес выхода из блока уровня вложенности выше
« 1$...» возвращает адрес повторного входа в блок уровня («CONTINUE»)
Также, добавлены операционные псевдопеременные:
«\» определяет адрес трансляции
«^» определяет стартовый адрес
Вот иллюстрация управления иерархией:
1100\ ; Аналог ORG 1100H
1100^ ; Адрес пуска программы
C3[ ; Родительский блок (безусловный)
FE 01 ; <---------------------------------+
CA[ ; Дочерний блок (условие JZ) |
FE 02 ; <-------------------------------+ |
D2[ ; Внучатый блок (условие JNC) | |
FE 03 ; <-----------------------------+ | |
DA ; По условию JC | | |
1$... ; повторить текущий блок -------+ | |
E2 ; По условию JPO | |
2$... ; повторить дочерний блок --------+ |
EA ; По условие JPE |
3$... ; повторить родительский блок ------+
F2 ; По условию JP
3$ ; покинуть родительский блок -------+
FA ; По условию JM |
2$ ; покинуть дочерний блок ---------+ |
] ; Закрываем блок в стеке | |
] ; Закрываем блок в стеке | |
00 ; <-------------------------------+ |
] ; Закрываем блок в стеке |
00 ; <---------------------------------+
Демонстрационный редактор доработан:
Комбинация «Забой»+«F2» - удаляет помеченный символ
Комбинация «ТАБ»+«F2» может помочь зарезервировать позиции под вставку символов
Но над его функционалом работы не ведутся, так как персер специально разрабатывается для интеграции с моим редактором «ПОБЕДИТ (https://zx-pk.ru/threads/35028-tekstovyj-redaktor-dlya-rlk-s-unwrap-rezhimom.html)» в перспективе.
P.S.: Основной код парсера 0100-01FF - с лёгкостью уместится в любое ПЗУ.
(Второй вариант поддерживает конструкцию «IF-THEN-ELSE»: Спасибо b2m (https://zx-pk.ru/members/3501-b2m.html)!')
Так можно же просто использовать язык Forth. Для Радио-86РК он есть.
Alikberov
10.07.2025, 17:17
Так можно же просто использовать язык Forth. Для Радио-86РК он есть.Ну, на Forth пишутся программы, а конкретно эта тема - про скрипты.:v2_dizzy_fisher:
Тем не менее, представляю Вам свой вариант недо-среды недо-разработки (запуск по «G644»).
«1000-10FF» - справочный лист клавиши «F1»
«2000-2FFF» - листинг скрипта клавиши «F2»
«3000-75FF» - листинг скрипта клавиши «F3»
Как можно заметить, адреса «1100-1FFF» зарезервированы под классическую трансляцию.
Потому, текст основного буфера (справочного листа) не рекомендуется править!
Тем самым, под трансляцию кода доступны три региона:
«0000-0643» - 1604 байта
«1100-1FFF» - 3840 байтов
«4000-74FF» - до 13568 байтов, в зависимости от размера скрипта #3
Естественно, загрузка/выгрузка буферов клавишами не предусмотрена, так как стремился достичь самого минимума, но достаточного для разработки.
То есть, вполне можно наскриптить код загрузки и выгрузки листингов.
P.S.: Это как бы первый пример практического применения редактора «ПобЭдит (https://zx-pk.ru/threads/35028-tekstovyj-redaktor-dlya-rlk-s-unwrap-rezhimom.html)».
Alikberov
12.07.2025, 20:00
Доработал оболочку и расширил функционал:
«F1»/«F2»/«F3» - Переключение между листингами
«F4» - Трансляция и запуск активного листинга
«УС+S» - Сохранение активного листинга/буфера в файл
«УС+O» - Загрузка буфера листинга из файла в память
«УС+P» - Установка атрибута цвета фона (90-BF)
«УС+Q» - Установка атрибута цвета текста (80-AF)
Запуск - «G5DA»
Ячейка «0617» - атрибут цвета активной области редактирования.
В качестве демонстрации, ниже представляю несколько файлов.
Сначала загружаем и запускаем сам «SCRIPT86», а затем клавишами «CTRL+O» подгружаем «PITON» и «BEEP».
Теперь можно проверить:
По «F2» и «F4» запускается «Питон» - почти Журнальный вариант (http://archive.radio.ru/web/1987/04/v021/)
По «F3» и «F4» запустится мой полифонический цикл из моего редактора (https://zx-pk.ru/threads/35453-polifonicheskaya-muzyka-na-radio-86rk.html?p=1192650&viewfull=1#post1192650)
P.S.: Теперь гораздо легче разрабатывать непосредственно машинным кодом, без избыточной синтаксической нагрузки Ассемблерных мнемоник. :v2_dizzy_roll:
И частично решил концепт USR-вызовов (https://zx-pk.ru/threads/35255-kontseptualnaya-dorabotka-funktsii-usr-u-bejsikov.html).
Alikberov
17.07.2025, 21:00
Внёс мелкие правки и доработки.
Адаптировал под Апогей.:v2_dizzy_fisher:
Alikberov
19.07.2025, 19:00
Адаптировал свой код под Северную Пальмиру (https://zx-pk.ru/threads/34881-severnaya-palmira.html):v2_dizzy_punk:
В общем то вопрос. Есть какая подпрограмма или скрипт, которые к бинарнику добавляют заголовок ну и все остальное, чтобы загрузить потом его в эмулятор? Для "Специалиста" нашел, для РК если и есть, то похоронено в глубинах форума где-то, по крайней мере я не нашел. Спасибо.
Alikberov
27.07.2025, 15:00
Синтаксис языка псевдо-скриптов достаточно прост и в основном состоит из символического представления шестнадцатеричного машинного кода, позволяя кодировать программный код как есть - дампом в текстовой записи.
Главное отличие от голого дампа - небольшой синтаксический сахар, позволяющий использовать:
Блочную структуру с условно неограниченной глубиной вложений
Метки (в ограниченном количестве)
Условную трансляцию и динамическое исполнение кода в трансляторе
Поддержка бинарных данных (для кодирования знакогенератора)
Подобие переменных среды конкретной платформы
Блоки ограничиваются символами «[» («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 для записи в итоговый код.
При этом, допускаются блочные вложения и все другие конструкции, поддерживаемые транслятором.
Бинарный формат данных имеет специфическое представление в силу максимальной простоты парсера.
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
P.S.: Хочу выразить отдельную благодарность Ведущему Специалисту (https://zx-pk.ru/member.php?u=9348): Северная Пальмира (https://zx-pk.ru/threads/34881-severnaya-palmira.html) достаточно приятная машина.
А может ну его нафиг эти подпрограммы из ПЗУ? Может их лучше свои использовать? Тогда получится очень юзабельно.
В конце подпрограмм можно поднимать или сбрасывать флаг Z в зависимости от результата, тогда получим все возможные условия и альтернативы.
Alikberov
27.07.2025, 22:13
А может ну его нафиг эти подпрограммы из ПЗУ? Может их лучше свои использовать? Тогда получится очень юзабельно.
В конце подпрограмм можно поднимать или сбрасывать флаг Z в зависимости от результата, тогда получим все возможные условия и альтернативы.Я просто указал F818h/F815h/F809h для понятности по стандарту. А на самом у меня и так основная часть подпрограмм - своя. Иначе как в тексте табуляцию отобразить и коды атрибутов прямо в экран вставить?
У меня есть своя альтернативная подпрограмма F809 из собственного Монитора с поддержкой вьюпортов/оконности на РАДИО-86РК.
Предлагаете её использовать? Тогда пропадёт совместимость с Пальмирой и Апогеем.
Alikberov
30.07.2025, 14:00
Работает на этой версии (https://zx-pk.ru/threads/36274-skripty-86rk.html?p=1216738&viewfull=1#post1216738).
Поддерживает управление клавиатурой и световым пером.
Alikberov
31.07.2025, 22:00
Подводя итоги уходящего месяца, представляю ниже архивы с демонстрациями.
На данный момент всё работает достаточно стабильно.
В архиве имеется несколько демонстрационных программ:
«ПИТОН» - Практически идентичная адаптация оригинальной игровой программы
«БОМБА» - Попытка ремейка оригинальной игровой программы ПЭВМ «Согдиана-2», с которой и началось моё знакомство с ЭВТ
«Чёрная Дыра» - Моя собственная игровая фантазия в качестве тренировки и наработки навыков скриптинга
«Version» - Простая крошечная демонстрация получения переменных среды для работы с вызовами API
Причём, «Бомба» и «ЧД» поддерживают управление как клавиатурой, так и световым пером - мышкой в эмуляторе.
Правда, имеются некоторые проблемы с цветом на Апогее в игре «БОМБА» из-за схематических отличий видеоузла.
Сначала грузите и запускаете файл самого скриптера - «SCRIPTER.RK?», в зависимости от платформы.
В редакторе, используя комбинацию клавиш «УС+O» загружаем любой файл - «VERSION.RK», «PITON.RK», «SCHWARZ.RK», «DER_BOMB.RK».
А затем комбинацией «УС+R» запускаем загруженный скрипт на исполнения.
P.S.: Текущая версия скриптера - 2507h, что соответствует 2025/07 и данная версия больше дорабатываться не будет.
Shumadan
31.07.2025, 22:15
на Микрошу можно адаптировать?
Alikberov
31.07.2025, 22:31
на Микрошу можно адаптировать?В принципе - легко.
Пока поддерживаются самые ходовые модели - Апогей БК-01 и Северная Пальмира.
Alikberov
02.08.2025, 00:00
Записал небольшое видео работы этого редактора и транслятора.
https://youtu.be/Q1MipiDqclM
Alikberov
06.08.2025, 00:00
На данный момент ведётся адаптация под КР-04 (https://zx-pk.ru/threads/23521-elektronika-kr-04.html).
Сейчас занимаюсь самым вкусным элементом КР-04 - переключаемым знакогенератором.:v2_dizzy_roll:
Alikberov
31.08.2025, 22:00
Спустя ровно месяц активной отладки и адаптации, представляю Вашему вниманию версию 2025v08 с поддержкой нескольких платформ:
РАДИО-86РК
Апогей БК-01
Электроника КР-04
Северная Пальмира
http://www.youtube.com/watch?v=PxvS6P700AI
Хотя на данный момент оболочка работает с файлами только на уровне вызовов подпрограмм обмена с магнитной лентой, при использовании эмулятора формат всех листингов представляется в обычных TXT-файлах с кодированием Кириллицы в UTF, что позволяет открывать и редактировать листинги обыкновенным Блокнотом.
Причём, при попытке загрузки этих TXT-файлов в «Микроше», «Партнёре-01.01» и «Радио-86РК» директивой I Монитора, на экране отобразится их заголовок с названием самого скрипта внутри.
Следует учитывать, что нельзя трогать заголовки файлов и иероглифы «情» в тексте, которыми кодируются ключевые синхробайты E6.
Чтобы загрузить TXT-файл в ОЗУ целиком, следует загрузить/запустить оболочку скриптера на целевой платформе и клавишами «УС+O» открыть любой файл листинга:
«ANACONDA.TXT» - разновидность игры «ПИТОН»
«DER_BOMB.TXT» - разновидность игры «ARKANOID» (в Emu80 можно управлять мышью)
«ROBOTS.TXT» - набросок для игры «Взбесившиеся Роботы»
«SCHWARZ.TXT» - моя авторская фантазия на тему «Излучения Хокинга» горизонтом событий Коллапсара (в Emu80 можно управлять мышью)
«VERSION.TXT» - файл с выдачей всех переменных среды с описанием всех ключевых ресурсов платформы
Конкретно для «КР-04» имеется два отдельных файла:
«FNTLDR.RK4» - подгружает восемь разных шрифтов перед запуском скриптера: Сперва просто загружается «SCRIPTER.RK4», затем загружается «FNTLDR.RK4» и запускается директивой «G3F00»
«FONTEKST.TXT» загружается в скриптер клавишами «УС+O»
На экране просто отобразится набор шрифтов.
Файл «MAN.TXT» также загружается скриптером и открывается Блокнотом.
К сожалению, долгие циклы разработки парсера и его отладки заняли практически всё время, а на описание справки практически ничего не хватило.
Как можете заметить, синтаксис стал немного сложнее и гибче.
Имеются блоки «(цикл)», «[then]», «[then $ else]», «<else>», «<else $ then>»
Символ «$» может работать как «else», «break» или «continue», а также и как «include»
Переменные среды описывают практически все ключевые подпрограммы Монитора и портов УВВ
Из-за узких рамок и пределов оптимизации, пришлось пожертвовать всеми механизмами защиты от ошибок.
При работе с текстом листинга нужно хорошо понимать, что и как делается.
P.S.: Фактически, это - первое практическое применение моего редактора «Победит (https://zx-pk.ru/threads/35028-tekstovyj-redaktor-dlya-rlk-s-unwrap-rezhimom.html)» с адаптацией на разные платформы.
Alikberov
02.09.2025, 17:00
После анонса августовской версии пришло не только расслабление, но и лень, так сказать.
Можно сказать, весь месяц, целый жаркий месяц, непрерывной жёсткой отладки основной части кода, сделали своё дело и хочется немного отвлечься.
Как подчёркивает нейросеть, мои разработки являются узкими нищевым продуктами для узкого круга специалистов - любителей байт-кода из секты поклонников наичестейщему машинному коду.
Для начала, кое-как, снял короткое видео с кратким введением в эту, так сказать, среду.
http://www.youtube.com/watch?v=PxvS6P700AI
Yandex-видео (https://disk.yandex.uz/i/o8BsvHu1lwWDbQ)
https://rutube.ru/video/8b7fba185a987a18de2be17ac40a1ccf/
Если Вы качали файлы выше, могли заметить, что исполняемые файлы демонстрации RK4/RKA/RKL/RKR запускаются и в чистом виде.
Транслятор имеет все достаточные механизмы для генерации компактного кода.
Конечно, основная ответственность по оптимизации в конечном счёте лежит на программисте-кодере.
Изначально, как обладатель железного КР-03, весь код писался и отлаживался под РАДИО-86РК в первую очередь, с последующим переносом под Апогей и Пальмиру.
Однако, при попытке адаптации под КР-04 возникли существенные сложности и пришлось пересмотреть весь цикл разработки и отладки.
Так как в КР-04 доступ к УВВ реализован без проекции в пространство памяти, а через ВК28 и команды IN/OUT, оптимизация на командах LXI/DCX/INX/MOV оказалась просто нерабочей и пришлось раздувать код.
Соответственно, получилось проще разрабатывать и отлаживать под КР-04, так как там используется много таблиц и исходный текст среды забивает все 4 Кб под завязку, при переносе под остальные платформы надобность в таблицах и обслуживающих циклах - отпадает, освобождая пространство под резерв.
Основное назначение данной программы, прежде всего - использование под свои личные нужды и облегчения рутины изучения остальных платформ.
Если пользоваться классическим ассемблером, рутины цикла правки текста, трансляции, загрузки и запуска - жутко утомляет.
Тогда как сейчас - просто правится какой-то байтик и сразу же запускается на исполнение с немедленным результатом.
P.S.: Не увлекаюсь видеоблоггингом и видео получилось - уж каким получилось.
Учитывая, что всё это проворачивается на Raspberry Pi 4 под управлением TwisterOS.
Powered by vBulletin® Version 4.2.5 Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. Перевод: zCarot