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

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

Moderator: Shaos

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

Скрипты-86РК

Post by Alikberov »

Доработал оболочку и расширил функционал:
  • «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.: Также, исправил один глюк.
You do not have the required permissions to view the files attached to this post.
User avatar
Alikberov
Doomed
Posts: 373
Joined: 14 Oct 2019 18:10
Location: Tashkent

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

Post by Alikberov »

Внёс мелкие правки и доработки.
Адаптировал под Апогей. :idea:
You do not have the required permissions to view the files attached to this post.
User avatar
Alikberov
Doomed
Posts: 373
Joined: 14 Oct 2019 18:10
Location: Tashkent

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

Post by Alikberov »

Адаптировал свой код под Северную Пальмиру :idea:
You do not have the required permissions to view the files attached to this post.
User avatar
Alikberov
Doomed
Posts: 373
Joined: 14 Oct 2019 18:10
Location: Tashkent

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

Post by Alikberov »

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

Бинарный формат данных имеет специфическое представление в силу максимальной простоты парсера.

Code: Select all

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
You do not have the required permissions to view the files attached to this post.
User avatar
Alikberov
Doomed
Posts: 373
Joined: 14 Oct 2019 18:10
Location: Tashkent

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

Post by Alikberov »

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

В архиве имеется несколько демонстрационных программ:
  1. «ПИТОН» - Практически идентичная адаптация оригинальной игровой программы
  2. «БОМБА» - Попытка ремейка оригинальной игровой программы ПЭВМ «Согдиана-2», с которой и началось моё знакомство с ЭВТ
  3. «Чёрная Дыра» - Моя собственная игровая фантазия в качестве тренировки и наработки навыков скриптинга
  4. «Version» - Простая крошечная демонстрация получения переменных среды для работы с вызовами API
Причём, «Бомба» и «ЧД» поддерживают управление как клавиатурой, так и световым пером - мышкой в эмуляторе.
Правда, имеются некоторые проблемы с цветом на Апогее в игре «БОМБА» из-за схематических отличий видеоузла.

Сначала грузите и запускаете файл самого скриптера - «SCRIPTER.RK?», в зависимости от платформы.
В редакторе, используя комбинацию клавиш «УС+O» загружаем любой файл - «VERSION.RK», «PITON.RK», «SCHWARZ.RK», «DER_BOMB.RK».
А затем комбинацией «УС+R» запускаем загруженный скрипт на исполнения.

P.S.: Текущая версия скриптера - 2507h, что соответствует 2025/07 и данная версия больше дорабатываться не будет.
You do not have the required permissions to view the files attached to this post.
User avatar
Alikberov
Doomed
Posts: 373
Joined: 14 Oct 2019 18:10
Location: Tashkent

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

Post by Alikberov »

Записал небольшое видео работы этого редактора и транслятора.
Mondx
Doomed
Posts: 549
Joined: 10 Aug 2022 07:27
Location: Crimea

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

Post by Mondx »

А не проще ли расширить Монитор и держать ассемблер/дизассемблер в нём. Всё ж полезнее, чем этим онанизмом заниматься, не?
viewtopic.php?p=169518#p169518
User avatar
Alikberov
Doomed
Posts: 373
Joined: 14 Oct 2019 18:10
Location: Tashkent

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

Post by Alikberov »

Mondx wrote: 02 Aug 2025 02:36 А не проще ли расширить Монитор и держать ассемблер/дизассемблер в нём.
Примерно к этому я и стремлюсь :roll:
Стандартный Монитор заменить на собственный с оконностью и вместо CLI с вводом Директив сделать диалоговое окно с набором скрипта.
  1. Редактор текста - 2 Кб
  2. Отладчик - 1 Кб
  3. Дизассемблер - 1 Кб
Основная проблема классического ассемблера - много вертикальной воды:
  1. Программа описывается только вертикальным свитком
  2. Крошечная инструкция имеет громоздкий мнемонический вид («XCHG», «XTHL», «LDAX», «STAX» и т.д.)
Напротив, меня удивляет, что математики-программисты от Ассемблера сразу перешли к Фортрану. :o

Данная тема - именно про промежуточное звено, между машинным кодом и Ассемблером с удобной блочной организацией.

Никаких тысяч строк ассемблера на килобайт кода.
Можно на одном экране 64x25 уместить код объёмом до 1 Кб.

Причём, у меня лично возрасла скорость разработки/отладки в разы.
Теперь вот изучаю и Апогей, и Пальмиру. :idea:

P.S.: Может следует подавить брезгливость к байт-коду и вникнуть в саму суть идеи? :rotate:
You do not have the required permissions to view the files attached to this post.
Mondx
Doomed
Posts: 549
Joined: 10 Aug 2022 07:27
Location: Crimea

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

Post by Mondx »

Идея то понятна. Только мне и ассемблер не нравится, а тут ещё ниже. Ниже только в кодах и тетрадь в клеточку. )
Но с переносимостью ассемблерного кода ещё хоть как то можно бороться, тут же наоборот, аля шифровка Штирлиц - Юстасу. И всё только заради компактности, а грубо говоря, от бедности. Это можно было бы понять на заре развития микропроцессоров, а сейчас то это зачем. Думаю, только как головоломка, для не застаивания мозгов.)
User avatar
Alikberov
Doomed
Posts: 373
Joined: 14 Oct 2019 18:10
Location: Tashkent

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

Post by Alikberov »

Mondx wrote: 03 Aug 2025 16:07 Идея то понятна. Только мне и ассемблер не нравится, а тут ещё ниже. Ниже только в кодах и тетрадь в клеточку. )
Если Wang 2200 не имел в своём диалекте Бейсика оператора POKE и функций PEEK/USR, что не предоставляло никаких возможностей поковыряться в памяти, то у меня тут - всё под полным контролем. :kruto:
Mondx wrote: 03 Aug 2025 16:07Но с переносимостью ассемблерного кода ещё хоть как то можно бороться, тут же наоборот, аля шифровка Штирлиц - Юстасу.
Сейчас работаю над вариантом под КР-04: Удалось скрипт «ПИТОН» запустить и на КР-04 как есть - без переделки.
Иначе говоря, сейчас один и тот же скрипт одинаково исполняется на «РАДИО-86РК», «Апогее», «Северной Пальмире» и на «КР-04». :roll:
Получился низкоуровневый Бейсик :wink:

А так как в «КР-04» вместо атрибутов цвета имеются атрибуты переключения знакогенератора, получается в листинге можно комментарии хоть на японском писать. :mrgreen:

P.S.: На данный момент поддержка «КР-04» - то, к чему я стремился!
В рамках внутренней разработки инструментария для изучения именно «КР-04», я и занялся разработкой компактного недо-ассемблера для ускорения разработок.
You do not have the required permissions to view the files attached to this post.