User Tag List

Страница 1 из 2 12 ПоследняяПоследняя
Показано с 1 по 10 из 19

Тема: Скрипты-86РК

  1. #1

    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    181
    Спасибо Благодарностей отдано 
    57
    Спасибо Благодарностей получено 
    81
    Поблагодарили
    40 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

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

    Этой темой я заинтересовался относительно недавно.
    Оглядываясь на такие экзотические скриптовые языки, как 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; 17.07.2025 в 20:37.
    Электроника КР-03; ZX-Spectrum "Ленинград-48"; Atari-130XE; Поиск-1...

    Эти 5 пользователя(ей) поблагодарили Alikberov за это полезное сообщение:

    Aleks1985(07.07.2025), Hammer(08.07.2025), MaratBest(08.07.2025), Oleg N. Cher(07.07.2025), Pyk(07.07.2025)

  2. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  3. #2

    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    181
    Спасибо Благодарностей отдано 
    57
    Спасибо Благодарностей получено 
    81
    Поблагодарили
    40 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb Скрипты-86РК

    Вложенные блоки позволяют полностью или частично отказаться от использования многочисленных меток.
    Иными словами, вместо «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» может помочь зарезервировать позиции под вставку символов

    Но над его функционалом работы не ведутся, так как персер специально разрабатывается для интеграции с моим редактором «ПОБЕДИТ» в перспективе.

    P.S.: Основной код парсера 0100-01FF - с лёгкостью уместится в любое ПЗУ.
    (Второй вариант поддерживает конструкцию «IF-THEN-ELSE»: Спасибо b2m!')
    Вложения Вложения
    Последний раз редактировалось Alikberov; 09.07.2025 в 21:06.
    Электроника КР-03; ZX-Spectrum "Ленинград-48"; Atari-130XE; Поиск-1...

  4. #3

    Регистрация
    21.04.2015
    Адрес
    г. Всеволожск
    Сообщений
    52
    Спасибо Благодарностей отдано 
    0
    Спасибо Благодарностей получено 
    1
    Поблагодарили
    1 сообщение
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Так можно же просто использовать язык Forth. Для Радио-86РК он есть.
    Радио-86РК, Апогей БК01

    Этот пользователь поблагодарил Strijar за это полезное сообщение:

    jerri(10.07.2025)

  5. #4

    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    181
    Спасибо Благодарностей отдано 
    57
    Спасибо Благодарностей получено 
    81
    Поблагодарили
    40 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb Победит+Скрипты - как маленькая среда разработчика

    Цитата Сообщение от Strijar Посмотреть сообщение
    Так можно же просто использовать язык Forth. Для Радио-86РК он есть.
    Ну, на Forth пишутся программы, а конкретно эта тема - про скрипты.

    Тем не менее, представляю Вам свой вариант недо-среды недо-разработки (запуск по «G644»).
    • «1000-10FF» - справочный лист клавиши «F1»
    • «2000-2FFF» - листинг скрипта клавиши «F2»
    • «3000-75FF» - листинг скрипта клавиши «F3»

    Как можно заметить, адреса «1100-1FFF» зарезервированы под классическую трансляцию.
    Потому, текст основного буфера (справочного листа) не рекомендуется править!

    Тем самым, под трансляцию кода доступны три региона:
    1. «0000-0643» - 1604 байта
    2. «1100-1FFF» - 3840 байтов
    3. «4000-74FF» - до 13568 байтов, в зависимости от размера скрипта #3


    Естественно, загрузка/выгрузка буферов клавишами не предусмотрена, так как стремился достичь самого минимума, но достаточного для разработки.
    То есть, вполне можно наскриптить код загрузки и выгрузки листингов.

    P.S.: Это как бы первый пример практического применения редактора «ПобЭдит».
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	script-86rk.jpg 
Просмотров:	43 
Размер:	22.6 Кб 
ID:	82485   Нажмите на изображение для увеличения. 

Название:	script-86rk_menu.jpg 
Просмотров:	35 
Размер:	20.4 Кб 
ID:	82475  
    Вложения Вложения
    Последний раз редактировалось Alikberov; 11.07.2025 в 09:03.
    Электроника КР-03; ZX-Spectrum "Ленинград-48"; Atari-130XE; Поиск-1...

  6. #5

    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    181
    Спасибо Благодарностей отдано 
    57
    Спасибо Благодарностей получено 
    81
    Поблагодарили
    40 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Lightbulb Скрипты-86РК

    Доработал оболочку и расширил функционал:
    • «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.: Теперь гораздо легче разрабатывать непосредственно машинным кодом, без избыточной синтаксической нагрузки Ассемблерных мнемоник.
    И частично решил концепт USR-вызовов.
    Вложения Вложения
    Электроника КР-03; ZX-Spectrum "Ленинград-48"; Atari-130XE; Поиск-1...

  7. #6

    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    181
    Спасибо Благодарностей отдано 
    57
    Спасибо Благодарностей получено 
    81
    Поблагодарили
    40 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

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

    Внёс мелкие правки и доработки.
    Адаптировал под Апогей.
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	script-apogey_piton.jpg 
Просмотров:	22 
Размер:	21.0 Кб 
ID:	82519  
    Вложения Вложения
    Электроника КР-03; ZX-Spectrum "Ленинград-48"; Atari-130XE; Поиск-1...

  8. #7

    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    181
    Спасибо Благодарностей отдано 
    57
    Спасибо Благодарностей получено 
    81
    Поблагодарили
    40 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

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

    Адаптировал свой код под Северную Пальмиру
    Миниатюры Миниатюры Нажмите на изображение для увеличения. 

Название:	SCRIPTS-PALMIRA.jpeg 
Просмотров:	42 
Размер:	62.4 Кб 
ID:	82526  
    Вложения Вложения
    Электроника КР-03; ZX-Spectrum "Ленинград-48"; Atari-130XE; Поиск-1...

    Эти 2 пользователя(ей) поблагодарили Alikberov за это полезное сообщение:

    Hammer(20.07.2025), Ведущий_специалист(21.07.2025)

  9. #8

    Регистрация
    23.10.2012
    Адрес
    г. Красноярск
    Сообщений
    206
    Спасибо Благодарностей отдано 
    47
    Спасибо Благодарностей получено 
    63
    Поблагодарили
    29 сообщений
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    В общем то вопрос. Есть какая подпрограмма или скрипт, которые к бинарнику добавляют заголовок ну и все остальное, чтобы загрузить потом его в эмулятор? Для "Специалиста" нашел, для РК если и есть, то похоронено в глубинах форума где-то, по крайней мере я не нашел. Спасибо.

  10. #9

    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    181
    Спасибо Благодарностей отдано 
    57
    Спасибо Благодарностей получено 
    81
    Поблагодарили
    40 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

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

    Синтаксис языка псевдо-скриптов достаточно прост и в основном состоит из символического представления шестнадцатеричного машинного кода, позволяя кодировать программный код как есть - дампом в текстовой записи.
    Главное отличие от голого дампа - небольшой синтаксический сахар, позволяющий использовать:
    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 для записи в итоговый код.
    При этом, допускаются блочные вложения и все другие конструкции, поддерживаемые транслятором.

    Бинарный формат данных имеет специфическое представление в силу максимальной простоты парсера.
    Код:
    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.: Хочу выразить отдельную благодарность Ведущему Специалисту: Северная Пальмира достаточно приятная машина.
    Вложения Вложения
    Последний раз редактировалось Alikberov; 28.07.2025 в 19:47.
    Электроника КР-03; ZX-Spectrum "Ленинград-48"; Atari-130XE; Поиск-1...

  11. #10

    Регистрация
    08.12.2023
    Адрес
    г. Жуковский
    Сообщений
    282
    Спасибо Благодарностей отдано 
    53
    Спасибо Благодарностей получено 
    147
    Поблагодарили
    45 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    А может ну его нафиг эти подпрограммы из ПЗУ? Может их лучше свои использовать? Тогда получится очень юзабельно.

    В конце подпрограмм можно поднимать или сбрасывать флаг Z в зависимости от результата, тогда получим все возможные условия и альтернативы.

Страница 1 из 2 12 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. Восстановление оригинально 86РК
    от doc_fbi в разделе Радио-86РК
    Ответов: 20
    Последнее: 13.09.2022, 11:35
  2. РАДИО-86РК на Z80
    от Vladimir_S в разделе Радио-86РК
    Ответов: 310
    Последнее: 06.06.2017, 21:13
  3. Модульный РАДИО-86РК
    от AlexZ в разделе Радио-86РК
    Ответов: 180
    Последнее: 06.06.2017, 19:18
  4. Радио 86РК
    от Shnurkov в разделе Барахолка (архив)
    Ответов: 1
    Последнее: 02.01.2009, 12:52

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •