ПОБЕДИТ - Редактор текстового буфера

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

Moderator: Shaos

User avatar
Alikberov
Doomed
Posts: 347
Joined: 15 Oct 2019 01:10
Location: Tashkent
Contact:

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

Post by Alikberov »

Shaos wrote:У меня кстати так и не работало с X:PC=0000 пока я C9 не поставил в 0000 через M
В строке#894 это происходит и всё верно.

Code: Select all

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;       TEST FOR CALLBACK EXISTING
;       AND CALL IT
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
CALLER: LHLD    BUDDY   ; Загружаем адрес пользовательского "напарника"
        MOV     A,H     ; Сначала - убеждаемся,
        ORA     L       ; что адрес - не НУЛЕВОЙ!
        RZ              ; Если НОЛЬ, "напарник" отсутствует - продолжаем работать.
        PUSH    H       ; Иначе, заносим его адрес в стек и подготавливаем информацию в регистрах
Вроде всё корректно.
Может быть следует убедиться, что в ячейках 7614/7615 вдруг что-то не появляется?
Хотя, код C9 в 0000 для корректной работы - это очень-очень странно! :o
User avatar
Alikberov
Doomed
Posts: 347
Joined: 15 Oct 2019 01:10
Location: Tashkent
Contact:

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

Post by Alikberov »

Оказывается, директивой «GF000» нельзя запускать редактор, так как используются служебные ячейки Монитора и код F0 выводится на экран: Инструкция RET по 0000 не нужна…
Это происходит по причине, так как ячейка 7629 используется под пользовательский символ Табуляции. По «GF000» адрес F000 записывается в ячейки 7627/7628 и дублируется в 7629/762A…

Конкретно в Emu80 директива «U» переходит в DOS и её нельзя использовать для перехода в редактор.

Остаётся лишь команда «JMP F000» по адресу F8D9…F8DB, которая выполняется, если директива не понятна…
На скриншоте я специально ввёл директиву «P» и всё запустилось!
Однако, можно использовать и все остальные комбинации: Цифры, знаки, даже F1-F4, «АР2/Esc» «Пробел» и стрелки, «ПС», «СТР» и «Home» (естественно, только одно нажатие).
Иными словами, сложнее не вызвать Победит, чем запустить!

А так как параметры уже занесены в служебную область, можно прямо ими задать стиль:
  • «P,3C09,3E» (левый край 3C; табуляция 09; правый край 3E)…
  • «P,5B5F,5D» (левый край 5B; табуляция 5F; правый край 5D)…
Т.е. получается практически полный статический контроль над стилем при запуске и включается нумерация строк. :D

Кстати, редактор никак не фильтрует символы с кодами 80…FF: Атрибуты цвета, а также и коды E4/E5 пропускаются на экран. Следовательно, можно и цвет иметь, и знакогенератор переключать (в рамках отображаемых 64 символов панорамы и предварительно настроив режим ВГ75), естественно, через свой код - нажатиями своих каких-то клавиш.
Attachments

Запуск редактора по «P,5B5F,5D»
Запуск редактора по «P,5B5F,5D»
pobedit-start.png (3.11 KiB) Viewed 1148 times

Результат "стилизации" по «P,5B5F,5D»
Результат "стилизации" по «P,5B5F,5D»
pobedit-screen.png (3.08 KiB) Viewed 1148 times

POBEDITU.ROM.zip
Вариант с подавлением символов 0A/0D на экране (правка одной единственной инструкцией XRA A)
(1.77 KiB) Downloaded 57 times

User avatar
Shaos
Admin
Posts: 23676
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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

Post by Shaos »

Alikberov wrote:Конкретно в Emu80 директива «U» переходит в DOS и её нельзя использовать для перехода в редактор.
Там патченный ром, который по U идёт на E000 вместо F000 - просто патчишь его обратно и всё :lol:
см. viewtopic.php?p=171774#p171774
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 347
Joined: 15 Oct 2019 01:10
Location: Tashkent
Contact:

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

Post by Alikberov »

Shaos wrote:
Alikberov wrote:Конкретно в Emu80 директива «U» переходит в DOS и её нельзя использовать для перехода в редактор.
Там патченный ром, который по U идёт на E000 вместо F000 - просто патчишь его обратно и всё :lol:
см. viewtopic.php?p=171774#p171774
Это я понял.
Но директива «P,3C09,3E» тоже работает?
User avatar
Shaos
Admin
Posts: 23676
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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

Post by Shaos »

Старый код может любой неизвестной директивой запускаться?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 347
Joined: 15 Oct 2019 01:10
Location: Tashkent
Contact:

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

Post by Alikberov »

Shaos wrote:Старый код может любой неизвестной директивой запускаться?
И старый, и этот - запускается любой неизвестной директивой из-за особенностей Монитора, а не редактора. :idea:
(Только не GF000!)

Вообще-то можно добавить и первый параметр. Типа:
  • «?<адрес_буфера_текста>,<стиль>,<стиль>»
  • «?<адрес_пользовательского_кода>,<стиль>,<стиль>»
Что сейчас никак не реализовано, даже побочно. :roll:
User avatar
Shaos
Admin
Posts: 23676
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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

