Важная информация

User Tag List

Страница 1 из 3 123 ПоследняяПоследняя
Показано с 1 по 10 из 21

Тема: Текстовый редактор для РЛК с UnWrap режимом

  1. #1
    Member Аватар для Alikberov
    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    116
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    22 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

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

    Как известно, для РЛК существовало, как минимум, два редактора:
    • ED.МИКРОН
    • WEL
    Однако, у этих редакторов имеются три небольших недостатка:
    • Жёсткая посадка на адрес 0000
    • Ограничение на количество символов в строке
    • Занимаемое в ОЗУ место
    Одно время среди коллег витала в воздухе мысль, что неплохо бы иметь для РЛК простой экранный редактор, доступный сразу по включению из дополнительного ПЗУ.
    Оригинальный Монитор РЛК имеет в странную директиву U с переходом на адрес F000, что предоставило бы очень простой запуск любого дополнительного кода.

    Ещё со времён DOS всегда интересовал механизм кода, отвечающий за вывод/редактирования текста оболочками Norton/Volcov Commander в режиме UnWrap.
    Этим месяцем (апрелем) решению вопроса разработки подобного редактора было посвящено всё свободное время.

    Вниманию любителей РЛК представляется ещё один текстовый редактор:
    • Поддержка строк длинною до 255 символов
    • Стандартное отображение отступов табуляции
    • Горизонтальная и вертикальная прокрутки
    • Поддержка пользовательского кода (транслятора/компилятора/информатора)
    • Поддержка светового пера (экспериментальная)


    Весь цикл разработки и отладки кода ведётся в известном онлайн-эмуляторе, поддерживающим световое перо мышью ПК и загрузку внешних файлов.
    Именно в конкретном эмуляторе:
    • Работают по назначению клавиши DELETE/END/HOME
    • Курсор в тексте быстро позиционируется мышью
    • Клавиша F1 или двойной клик мышью вызывает "контекстное меню" (транслятора/компилятора/информатора)
    • Клавиши F2/F3 прокручивает окно текста
    • Нажатие мышью за пределами региона редактирования совершает вертикальную или горизонтальную прокрутку


    P.S.: Не зная, как Администрация отнесётся ко внешним ссылкам, предоставляю лишь скриншот. А все желающие проверить, могут получить ссылку через ЛС.
    Нажмите на изображение для увеличения. 

Название:	rk86-light-editor.jpg 
Просмотров:	110 
Размер:	27.3 Кб 
ID:	78748
    Нажмите на изображение для увеличения. 

