Shaos wrote:А просто цифры не словит? Надо будет поизучать вопрос...
Вы Монитор какой используете или свой пишете?
Если что, я сейчас занимаюсь разработкой своей версии Монитора (специально под свой КР-03) - тот же авторский Монитор за 1986 год, но с устранением недочётов и излишеств.
F82D запускается без чтения флагов ВГ75 (о чём в соседних темах размышлял)
F839 устанавливает адрес пользовательской "ловушки" (при ошибке чтения магнитофона не будет "вываливания" в Монитор) или "драйвера Esc-кодов" (при печати символа по Esc+12;34+буква будет что-то происходить)
7650-769F при Сбросе сохраняются и могут хранить пользовательский код обработки неизвестных директив
Директива R поддерживает ROM-диск размером до 16 Мб с указанием номера страницы четвёртым параметром
и т.д.
Ниже - скриншоты с Блокнота (да, я сначала "бью" дамп, а потом - переношу на ассемблер: процесс очень творческий и крайне долгий), так как нужно уложиться во все ячейки авторского Монитора за 1986 год публикации.
(Типа, чтобы директива O"TEST" заработала, грубо говоря, для интернет-интерфейса... )
You do not have the required permissions to view the files attached to this post.
Shaos wrote:А просто цифры не словит? Надо будет поизучать вопрос...
Вы Монитор какой используете или свой пишете?
У нас вроде разница в возрасте небольшая - давай на ты
Я классический монитор использую и вокруг него планирую плясать
В самом мониторе минимальные изменения планируются - типа настройка ВГ75 с видимыми атрибутами (уже сделал) и перескок в другое место при обработке непонятных директив (сейчас оно скочет на тот же F000, что и U, а я планирую добавить несколько новых директив и места в ПЗУ полно)...
Я тут за главного - если что шлите мыло на me собака shaos точка net
Shaos wrote:Я классический монитор использую и вокруг него планирую плясать
В самом мониторе минимальные изменения планируются - типа настройка ВГ75 с видимыми атрибутами (уже сделал) и перескок в другое место при обработке непонятных директив (сейчас оно скочет на тот же F000, что и U, а я планирую добавить несколько новых директив и места в ПЗУ полно)...
У меня тоже Классический Монитор, но доведённый до ума пытаюсь сделать (вот тут).
Из соседней темы с экспериментами с полифоническим ШИМом я вдруг понял, что отлично было бы этот код отлаживать не постоянными правками директивой M, а просто некой директивой «B<высота_тонов>,<длительность>,<начальные_фазы>,<флаги>», что достигается относительной лёгкой правкой кода Монитора…
При этом, появляются побочным образом и "директивы операторного типа": знаки «!"#$%&'()*+-/?» и т.д., что уже сам режим Монитора превращает почти в полноценную командную строку.
Сама подпрограмма печати символа FCBA имеет много излишеств (оказывается) и позволяет прямо в ней расширить код обработки Esc+Y до Esc+<любой_символ> с передачей управления пользовательскому коду.
Т.е. получается 100% совместимый Монитор, но с пасхалками!
в моём hex-редакторе отображаются мнемоники команд, а также правильно отображается текстовое представление кода (в кодировке Радио-86РК). а ещё курсор может перемещаться по коду не по байтам, а по командам.
Вот набросок ПЗУ Монитор-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.
Shaos wrote:Я классический монитор использую и вокруг него планирую плясать
В самом мониторе минимальные изменения планируются - типа настройка ВГ75 с видимыми атрибутами (уже сделал) и перескок в другое место при обработке непонятных директив (сейчас оно скочет на тот же F000, что и U, а я планирую добавить несколько новых директив и места в ПЗУ полно)...
У меня тоже Классический Монитор, но доведённый до ума пытаюсь сделать (вот тут).
Под "классическим" я понимаю без изменений - т.е. недоведённый до ума, а безумный как есть
P.S. Создал новый топик про улучшение монитора
Я тут за главного - если что шлите мыло на me собака shaos точка net
Бейсиком тоже получается кое-что.
Вот, например, полифонию в два голоса накидал кое-как, лишь для демонстрации самых малых возможностей Esc-кодов.
(На самом деле, если очень надо, всё вот это нужно реализовать.)
You do not have the required permissions to view the files attached to this post.
F86C - тёплый старт (пользовательская ловушка сбрасывается и восстанавливается режим дисплея⁷)
F873 - консоль Монитора для выполнения любой директивы⁸
7640 - адрес посадки пользовательских директив⁹
Ввод байта с магнитофона¹
Подпрограмма отличается лишь тем, что в случае сбоя или нажатия клавиши F4 управление может передаваться пользовательской ловушке⁴.
Печать символа на дисплей²
Подпрограмма имеет незначительные правки:
Обеспечивается работа произвольных эскейп-комбинаций, отличных от Esc+Y, посредством предустановленной пользовательской ловушки⁵
При очистке экрана по коду 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, чтобы реакцию на клавиши сделать более ортогональнее.
В рамках Монитора данной модификации, занялся написанием пробной оболочки.
Из списка 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.
Поддержать основные 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.
Вглядываясь в архитектуры многих Микро-ЭВМ замечашь, что значительный процент адресного пространства отжирается именно под ПЗУ.
Вот, например, в 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