Улучшение монитора Радио-86РК

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

Moderator: Shaos

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

Улучшение монитора Радио-86РК

Post by Alikberov »

Отрезано отсюда
Shaos wrote:А просто цифры не словит? Надо будет поизучать вопрос...
Вы Монитор какой используете или свой пишете?

Если что, я сейчас занимаюсь разработкой своей версии Монитора (специально под свой КР-03) - тот же авторский Монитор за 1986 год, но с устранением недочётов и излишеств.
  1. F82D запускается без чтения флагов ВГ75 (о чём в соседних темах размышлял)
  2. F839 устанавливает адрес пользовательской "ловушки" (при ошибке чтения магнитофона не будет "вываливания" в Монитор) или "драйвера Esc-кодов" (при печати символа по Esc+12;34+буква будет что-то происходить)
  3. 7650-769F при Сбросе сохраняются и могут хранить пользовательский код обработки неизвестных директив
  4. Директива R поддерживает ROM-диск размером до 16 Мб с указанием номера страницы четвёртым параметром
  5. и т.д.
Ниже - скриншоты с Блокнота (да, я сначала "бью" дамп, а потом - переношу на ассемблер: процесс очень творческий и крайне долгий), так как нужно уложиться во все ячейки авторского Монитора за 1986 год публикации.
(Типа, чтобы директива O"TEST" заработала, грубо говоря, для интернет-интерфейса... :lol: )
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24131
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Текстовый редактор ПОБЕДИТ

Post by Shaos »

Alikberov wrote:
Shaos wrote:А просто цифры не словит? Надо будет поизучать вопрос...
Вы Монитор какой используете или свой пишете?
У нас вроде разница в возрасте небольшая - давай на ты 8)

Я классический монитор использую и вокруг него планирую плясать :)

В самом мониторе минимальные изменения планируются - типа настройка ВГ75 с видимыми атрибутами (уже сделал) и перескок в другое место при обработке непонятных директив (сейчас оно скочет на тот же F000, что и U, а я планирую добавить несколько новых директив и места в ПЗУ полно)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 364
Joined: 14 Oct 2019 18:10
Location: Tashkent

Re: Текстовый редактор ПОБЕДИТ

Post by Alikberov »

Shaos wrote:Я классический монитор использую и вокруг него планирую плясать :)

В самом мониторе минимальные изменения планируются - типа настройка ВГ75 с видимыми атрибутами (уже сделал) и перескок в другое место при обработке непонятных директив (сейчас оно скочет на тот же F000, что и U, а я планирую добавить несколько новых директив и места в ПЗУ полно)...
У меня тоже Классический Монитор, но доведённый до ума пытаюсь сделать (вот тут).
Из соседней темы с экспериментами с полифоническим ШИМом я вдруг понял, что отлично было бы этот код отлаживать не постоянными правками директивой M, а просто некой директивой «B<высота_тонов>,<длительность>,<начальные_фазы>,<флаги>», что достигается относительной лёгкой правкой кода Монитора…
При этом, появляются побочным образом и "директивы операторного типа": знаки «!"#$%&'()*+-/?» и т.д., что уже сам режим Монитора превращает почти в полноценную командную строку.

Сама подпрограмма печати символа FCBA имеет много излишеств (оказывается) и позволяет прямо в ней расширить код обработки Esc+Y до Esc+<любой_символ> с передачей управления пользовательскому коду.

Т.е. получается 100% совместимый Монитор, но с пасхалками! :roll:
User avatar
vital72
Senior
Posts: 181
Joined: 17 Jun 2014 04:29
Location: 93.80.157.217

Re: Текстовый редактор ПОБЕДИТ

Post by vital72 »

в моём hex-редакторе отображаются мнемоники команд, а также правильно отображается текстовое представление кода (в кодировке Радио-86РК). а ещё курсор может перемещаться по коду не по байтам, а по командам.
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой
Mondx
Doomed
Posts: 541
Joined: 10 Aug 2022 07:27
Location: Crimea

Re: Текстовый редактор ПОБЕДИТ

Post by Mondx »

Люблю конкуренцию.) Ты бы говорил что у тебя в плюсе. Или что в минусе у конкурента.
OnlineOnline
User avatar
Alikberov
Doomed
Posts: 364
Joined: 14 Oct 2019 18:10
Location: Tashkent

Монитор "A"

Post by Alikberov »

