nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 28 Mar 2024 13:07



Reply to topic  [ 18 posts ]  Go to page 1, 2  Next
Улучшение монитора Радио-86РК 
Author Message
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 273
Location: Tashkent
Reply with quote
Отрезано отсюда

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: )


Attachments:
File comment: "тетрадный" эскиз "Монитора"
*) четвёртый параметр уже влияет на страницы директивы R - её править не надо
*) работают директивы типа P'HELLO!'

Снимок экрана_2024-02-04_16-57-20.png
Снимок экрана_2024-02-04_16-57-20.png [ 19.67 KiB | Viewed 1044 times ]
File comment: "тетрадный" эскиз "Монитора"
*) четвёртый параметр уже влияет на страницы директивы R - её править не надо
*) работают директивы типа P'HELLO!'
(вариант с сильной оптимизацией - не дописан)

Снимок экрана_2024-02-04_16-45-44.png
Снимок экрана_2024-02-04_16-45-44.png [ 19.47 KiB | Viewed 1047 times ]
04 Feb 2024 14:49
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Alikberov wrote:
Shaos wrote:
А просто цифры не словит? Надо будет поизучать вопрос...
Вы Монитор какой используете или свой пишете?
У нас вроде разница в возрасте небольшая - давай на ты 8)

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

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

_________________
:dj: https://mastodon.social/@Shaos


04 Feb 2024 15:39
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 273
Location: Tashkent
Reply with quote
Shaos wrote:
Я классический монитор использую и вокруг него планирую плясать :)

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

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

Т.е. получается 100% совместимый Монитор, но с пасхалками! :roll:


05 Feb 2024 03:07
Profile WWW
Senior
User avatar

Joined: 17 Jun 2014 04:29
Posts: 126
Location: 93.80.157.217
Reply with quote
в моём hex-редакторе отображаются мнемоники команд, а также правильно отображается текстовое представление кода (в кодировке Радио-86РК). а ещё курсор может перемещаться по коду не по байтам, а по командам.

_________________
https://radio-86rk.ru
кто я такой, чтобы спорить с самим собой


05 Feb 2024 03:38
Profile WWW
Doomed

Joined: 10 Aug 2022 07:27
Posts: 351
Reply with quote
Люблю конкуренцию.) Ты бы говорил что у тебя в плюсе. Или что в минусе у конкурента.


05 Feb 2024 04:32
Profile
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 273
Location: Tashkent
Reply with quote
Вот набросок ПЗУ Монитор-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"» и т.д…


Attachments:
File comment: Монитор "A"
MONITOR-A.zip [3.14 KiB]
Downloaded 16 times
05 Feb 2024 08:09
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Alikberov wrote:
Shaos wrote:
Я классический монитор использую и вокруг него планирую плясать :)

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

Под "классическим" я понимаю без изменений - т.е. недоведённый до ума, а безумный как есть :lol:

P.S. Создал новый топик про улучшение монитора

_________________
:dj: https://mastodon.social/@Shaos


05 Feb 2024 20:34
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 273
Location: Tashkent
Reply with quote
Бейсиком тоже получается кое-что.
Вот, например, полифонию в два голоса накидал кое-как, лишь для демонстрации самых малых возможностей Esc-кодов.
(На самом деле, если очень надо, всё вот это нужно реализовать.)


Attachments:
MONITOR-A.zip [10.93 KiB]
Downloaded 19 times
Снимок экрана_2024-02-06_02-00-26.png
Снимок экрана_2024-02-06_02-00-26.png [ 62.3 KiB | Viewed 860 times ]
06 Feb 2024 00:13
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
Что такое Радио-86РКА?

_________________
:dj: https://mastodon.social/@Shaos


06 Feb 2024 00:21
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 273
Location: Tashkent
Reply with quote
Shaos wrote:
Что такое Радио-86РКА?
Ну, так, добавил в список свою конфигурацию для экспериментов с правкой Монитора. :idea:
Типа, «РАДИО-86РКAlikberov»…


06 Feb 2024 00:28
Profile WWW
Admin
User avatar

Joined: 08 Jan 2003 23:22
Posts: 22412
Location: Silicon Valley
Reply with quote
А - понятно

_________________
:dj: https://mastodon.social/@Shaos


06 Feb 2024 00:41
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 273
Location: Tashkent
Reply with quote
Немного справочной информации…
  • 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, чтобы реакцию на клавиши сделать более ортогональнее.

Маленькая демонстрация:


06 Feb 2024 04:16
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 273
Location: Tashkent
Reply with quote
В рамках Монитора данной модификации, занялся написанием пробной оболочки.
Из списка Esc-команд реализовал E/H/I/J/K/L/M/N, а вот A/B/C/D и 0/1 лишь частично, так как:
  • A/B/C/D перемещают курсор лишь до упора в границы
  • 0/1 скрывает/отображает строку статуса (25-ю?) и, видимо, уменьшает число доступных строк до 24, что требует уже вывод с определением произвольной области (писать свой оконный драйвер)
А так, в целом, ловушка выполняет свою функцию.


Attachments:
File comment: Результат интерактивного ввода Esc+N и Esc+L в оболочке НеДоФорта
monitor#a-after-esc-L.png
monitor#a-after-esc-L.png [ 9.55 KiB | Viewed 686 times ]
07 Feb 2024 10:47
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 273
Location: Tashkent
Reply with quote
Поддержать основные 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)»
По-моему, конкретно для РК такой вариант тоже прост и гибок, в частности, для обращений из-под Бейсиков всех диалектов.


Attachments:
File comment: Скриншот отладки Эскейпов
monitor#a-escapes.png
monitor#a-escapes.png [ 3.83 KiB | Viewed 636 times ]
08 Feb 2024 08:11
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 273
Location: Tashkent
Reply with quote
Вглядываясь в архитектуры многих Микро-ЭВМ замечашь, что значительный процент адресного пространства отжирается именно под ПЗУ.
Вот, например, в 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


09 Feb 2024 00:21
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 18 posts ]  Go to page 1, 2  Next

Who is online

Users browsing this forum: No registered users and 13 guests


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum
You cannot post attachments in this forum

Search for:
Jump to:  
Powered by phpBB® Forum Software © phpBB Group
Designed by ST Software.