Post by Shaos »

А можно без X обойтись? Задавать адрес буфера через первый параметр директивы P

А задавание колбека можно оставить на программный вариант запуска (т.к. обычному пользователю колбек не понятен)
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 347
Joined: 15 Oct 2019 01:10
Location: Tashkent
Contact:

Текстовый редактор ПОБЕДИТ V1.01.1

Post by Alikberov »

Shaos wrote:А можно без X обойтись?
А задавание колбека можно оставить на программный вариант запуска (т.к. обычному пользователю колбек не понятен)
Такая практика завелась на самых началах разработки редактора, чтобы удобнее было отлаживать. :roll:
Shaos wrote:Задавать адрес буфера через первый параметр директивы P
Тоже об этом думаю, учитывая уже всякие трюки, типа «G» с тремя параметрами, о которых раньше, почему-то, не думал…
User avatar
Alikberov
Doomed
Posts: 347
Joined: 15 Oct 2019 01:10
Location: Tashkent
Contact:

Текстовый редактор ПОБЕДИТ V1.01.1 (нужно протестировать)

Post by Alikberov »

Вот, в качестве эксперимента, вариант с запуском только по:

Code: Select all

«P<адрес_буфера>,[<левый_край|табуляция>,<правый_край>]»
При этом, любая другая неизвестная директива сейчас передаёт управление на адрес 0000: Думаю, это - наилучшее решение и пусть уже загруженная программа сама получит право разобраться, запустили её по «G» или одним из остальных 110 способов! :mrgreen:

Есть маленький нюанс: Нельзя просто запускать как «P<адрес_буфера>» и необходимо указать запятую - «P<адрес_буфера>,». Иначе адрес передастся Монитором во второй параметр стиля.

P.S.: Кстати, советую написать свой маленький код с CallBack-функцией, чтобы иметь уверенность, что подверсии редактора ничего не ломают! :wink:
В архиве - пример такого кода.
(Внимание! Редактировать текст конкретно в данном вариант строго не рекомендуется, так как размер двух первых буферов, переключаемых по F1, всего 256 байтов, что при попытке редактирования приведёт к их слиянию. Только буфер #3 (нажатиями F1) расположен выше и имеет полный объём - до адреса 75FF.)
Attachments

POBEDITEST.RKR.zip
Пример организации CallBack-взаимодействия с Победитом
(2.68 KiB) Downloaded 70 times

POBEDITP.ROM.zip
Запуск только по
«P<адрес_буфера>,[<левый_край|табуляция>,<правый_край>]»
(Исправил крошечный глюк, возникший из-за удаления кода вызова директивы X!)
(1.77 KiB) Downloaded 68 times

Пример запуска POBEDITEST.RKR
Пример запуска POBEDITEST.RKR
Снимок экрана_2024-02-18_11-16-32.png (31.22 KiB) Viewed 1015 times

User avatar
Alikberov
Doomed
Posts: 347
Joined: 15 Oct 2019 01:10
Location: Tashkent
Contact:

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

Post by Alikberov »

Кстати, есть ли какой-то положительный опыт в использовании Редактора? :roll:
Или там всё так сложно, что не разобраться? :-?

Сталкиваюсь с критикой на отсутствие всех привычных функций (поиск, замена, копирование), которые я и не предусматривал иначе, как внешним пользовательским CallBack-кодом.
Есть ли какие-то пожелания конкретизировать что-либо?

Например, пример кода выгрузки на магнитную ленту по УС+S? :wink:
User avatar
Alikberov
Doomed
Posts: 347
Joined: 15 Oct 2019 01:10
Location: Tashkent
Contact:

«ПОБЕДИТ» - редактор текстового буфера

Post by Alikberov »

Небольшая поправка.

Статус программы «Победит» понижается с "текстового редактора" до "редактора текстового буфера". :roll:

Причины: Код программы писался в рамках общего проекта ЯВУ Бейсик как продвинутый оператор «INPUT», чтобы закрыть тему проблемы ввода текста навсегда.

Тем самым, «ПОБЕДИТ»:
  1. Не должен уметь загружать файл текста (в Бейсике оператор INPUT вообще только для простого ввода строки)
  2. Не должен уметь сохранять буфер текста в файл
  3. Не должен уметь производить поиск или замену по ключевому шаблону (ни INPUT Бейсика, ни READLN Паскаля такого функционала не включают)
  4. Может использоваться в таких пакетах, как ASSEMBLER, PASCAL, FORTH, подменяя построчный редактор текста «ED.MIKRON»
  5. Тем не менее, гибкости кода редактора хватает, чтобы быть оболочкой "верхнего уровня", откуда функциональными клавишами можно проделать всё то, чего в нём не хватает (поиск/замена слов, запуск трансляции, сохранение на диск и т.п.)
P.S.: Иными словами, подпрограмму F8EE Монитора можно исключить из ПЗУ и вызывать «ПОБЕДИТ»: Получился бы вариант Монитора, где можно описывать своеобразные пакетные сценарии (ещё не «Batch» или «Bash», но уже не привычная унылая CLI.)
Post Reply