Название:	rk86-light-editor-pan1.jpg 
Просмотров:	73 
Размер:	26.4 Кб 
ID:	78749
    Последний раз редактировалось Alikberov; 30.04.2023 в 22:28. Причина: переименовал

  2. Эти 4 пользователя(ей) поблагодарили Alikberov за это полезное сообщение:

    BYTEMAN (12.04.2023), cy6 (11.04.2023), Denn (02.05.2023), shapipovo (26.04.2023)

  3. #1
    С любовью к вам, Yandex.Direct
    Размещение рекламы на форуме способствует его дальнейшему развитию

  4. #2
    Administrator Аватар для CityAceE
    Регистрация
    13.01.2005
    Адрес
    г. Москва
    Сообщений
    4,574
    Записей в дневнике
    7
    Спасибо Благодарностей отдано 
    399
    Спасибо Благодарностей получено 
    1,207
    Поблагодарили
    394 сообщений
    Mentioned
    48 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alikberov Посмотреть сообщение
    как Администрация отнесётся ко внешним ссылкам
    По этому поводу на форуме нет никаких ограничений.
    С уважением, Станислав.

  5. Этот пользователь поблагодарил CityAceE за это полезное сообщение:

    Alikberov (11.04.2023)

  6. #3
    Member Аватар для Alikberov
    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    116
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    22 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Arrow Онлайн эмуляция и rkr-образ

    Цитата Сообщение от CityAceE Посмотреть сообщение
    По этому поводу на форуме нет никаких ограничений.
    Спасибо!

    Запустить UnWrap редактор.

    Кто желает проверить в других эмуляторах или на "железе", может скачать файл rk86-light-editor-alpha1.rkr.zip
    (Внимание! Файл содержит модифицированный вариант чисто для ознакомления.)
    После загрузки rkr-файла и запуском по G0, выйдет уведомление с приглашением откорректировать регистры PC и DE. Для оценки следует выставить PC=0800 и DE=2100.
    Последний раз редактировалось Alikberov; 12.04.2023 в 11:09. Причина: Добавлен образ rkr-файла

  7. Этот пользователь поблагодарил Alikberov за это полезное сообщение:

    cy6 (11.04.2023)

  8. #4
    Activist Аватар для cy6
    Регистрация
    27.04.2015
    Адрес
    г. Пенза
    Сообщений
    370
    Спасибо Благодарностей отдано 
    251
    Спасибо Благодарностей получено 
    56
    Поблагодарили
    32 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    API к редактору будет какое то?
    Точки подключения других программ, таких как сохранить/загрузить/компилировать и т. д.
    wtf

  9. #5
    Member Аватар для Alikberov
    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    116
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    22 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от cy6 Посмотреть сообщение
    API к редактору будет какое то?
    Точки подключения других программ, таких как сохранить/загрузить/компилировать и т. д.
    Всё зависит от того, на сколько востребована подобная поделка сообществом?
    На какой адрес его посадить (типа F000 под дополнительное ПЗУ, чтобы всегда под рукой был по директиве U)?

    На данный момент редактор при нажатии клавиш и по клавише F1 обращается к пользовательскому коду через единую точку (чисто для отладки), так как над API я ещё не думал.

  10. #6
    Member Аватар для Alikberov
    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    116
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    22 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Post Редактор текста для ПЗУ

    Практически полностью переписал весь код редактора и избавился от обращений к подпрограмме F809 Монитора.
    Теперь код сам контролирует весь экран, что позволило поднять производительность.
    А подпрограмма вывода символа может работать независимо.

    Редактирование строки также заметно ускорилось.
    Раньше вставка/удаление символа сдвигало все данные от позиции курсора до конца всего текстового буфера, что требовало всё больше времени.
    Теперь редактирование происходит в пределах ограниченной 256 байтами буферной зоны, создаваемой внутри цельного текста с заполнением кодом 0A.
    Буферная зона создаётся при первом изменении строки и удаляется при переходе к другим строкам.

    При первом вызове редактора требуется предустановка регистров (директивой X Монитора).
    • PC - Точка CallBack-вызова пользовательского кода
    • HL - Адрес буфера текста листинга
    • DE - Предустановка позиции курсора


    При клике мышью (световым пером) и при нажатиях клавиш F1-F4 или УС+A-Z происходит CallBack пользовательского кода, если точка входа в него определена (PC не 0000).
    При этом, подпрограмме пользователя передаётся следующая информация (через регистры):
    • BC - Адрес на текущую редактируемую строку
    • HL - Указатель на самую верхнюю отображаемую сейчас строку
    • DE - Шестнадцатеричный номер текущей редактируемой строки
    • A - Позиция в строке, на которую сейчас указывает курсор (номер символа в памяти, начиная с единицы)
    • Флаги: SF - Признак "буферной зоны"; ZF - Клавиши F1-F4 / УС+A-Z; PF - Двойной клик световым пером (мышью) по знакоместу; CF - Экран будет обновлён
    Таким образом, подпрограмма пользователя получает достаточно информации о состоянии редактора на момент.
    Подпрограмма обязана перед возвратом установить флажок CF. Иначе экран будет обновлён и устранится "буферная зона", что занимает больше времени и рекомендуется в исключительных случаях (трансляции/компиляции).

    Вариант для ПЗУ можно посмотреть по ссылке.
    При этом, по G0 запускается редактор в обычном режиме, а по G1 - с пользовательским отладчиком.

    Клавиша END устанавливает экран и курсор в конец строки.
    Повторное нажатие устанавливает курсор в конец экрана.
    Последующие нажатия пролистывают текст листинга быстро вперёд на 25 строк.

    Клавиша HOME устанавливает курсор в начало строки.
    Повторное нажатие устанавливает курсор в начало экрана.
    Последующие нажатия прокручивают листинг обратно на одну строку.

    P.S.: Редактор практически стабилен, но требует соблюдения некоторых элементарных правил.
    Нельзя редактировать текст при холостом пуске, когда на экране редактирования отобразилась версия реализации.
    Нельзя превышать предельный размер строки (слиянием строк).

  11. Эти 2 пользователя(ей) поблагодарили Alikberov за это полезное сообщение:

    cy6 (23.04.2023), Pyk (26.04.2023)

  12. #7
    Member Аватар для Alikberov
    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    116
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    22 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

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

    Для РАДИО-86РК существует, как минимум, два текстовых редактора:

    Однако, на практике хотелось бы что-нибудь компактнее и с другой адресной посадкой. Ещё лучше, если код редактора уместился бы в другое ПЗУ, так как официальный Монитор по директиве U уходит на адрес F000.

    Чтобы успеть к первомаю, пришлось здорово потрудиться восьмибитным мозгом и решить множество мелких проблем, буквально одолев их и победив.

    Потому, Вашему вниманию представляется версия текстового редактора с официальным названием:

    ПОБЕДИТ
    Представляемый текстовый редактор разработан специально на работу в дополнительном ПЗУ F000-F7FF, с аккуратным использованием области служебных ячеек Монитора, чтобы дать пользователю максимальный объём ОЗУ.
    Редактор имеет самый минимальный функционал, достаточный для элементарного редактирования текстов. Однако, с помощью пользовательского кода функционал интерфейса редактора можно расширить с помощью CallBack-вызовов. Для этого предоставляется небольшой API.

    Список точек вызова основных API:
    • F000 - Обычный запуск редактора (директива U Монитора)
    • F003 - Запуск редактора с указанием пользовательского кода (в HL)
    • F006 - Переключение (с предустановкой) буфера листинга (адрес в HL)
    • F009 - Переключение (без предустановки) буфера листинга (адрес в HL)
    • F00C - Панорамная прокрутка листинга (CF=0 - вперёд / CF=1 - назад)
    • F00F - Вертикальная прокрутка листинга (CF=0 - вперёд / CF=1 - назад)
    • F012 - Помещение в стек адреса знакоместа из непосредственных констант
    • F018 - Помещение в стек адреса знакоместа по позиции X=E и Y=D
    • F01B - Помещение в стек адреса знакоместа (без растровой коррекции)

    Как видно, никаких средств текстовой обработки не предоставляется.
    Однако, рассмотрим основной набор подпрограмм.

    CALL F003 - Передача управления редактору с указанием ассистента
    Явно передать CallBack-адрес на пользовательский код нужно регистром HL.
    При этом, если буфер текста листинга не был предустановлен, директивой X Монитора пользователю предложится это сделать самостоятельно модификацией регистра HL.

    CALL F006 - Предустановка буфера листинга
    Данную подпрограмму следует вызывать перед передачей управления самому редактору, чтобы через регистр HL установить указатель на основной буфер листинга.

    CALL F009 - Переключение буфера листинга
    Пользовательский код может переключать текстовый буфер на лету, передавая адрес регистром HL. Необходимости указания на самое начало буфера нет, так как вычисление номера верхней отображаемой строки происходит автоматически.

    CALL F00C - Динамическая прокрутка листинга на экране
    Для прокрутки текста листинга на 1 символ влево или вправо, через флаг CF указывается направление. При этом подпрограмма возвращает флаг ZF в случае, если прокрутка не возможна по причине достижения начала строки или предела панорамы.

    CALL F00F - Динамическая прокрутка листинга на экране
    Для прокрутки текста листинга на 1 строку вверх или вниз, через флаг CF указывается направление. При этом подпрограмма возвращает флаг ZF в случае, если прокрутка не возможна по причине достижения начала или конца текста листинга.

    CALL F012 - Помещение в стек адреса экранного знакоместа по константным координатам
    Подпрограмма достаточно быстро (без цикла) математически вычисляет адрес и возвращает его в стеке. После обращения к подпрограмме, адрес следует извлекать любой командой POP.
    Координаты знакоместа следует указать двумя байтами непосредственно за командой CALL.
    При этом производится незначительная коррекция по знакоместу, чтобы адаптировать вывод под специфику дисплея.

    CALL F018 - Помещение в стек адреса экранного знакоместа по координатам в DE с коррекцией
    Подпрограмма достаточно быстро (без цикла) математически вычисляет адрес и возвращает его в стеке. После обращения к подпрограмме, адрес следует извлекать любой командой POP.
    Координаты знакоместа следует указать регистрами D (позиция по Y) и E (позиция по X).
    При этом производится незначительная коррекция по знакоместу, чтобы адаптировать вывод под специфику дисплея.

    CALL F01B - Помещение в стек адреса экранного знакоместа по координатам в DE без коррекции
    Подпрограмма достаточно быстро (без цикла) математически вычисляет адрес и возвращает его в стеке. После обращения к подпрограмме, адрес следует извлекать любой командой POP.
    Координаты знакоместа следует указать регистрами D (позиция по Y) и E (позиция по X).
    Никакой коррекции по знакоместу не производится.

    Список критически важных ячеек программы:
    • F018-F01A - Три команды для растровой коррекции на ±3 знакоместа (настроить перед прошивкой ПЗУ)
    • F040/F041 - Начальные координаты (обычно 8 и 3) курсора (настроить перед прошивкой ПЗУ)
    • F4DA-F4DC - Установка флажка подпрограммы опроса клавиатуры (F812), чтобы код пользователя мог прочитать код функциональной клавиши обычным вызовом CALL F803 (читать про флаг ZF ниже)
    • F7FE/F7FF - Адрес входа в редактор (просто указывает на расположение основного кода)

    Калибровка смещения знакомест является комплексной операцией с необходимостью взаимосвязанной правки ячеек. Вот пример:
    • Обычное позиционирование: F018 [00 00 00]; F040 [08 03]
    • Смещение на 1 знакоместо: F018 [13 00 00]; F040 [09 03]
    • Смещение на 2 знакоместа: F018 [13 13 00]; F040 [0A 03]
    • Смещение на 3 знакоместа: F018 [13 13 13]; F040 [0B 03]


    Служебные ячейки для стилизация интерфейса редактора:
    • 7629 - Код символа заполнения пространства табуляции
    • 762A - Код символа обрамления левого края текстовой области
    • 762B - Код символа обрамления правого края текстовой области
    • 762D - Маскирование столбца счётчика строк (слева от текста)
    • 762E - Корректировочное смещение знакоместа светового пера
    • 7633 - Код символа переполнения панорамы


    Служебные ячейки функционального механизма редактора:
    • 7614 (PC директивы X) - CallBack-адрес на пользовательский код
    • 7616 (HL директивы X) - Адрес в текстовую область листинга
    • 7618 (BC директивы X) - Счётчик строк
    • 761A (DE директивы X) - Позиция курсора относительно области текста
    • 761C (SP директивы X) - Указатель на начало текущей строки с курсором
    • 761E (AF директивы X) - Значение панорамной прокрутки и флаги
    • 7634 - Указатель на 25 строк выше (используется для PageUp-операции)
    • 7636 - Указатель на 1 строку выше (используется курсорной клавишей)
    • 7638-7668 - Массив 25 указателей на каждую из 25 отображённых строк
    • 766A - Указатель на 26 скрытую строку (используется PageDown-операцией)
    • 766C/766D - Двоично-десятичный номер верхней скрытой строки (используется прокруткой)
    • 766E/766E - Двоично-десятичный номер нижней скрытой строки (используется прокруткой)


    Клавиши работают следующим образом:
    • HOME с прокрученным экраном возвращает его на 64 позиций назад
    • HOME из любой позиции в строке устанавливает курсор в начало строки
    • HOME в начале любой строки устанавливает курсор в начало экрана
    • HOME в начале экрана прокручивает его на 25 строк вверх (аналогично Page Up)
    • END/СТР устанавливает курсор в конец строки
    • END/СТР в конце строки устанавливает курсор в конец экрана
    • END/СТР в конце экрана прокручивает его на 25 строк вниз (аналогично Page Down)
    • DEL/ПС в любой позиции строки удаляет символ под курсором
    • DEL/ПС в конце строки производит слияние со следующей строкой
    • BS/ЗАБОЙ в любой позиции строки затирает символ перед курсором
    • BS/ЗАБОЙ в начале строки производит слияние с предыдущей строкой


    Если указан адрес вызова пользовательской вспомогательной подпрограммы, обращение к ней происходит при нажатиях любой клавиши или клике "световым пером".
    При этом через регистры общего назначения передаётся следующая информация:
    • BC - Шестнадцатеричный индекс (редактируемой) текущей строки
    • DE - Адрес на начало самой верхней отображаемой строки
    • HL - Адрес на начало текущей (редактируемой) строки
    • A - Номер столбца по позиции курсора (начало - 01) с учётом панорамы
    • CF флаг - Экран готовится к полной перерисовке (при клике "световым пером" или перемещением стрелками)
    • PF флаг - Двойной (повторный) клик "светового пера" по знакоместу с курсором
    • ZF флаг - Клавиши F1-F4, АР2 или УС+A-Z (код читается через вызов F803 обязательно, иначе возникнет зацикливание редактора/!\)
    • SF флаг - Буферная строка (редактирование в активном состоянии)

    Всего этого вполне достаточно, чтобы реализовать все необходимые операции работы с текстом. В качестве примера, УС+D удаляет текущую строку, а УС+У/К/Е/В прокручивают экран в одном из четырёх направлений.

    Как всегда, вот ссылка на онлайн демонстрацию с кодом для ПЗУ (F000-F7FF) и rkr-файл.

    P.S.: За месяц был проделан практически титанический труд по разработке кода с чистого листа.
    Потому, основной код перенесён именно в область F000-F7FF, чтобы всегда под рукой иметь инструмент для личных нужд. В частности, для разработок собственных интерпретаторов языков высокого уровня.

    P.P.S.: Вопрос к модераторам: Можно ли переименовать тему (на обновлённый заголовок) или проще открыть новую?
    Вложения Вложения
    Последний раз редактировалось Alikberov; 01.05.2023 в 09:06. Причина: неточности в описании подпрограмм

  13. Этот пользователь поблагодарил Alikberov за это полезное сообщение:

    Oleg N. Cher (04.05.2023)

  14. #8
    Member Аватар для Alikberov
    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    116
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    22 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

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

    Так как версия достаточно стабильная, выложил исходный текст в свой репозиторий.
    Буква «U» в данном контексте означает именно версию для ПЗУ F000-F7FF с вызовом директивой «U» Монитора…

    Листинг расчитан исключительно для вставки в онлайн-эмулятор и достаточно комментирован.

  15. #9
    Activist Аватар для cy6
    Регистрация
    27.04.2015
    Адрес
    г. Пенза
    Сообщений
    370
    Спасибо Благодарностей отдано 
    251
    Спасибо Благодарностей получено 
    56
    Поблагодарили
    32 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    Цитата Сообщение от Alikberov Посмотреть сообщение
    ПОБЕДИТ
    ??

    Цитата Сообщение от Alikberov Посмотреть сообщение
    F000-F7FF
    Место интересное, но тут же предлагается знакогенератор (загружаемый) хранить.

    - - - Добавлено - - -

    Как в КР-04. На чтение ПЗУ, на запись ОЗУ.

    - - - Добавлено - - -

    Но с другой стороны, ничто не помешает поступить как в КР-04
    Там аж три РФки по 2 кбайта, в окне F800h-FFFFh

    В любом случае считаю, что к области программ BIOS и DOS (E000h-FFFFh) лучше относиться аккуратнее.
    wtf

  16. #10
    Member Аватар для Alikberov
    Регистрация
    11.04.2023
    Адрес
    г. Ташкент, Узбекистан
    Сообщений
    116
    Спасибо Благодарностей отдано 
    25
    Спасибо Благодарностей получено 
    49
    Поблагодарили
    22 сообщений
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    По умолчанию

    ПОБЕДИТ - твёрдый сплав: Аналогично как «ED.МИКРОН», здесь «POB.EDIT» означает…
    Цитата Сообщение от cy6 Посмотреть сообщение
    Место интересное, но тут же предлагается знакогенератор (загружаемый) хранить.

    Как в КР-04. На чтение ПЗУ, на запись ОЗУ.
    Школьником сталкивался один раз с «КР-04» (A.K.A. «Согдиана-2» (не «Согдиана-1»), так как клавиатура была МС-7007, цвет и игры «Биоритмы» в графике и цвете были с «Бешенными роботами», «Роликами» и «Бомбой» на двух кассетах), потому плохо знаю архитектуру. Но, код редактора разрабатывался исключительно под свой КР-03.

Страница 1 из 3 123 ПоследняяПоследняя

Информация о теме

Пользователи, просматривающие эту тему

Эту тему просматривают: 1 (пользователей: 0 , гостей: 1)

Похожие темы

  1. TS-Config работа с текстовым режимом
    от maxximpossible в разделе ZXEvo
    Ответов: 4
    Последнее: 12.01.2021, 08:56
  2. Ответов: 55
    Последнее: 20.06.2020, 10:41
  3. Текстовый редактор для Вектора
    от electroscat в разделе Вектор
    Ответов: 5
    Последнее: 26.05.2020, 12:11
  4. Текстовый редактор под СР/М
    от rw6hrm в разделе Оси
    Ответов: 9
    Последнее: 12.10.2018, 13:41
  5. ПЗУ для 48к с турбо-режимом
    от jigitt101 в разделе Память
    Ответов: 8
    Последнее: 11.02.2009, 17:13

Ваши права

  • Вы не можете создавать новые темы
  • Вы не можете отвечать в темах
  • Вы не можете прикреплять вложения
  • Вы не можете редактировать свои сообщения
  •