Вложений: 3
Победит+Скрипты - как маленькая среда разработчика
Цитата:
Сообщение от
Strijar
Так можно же просто использовать язык 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.: Это как бы первый пример практического применения редактора «ПобЭдит».
Вложений: 2
Скрипты-86РК / Северная Пальмира
Адаптировал свой код под Северную Пальмиру:v2_dizzy_punk:
Вложений: 1
Скрипты-86РК / Апогей / Северная Пальмира
Синтаксис языка псевдо-скриптов достаточно прост и в основном состоит из символического представления шестнадцатеричного машинного кода, позволяя кодировать программный код как есть - дампом в текстовой записи.
Главное отличие от голого дампа - небольшой синтаксический сахар, позволяющий использовать:
- Блочную структуру с условно неограниченной глубиной вложений
- Метки (в ограниченном количестве)
- Условную трансляцию и динамическое исполнение кода в трансляторе
- Поддержка бинарных данных (для кодирования знакогенератора)
- Подобие переменных среды конкретной платформы
Блоки ограничиваются символами «[» («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.: Хочу выразить отдельную благодарность Ведущему Специалисту: Северная Пальмира достаточно приятная машина.
Вложений: 5
Игровая демонстрация «Чёрная Дыра»
Работает на этой версии.
Поддерживает управление клавиатурой и световым пером.
Вложений: 4
Скрипты-86РК / Апогей / Северная Пальмира
Подводя итоги уходящего месяца, представляю ниже архивы с демонстрациями.
На данный момент всё работает достаточно стабильно.
В архиве имеется несколько демонстрационных программ:
- «ПИТОН» - Практически идентичная адаптация оригинальной игровой программы
- «БОМБА» - Попытка ремейка оригинальной игровой программы ПЭВМ «Согдиана-2», с которой и началось моё знакомство с ЭВТ
- «Чёрная Дыра» - Моя собственная игровая фантазия в качестве тренировки и наработки навыков скриптинга
- «Version» - Простая крошечная демонстрация получения переменных среды для работы с вызовами API
Причём, «Бомба» и «ЧД» поддерживают управление как клавиатурой, так и световым пером - мышкой в эмуляторе.
Правда, имеются некоторые проблемы с цветом на Апогее в игре «БОМБА» из-за схематических отличий видеоузла.
Сначала грузите и запускаете файл самого скриптера - «SCRIPTER.RK?», в зависимости от платформы.
В редакторе, используя комбинацию клавиш «УС+O» загружаем любой файл - «VERSION.RK», «PITON.RK», «SCHWARZ.RK», «DER_BOMB.RK».
А затем комбинацией «УС+R» запускаем загруженный скрипт на исполнения.
P.S.: Текущая версия скриптера - 2507h, что соответствует 2025/07 и данная версия больше дорабатываться не будет.
Скрипты-86РК / Апогей / Северная Пальмира
Записал небольшое видео работы этого редактора и транслятора.
https://youtu.be/Q1MipiDqclM
Вложений: 1
Скрипты-86РК / Апогей / Северная Пальмира / КР-04
На данный момент ведётся адаптация под КР-04.
Сейчас занимаюсь самым вкусным элементом КР-04 - переключаемым знакогенератором.:v2_dizzy_roll:
Вложений: 4
Скрипты-86РК / Апогей / Северная Пальмира / КР-04
Спустя ровно месяц активной отладки и адаптации, представляю Вашему вниманию версию 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.: Фактически, это - первое практическое применение моего редактора «Победит» с адаптацией на разные платформы.
Скрипты-86РК / Апогей / Северная Пальмира / КР-04
После анонса августовской версии пришло не только расслабление, но и лень, так сказать.
Можно сказать, весь месяц, целый жаркий месяц, непрерывной жёсткой отладки основной части кода, сделали своё дело и хочется немного отвлечься.
Как подчёркивает нейросеть, мои разработки являются узкими нищевым продуктами для узкого круга специалистов - любителей байт-кода из секты поклонников наичестейщему машинному коду.
Для начала, кое-как, снял короткое видео с кратким введением в эту, так сказать, среду.
http://www.youtube.com/watch?v=PxvS6P700AI
Yandex-видео
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.