Вот набросок ПЗУ Монитор-A, с некоторыми плюшками:
  • F839 - Установка адреса пользовательского кода "ловушки" (по умолчанию - F86C)
  • Директивы «GF815»/«GF809»/«GFD27» и т.п. возвращают управление в Монитор
  • Непонятные директивы обрабатываются пользовательским кодом по 7640, так как буфер ввода перемещён "на экран" - 76D0…76FF
  • Последовательность «Esc+не_Y» обрабатывается кодом "ловушки" (по умолчанию - F86C)…
Просто в Emu80 подставляете файл «rk86-a.rom» и запускаете…
Директивой I загружаете файл «USER_DIR.RKR», после чего можете тестировать:
  • «A123,4567,89AB,CD,'HELLO, WORLD!'» (все четыре параметра и "строка")
  • «B"GOOD BYE!"» (только "строка")
  • «E1,"HO-HO-HO!!!"»
Чтобы проверить "ловушки", загружаете «USER_TRAP.RKR» и запускаете…
  • Сначала предлагается проверить "ловушку ввода" F806, которая не "вываливается в Монитор"
  • Затем можно проверить "драйвер Esc-последовательностей": Жмите «АР2+1,2,3D» или «АР2+Пробел+Пробел+123W» и т.д.
Можно заметить, "драйвер Esc-перехвата" очень прост и лишь отображает "Эскейп-стек параметров" в нижней части экрана, вместе с ключевой буквой.
В качестве практического примера, можно генерировать звук (вызовом FD27) через Escape-последовательность с буквой B (Beep), например:
  • ESC+1,234B
  • ESC+B
  • ESC+,74B
То есть, изначально подпрограмма печати символов при подозрительной комбинации (не "1B 59") просто переходит на F86C.
Если же на Бейсике через DATA/READ/POKE/USR заранее иницировать в Мониторе адрес "ловушки", то можно и музыку играть, типа как «PRINT CHR$(27);";123,45B";CHR$(27);";43;21B"» и т.д…
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24131
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Текстовый редактор ПОБЕДИТ

Post by Shaos »

Alikberov wrote:
Shaos wrote:Я классический монитор использую и вокруг него планирую плясать :)

В самом мониторе минимальные изменения планируются - типа настройка ВГ75 с видимыми атрибутами (уже сделал) и перескок в другое место при обработке непонятных директив (сейчас оно скочет на тот же F000, что и U, а я планирую добавить несколько новых директив и места в ПЗУ полно)...
У меня тоже Классический Монитор, но доведённый до ума пытаюсь сделать (вот тут).
Под "классическим" я понимаю без изменений - т.е. недоведённый до ума, а безумный как есть :lol:

P.S. Создал новый топик про улучшение монитора
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 364
Joined: 14 Oct 2019 18:10
Location: Tashkent

Улучшение монитора Радио-86РК

Post by Alikberov »

Бейсиком тоже получается кое-что.
Вот, например, полифонию в два голоса накидал кое-как, лишь для демонстрации самых малых возможностей Esc-кодов.
(На самом деле, если очень надо, всё вот это нужно реализовать.)
You do not have the required permissions to view the files attached to this post.
User avatar
Shaos
Admin
Posts: 24131
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Улучшение монитора Радио-86РК

Post by Shaos »

Что такое Радио-86РКА?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 364
Joined: 14 Oct 2019 18:10
Location: Tashkent

Улучшение монитора Радио-86РК

Post by Alikberov »

Shaos wrote:Что такое Радио-86РКА?
Ну, так, добавил в список свою конфигурацию для экспериментов с правкой Монитора. :idea:
Типа, «РАДИО-86РКAlikberov»…
User avatar
Shaos
Admin
Posts: 24131
Joined: 08 Jan 2003 23:22
Location: Silicon Valley

Re: Улучшение монитора Радио-86РК

Post by Shaos »

А - понятно
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 364
Joined: 14 Oct 2019 18:10
Location: Tashkent

Некоторая справочная информация

Post by Alikberov »

Немного справочной информации…
  • F806 - ввод байта с порта магнитофона¹
  • F809 - печать символа из регистра C²
  • F818 - вывод текста из буфера по HL³
  • F82D - восстановление режима дисплея⁴
  • F836 - временная заглушка с переходом в ловушку
  • F839 - установка пользовательской ловушки
  • F83D - холодный старт (регистры BC/DE/HL/PSW сохраняются⁶)
  • F86C - тёплый старт (пользовательская ловушка сбрасывается и восстанавливается режим дисплея⁷)
  • F873 - консоль Монитора для выполнения любой директивы⁸
  • 7640 - адрес посадки пользовательских директив
Ввод байта с магнитофона¹
Подпрограмма отличается лишь тем, что в случае сбоя или нажатия клавиши F4 управление может передаваться пользовательской ловушке⁴.

Печать символа на дисплей²
Подпрограмма имеет незначительные правки:
  1. Обеспечивается работа произвольных эскейп-комбинаций, отличных от Esc+Y, посредством предустановленной пользовательской ловушки
  2. При очистке экрана по коду 1F, в конец буфера ставится байт F3 - «Стоп ПДП»
Печать текста³
Текст может завершаться как кодом 00, так и на символе с кодом >127.

Восстановление синхронизации
Подпрограмма не имеет цикла с ожиданием флага сигнализации о конце кадра.
Просто ВТ57 запускается одновременно с ВГ75, но благодаря коду F3 в буфере экрана² синхронизация достигается на уровне самих ИМС.

Пользовательская ловушка
Для исключения известных неприятностей с вываливанием в Монитор при ошибке чтения данных с порта магнитофона, код Монитора может принять в HL адрес на код подпрограммы, который сможет обработать ситуацию.
Пользовательская ловушка получит управление также и по нажатию клавиши F4 при ожидании чтения с магнитофона или при выполнении некоторых директив в Shell-режиме⁸.

Холодный Старт Монитора
Если Оригинальный Монитор обнуляет всю область служебных ячеек, то представленный здесь вариант сохраняет практически все РОН для дальнейшего анализа их директивой X, что может помочь в случаях с зависанием отлаживаемого кода.

Тёплый Старт
Принудительно восстанавливается работа ВТ57 и ВГ75, что позволяет исключить некоторые неприятные ситуации, в частности, при отладке. Однако, по окончанию работы каждой директивы синхронизация дисплея слишком навязчиво восстанавливается.
Пользовательская ловушка⁵ сбрасывается.

Вызов Монитора в режиме Shell-консоли
Пользователь может выполнить любую директиву, после чего управление вернётся прикладному коду.
Пользовательская ловушка⁵ сохраняется.

Пользовательские Директивы
Представляемый Монитор при старте не обнуляет всю свою служебную область, а в качестве буфера ввода директив использует экранные ячейки 76D0-76FF. Это позволило отдать область 7640-769F под любой пользовательский код, который выполняется при любых непонятных директивах, вместо перехода на F000.
При этом, директивы могут иметь до четырёх параметров, а также и символьную строку, отделённую от параметров любым символом, код которого <44.
Так, если для директивы R указать четвёртый параметр, то он автоматически поместится в ППА клавиатуры D20 по адресу 8000. В расширенных системах это может позволить увеличить объём ROM-диска до 16 Мб (256 страниц по 64 Кб).
Пользовательская директива с посадкой на адрес 7640 получит в регистрах HL/DE/BC все три параметра, а четвёртый может прочитать из ППА клавиатуры 8000 обязательно перед вызовом любых других подпрограмм Монитора, которые циклом опроса клавиатуры параметр уничтожат. Также, в Аккумуляторе передаётся сам символ директивы, а флаги CF/ZF/SF сигнализируют, был ли указан единичный параметр или же их несколько (вместо ячейки 762D). К тому же, адрес в ячейках 760D/760E, которые обычно сохраняют регистр SP в подпрограммах чтения с магнитофона, указывает на начало строкового параметра.

Ввод директив
Буфер ввода директив перенесён с области 7633-7651 в начальную строку экрана 76D0-76FF, что освободило пространство служебных ячеек и увеличило вместимость директивы до 47 символов.
Так как большинство кодов клавиш передаётся непосредственно в печать на экран, клавиша Esc/АР2 может выполнять свой функционал (по умолчанию, самый минимум - Esc+Y) и генерировать вызов ловушки⁵ с вываливанием в привычный F86C (двойное нажатие Esc/АР2 здесь эквивалентно прерыванию ввода Точкой «.»).
Вообще-то, размышляя на тему, можно эту функцию прерывателя переложить на тот же F4 (или УС+C), который работает в директивах D/L/I. Какая-то неоднозначность присутствует в авторском Мониторе, которую так и хочется поправить.

Вариант "A"
Имеются некоторые мысли на этот счёт, которые пользователь должен будет иметь в виду.
В частности, перенести функцию прерывателя в директивах D/L/I на клавишу Esc/АР2, чтобы реакцию на клавиши сделать более ортогональнее.

Маленькая демонстрация:
User avatar
Alikberov
Doomed
Posts: 364
Joined: 14 Oct 2019 18:10
Location: Tashkent

Улучшение монитора Радио-86РК

Post by Alikberov »

В рамках Монитора данной модификации, занялся написанием пробной оболочки.
Из списка Esc-команд реализовал E/H/I/J/K/L/M/N, а вот A/B/C/D и 0/1 лишь частично, так как:
  • A/B/C/D перемещают курсор лишь до упора в границы
  • 0/1 скрывает/отображает строку статуса (25-ю?) и, видимо, уменьшает число доступных строк до 24, что требует уже вывод с определением произвольной области (писать свой оконный драйвер)
А так, в целом, ловушка выполняет свою функцию.
You do not have the required permissions to view the files attached to this post.
User avatar
Alikberov
Doomed
Posts: 364
Joined: 14 Oct 2019 18:10
Location: Tashkent

Улучшение монитора Радио-86РК

Post by Alikberov »

Поддержать основные ANSI-последовательности можно, но конкретно под РАДИО-86РК это - чрезмерное излишество: Под CP/M-80 программы их не используют, а DOS-приложения - под 16-разрядную архитектуру.

С другой стороны, сочетания кодов «1B 20»/«1B 2B»/«1B 2D» практически уникальная редкость, которую и можно использовать конкретно под РАДИО-86РК.

Сейчас отладил свой код драйвера, который помимо стандартных команд обрабатывает и мои собственные:
  • Пробел игнорируется, что полезно в вызовах из-под Бейсиков, где все числа принудительно обрамляются пробелом
  • Знак «+» прокручивает Escape-стек и на верхушку помещает 00
  • Знак «-» прокручивает Escape-стек и на верхушку помещает 80
  • Цифры «0…9» умножает верхушку Escape-стека на 10 и суммируется с ним
  • Символы «A…Z» закрывает Escape-стек и выполняет одну из операций
На скриншоте ниже можно видеть вверху экрана все клавишные посылы, а внизу - escape-стек:
  • «+127» заносит код 7F
  • «-127» заносит код 81
  • «+-+63» заносит соответственно 00 80 3F
  • «-63» заносит в стек код C1
  • буква «B» закрывает стек и выполняет условную операцию «B(-63,63,-128,0,-127,127)»
По-моему, конкретно для РК такой вариант тоже прост и гибок, в частности, для обращений из-под Бейсиков всех диалектов.
You do not have the required permissions to view the files attached to this post.
User avatar
Alikberov
Doomed
Posts: 364
Joined: 14 Oct 2019 18:10
Location: Tashkent

Улучшение монитора Радио-86РК

Post by Alikberov »

Вглядываясь в архитектуры многих Микро-ЭВМ замечашь, что значительный процент адресного пространства отжирается именно под ПЗУ.
Вот, например, в ZX-Spectrum'е подавляющее число игровых программ, после загрузки с ленты и запуска, никак не пользуется ПЗУ, которое занимает целых 16 Кб - 25% адресного пространства! Так как приложение в своём коде имеет всё необходимое (вывод спрайтов в произвольной позиции, печать текста различными шрифтами, проигрывание звуков с полифонией и т.д.), а те 16 Кб под ПЗУ становятся мёртвым грузом.

Задумываясь конкретно про РАДИО-86РК с его API в пространстве ПЗУ Монитора, легко заметить, что самая большая подпрограмма там - вывод символа на экран, занимающая чуть более 256 байтов.
Тем самым, конкретно под РАДИО-86РК делать ПЗУ с проекцией в память менее, чем в 512 байт, создаст существенные неудобства.

Это я к размышлению о том, что можно ли, в идеальном случае, сделать страничную организацию ПЗУ, где различные подпрограммы API - не какие-то там конкретные участки памяти ПЗУ, а отдельные страницы.
  • F800…F9FF - статическая область ПЗУ (не переключаемая)
  • FA00…FBFF - страничная область ПЗУ (каждая страница - свой API: Вывод текста; Опрос клавиатуры; Обмен с периферией и т.д.)
  • FC00…FFFF - периферия (ВИ53, ВВ55, ВТ57, ВГ75 и т.п.) и служебная защищённая область ОЗУ (скрытая для прикладных программ), доступная только при A15="1" на циклах M1