nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 09 May 2024 21:15



Reply to topic  [ 84 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6  Next
Текстовый редактор ПОБЕДИТ 
Author Message
Devil

Joined: 26 May 2003 06:57
Posts: 870
Reply with quote
Pyk wrote:
b2m wrote:
Исправил эмулятор. Теперь грузит без ошибки.

Сделал какую-то проверку в итоге?

Если первый байт E6, то предполагаем, что следующие 4 байта это начало и конец. Вычисляю длину, сравниваю с длиной остатка плюс-минус 16 байт. Ну ещё проверяю стартовый адрес, чтобы не выходил за рамки ОЗУ.

_________________
Страничка эмулятора наших компьютеров
http://bashkiria-2m.narod.ru/


14 Apr 2023 01:09
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 326
Location: Tashkent
Reply with quote
Со светлым праздником Пасхи!

Отладил код вертикальной реверсивной прокрутки посредством SPHL/XTHL.
После запуска выводится дамп и происходит его прокрутка вниз.
При нажатии стрелки вверх производится прокрутка вверх.

На перенос двух символов - 41 такт.
На перенос 50 символов - 220 тактов циклом и 356 - рядом.
Соответственно, 356*32 = 11392 такта на область 64x25.

Вертикальную прокрутку сделать быстрее легче, так как после прокрутки экрана достаточно вывести одну строку листинга вверху или внизу.
А вот при горизонтальной - приходится пробегать по всем строчкам и вынимать по одному скрытому символу.

В общем, стрелками можно прокручивать во всех четырёх направлениях. Причём, стрелка влево работает медленнее, чем вправо, так как отображает все 25 открывшихся символа слева, тогда как справа - только один. Это для сравнения производительности кода и оценки затрат на парсинг строк.

ВАЖНО
По ошибке был вкачан образ файла со сбитым указателем.
Необходимо его перескачать.

БАГ: Обнаружен при прокрутке на 17 знакомест в строке табуляций.
Пока не устраняется никак. Даже в стабильной версии.

P.S.: На сколько ли такая скорость приемлема?
(Думаю, если быстрее директивы D - нормально.)


Attachments:
File comment: Оценочный код горизонтальной и вертикальной прокрутки
rk86-horz-vert-scroll.rkr.zip [2.97 KiB]
Downloaded 150 times
16 Apr 2023 08:44
Profile WWW
Maniac

Joined: 21 Jan 2003 04:08
Posts: 224
Reply with quote
Получилось отлично!
Вверх, вниз и вправо - просто огонь, влево - тоже вполне комфортно, особенно, если прокрутка недалеко (к тому же допускаю, что тут еще возможна оптимизация).
Отзывчивость клавиатуры при опросе через F81B тоже отличная! (хотя не знаю, что будет с дребезгом на реале)

41 такт на пару символов очень неплохо. В моем примере 34, но это не критично, раз оказалось по каким-то причинам удобнее выбрать другой вариант.

_________________
Эмулятор Emu80


17 Apr 2023 13:28
Profile ICQ WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 326
Location: Tashkent
Reply with quote
Pyk wrote:
Отзывчивость клавиатуры при опросе через F81B тоже отличная! (хотя не знаю, что будет с дребезгом на реале)
Для игры было бы нормально. Но это - редактор текста. :roll:
Pyk wrote:
В моем примере 34, но это не критично, раз оказалось по каким-то причинам удобнее выбрать другой вариант.
Унификация подпрограммы до реверса (через флаг CF передаётся направление прокрутки).
Pyk wrote:
Вверх, вниз и вправо - просто огонь, влево - тоже вполне комфортно, особенно, если прокрутка недалеко (к тому же допускаю, что тут еще возможна оптимизация).
Вот ума не приложу, как оптимизировать ключевую подпрограмму возврата позиции в строке по экранной позиции (когда курсор вдруг попадает в центр табуляции, его нужно выровнять).
 "Нормализатор по ИКС"
Code:
;;;;;;;;;;;;;;;;;;;;;;;;;
;       NORMALIZE "X"
;       INPUT:  E = Невыровненная позиция в строке (экранная)
;               HL = Указатель на начало строки
;       OUTPUT: E = Выровненная позиция (строковая)
;               A = Последний символ по позиции
;               CF = Ошибка переполнения указателя позиции
;;;;;;;;;;;;;;;;;;;;;;;;;
NORMAX: LDA     PANX    ; Загружаем значение "панорамы" по ИКС
        ADD     E       ; и складываем с позицией каретки
        RC              ; Возвращаемся, если позиционное переполнение
        INR     A       ; Дополняем значение прокрутки
        MOV     B,M     ; Считываем символ в буферный регистр
        MVI     E,0FFH  ; В начале - -1 символ,
NORMAN: MOV     D,A     ; Панорамная прокрутка - в D
        MVI     C,000H  ; Обнуляем счётчик табуляции
NORMAR: MOV     A,B     ; Возвращаем предыдущий символ из буфера
NORMAL: ORA     A       ; Сбрасываем признак переполнения
        INR     E       ; Инкремент счётчика позиций
        INR     C       ; Инкремент счётчика табуляции
        DCR     D       ; Счётчик "проглоченных" прокруткой символов
        RZ              ; Возвращаемся, если перешли к искомому
        MOV     A,M     ; Считываем символ строки
        ORA     A       ; Строка - последняя в тексте и оборвалась?
        RZ              ; Возвращаемся
        CPI     00DH    ; Строка завершилась переходом на новую строку?
        RZ              ; Возвращаемся
        INX     H       ; Переходим к очередному символу
        CPI     009H    ; Всё, что угодно, кроме символа табуляции
        JNZ     NORMAL  ; продолжает цикл сканирования строки
        MOV     B,A     ; Запоминаем символ табуляции в буфере
        MOV     A,C     ; Счётчик экранной позиции в табуляции
        ANI     007H    ; всегда кратен восьми. Кратен ли сейчас?
        JZ      NORMAR  ; Игнорируем пропуск знакомест, если да
        ORI     0F8H    ; Иначе, дополняем величину до отрицательной
        ADD     D       ; Корректируем позицию панорамы
        JC      NORMAN  ; Перенос указывает, что и эта табуляция скрыта
        MOV     A,B     ; Иначе, символ табуляции необходимо вернуть
        RET
Тормозит как раз на ней, так как никаких промежуточных буферов не используется.
Код подпрограммы до безобразия прост.
  • 70 тактов в цикле на очередной печатный символ
  • 102 такта цикла на холостом символе табуляции (закрывающем восьмёрку знакомест)
  • 135 такта цикла на заполняющем символе табуляции с выравниванием до восьми

При прокрутке вперёд необходимо считать открытый символ позиции #63 и отобразить его справа.
При прокрутке назад нужно считать скрытый, но уже открытый символ позиции #0 для отображения слева.

Нажатие стрелки влево производит сканирование всех 25 строк.
А вот стрелкой вправо открывается символ только одной верхней строки - остальное я заглушил из-за диких тормозов.
(Можете по адресу 00BC вписать байт 19 и убедиться.)

Как видно, горизонтальная прокрутка экранным скроллингом - бесполезная трата кодового пространства без видимого ускорения, так как проще обновить весь фрагмент листинга на экране.
И по тактам дешевле, так как все нужные символы из буфера текста сразу копируются на экран, тогда как прокрутка отнимает ещё порцию драгоценных тактов.

Вывод листинга, если прокрутить вправо до позиции 18, даёт сбой табуляции на строке №9.
Прокруткой влево до отказа (не отпуская клавиши) будет видно заполнение знакомест табуляцией (человечками) с верной расстановкой - сбоит код внутри отображения строк листинга: Вот с этим мне нужно разобраться.

ВАЖНО
  • Удалось исправить глюк с табуляцией (всего одного условного перехода достаточно кое-где)
  • Добавил оперативный инкремент/декремент десятичной нумерации строк при прокрутке


Attachments:
File comment: Исправленный демонстрационный вариант
rk86-horz-vert-scroll.rkr.zip [3.06 KiB]
Downloaded 142 times
17 Apr 2023 17:33
Profile WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Pyk wrote:
Alikberov wrote:
На самом деле, так ещё перед каждым выводом строки стоит вызов F812, иначе клавиатура очень вяло реагирует.

Неплохо бы вообще от F812 избавиться, как источника тормозов. А в идеале избавиться и от F803 и постараться сделать все на F81B ;) ...

Тут ещё надо бы в коды F812 и F81B посмотреть - правильно ли сделаны эти функции.
F812 - должна быть короткая и быстрая - есть или нет нажатие.
F81B - более длинная и медленная, так как выдаёт код клавиши.

Но, к примеру, в некоторых вариантах системных ПЗУ, в частности, "Специалиста", это
фактически одна и та же функция.

_________________
iLavr


18 Apr 2023 10:50
Profile
Maniac

Joined: 21 Jan 2003 04:08
Posts: 224
Reply with quote
Я бы наверное ввел небольшой буфер и хранил для каждой из 25 отображаемых строк как минимум адрес начала строки, текущие адреса или смещения начала и конца. Наверное, еще какое-то смещение табуляции придется хранить. При каждом скроллинге все это можно быстро обновлять, полное сканирование, да и то конкретной строки, понадобится, наверное только если наталкиваемся на табуляцию. Это навскидку, надо бы додумать эту идею...
...
F812 внутри вызывает F81b, причем неоднократно, так что она точно медленнее, чем F81B. К тому же при нажатии на клавишу F812 отрабатывает с задержкой и пищит, зато потом F803 выполняется без задержки и сразу выдает код.

_________________
Эмулятор Emu80


18 Apr 2023 13:10
Profile ICQ WWW
Supreme God
User avatar

Joined: 21 Oct 2009 08:08
Posts: 7777
Location: Россия
Reply with quote
Pyk wrote:
F812 внутри вызывает F81b, причем неоднократно, так что она точно медленнее, чем F81B. К тому же при нажатии на клавишу F812 отрабатывает с задержкой и пищит, зато потом F803 выполняется без задержки и сразу выдает код.

Это в "Радио-86РК" так? :o F812 ещё и пищит? :esmile:

_________________
iLavr


18 Apr 2023 13:51
Profile
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 326
Location: Tashkent
Reply with quote
Pyk wrote:
Я бы наверное ввел небольшой буфер и хранил для каждой из 25 отображаемых строк как минимум адрес начала строки, текущие адреса или смещения начала и конца. Наверное, еще какое-то смещение табуляции придется хранить. При каждом скроллинге все это можно быстро обновлять, полное сканирование, да и то конкретной строки, понадобится, наверное только если наталкиваемся на табуляцию. Это навскидку, надо бы додумать эту идею...
Как говорил выше, редактор затачивается так, чтобы дать пользователю максимальный объём памяти. Потому используются только служебные ячейки Монитора. В частности, 7634-766F служат буфером с указателями на 27 отображаемых строк (25 + одна перед верхней + одна после нижней).

К тому же, не забывать нужно правило оптимизации: По скорости или по объёму памяти.
Очевидно, что конкретно данный код затачивается под компактность и, соответственно, будет притормаживать местами. Увы. :roll:

Вот на днях приснился трюк для ускорения редактирования строки.
Сейчас тот код просто двигает целые килобайты вперёд для вставки одного символа. Что жутко медленно.
Есть идея трюка, когда редактируемая строка расширяется до максимальных 256 байтов при переходе на неё и ужимается уходом с неё.
Это позволит обойтись без промежуточных буферов и достаточно быстро редактировать её.
Так как 0D служит завершением строки, предполагается использовать парный код 0A для заполнения свободных ячеек в расширенной редактируемой строке.
Код ещё не пробовал писать, так как сейчас переписываю весь механизм реакции на клавиши, избавившись от F809/F821 и позиционируя курсор напрямую в ВГ75.
Pyk wrote:
F812 внутри вызывает F81b, причем неоднократно, так что она точно медленнее, чем F81B. К тому же при нажатии на клавишу F812 отрабатывает с задержкой и пищит, зато потом F803 выполняется без задержки и сразу выдает код.
Подпрограмма F812 использует ячейку 7609 для хранения кода нажатой клавиши и 760B для задержки перед очередным повтором символа.
Если в ячейку 760B записывать малые значения при кодах 08/18/19/1A в 7609, то можно добиться скорого срабатывания стрелочных клавиш.
Однако, становится неудобно этим курсором управлять, так как он начинает пол экрана пролетать, не лучше, чем при простом обращении к F81B.
Наверное, нужно следить за позицией курсора и контролировать скорость именно на границах области текста, где производится прокрутка. Но всё это усложнит код.

P.S.: Кому-нибудь нужен текстовый редактор в ПЗУ F000-F7FF или от меня ждут текстовый скроллер-шутер? :P


18 Apr 2023 14:50
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 326
Location: Tashkent
Reply with quote
В общем, кое-что кое-как получилось.
Правда, глюков пока очень много, но основной функционал реализован.
К сожалению, код вышел очень разбухшим и достиг практически отметки в 2 Кб.

P.S.: Думаю, отзывчивость на клавиши теперь немного выше.
Написал две подпрограммы - EXPAND и SHRINK, выполняющие противоположные действия.
Благодаря этому, активная редактируемая строка заполняется кодом 0A и становится подбуфером.
Соответственно, раздвигать байты в её пределах стало намного быстрее.


Attachments:
File comment: Сырой вариант чисто для оценки отзывчивости
rk86-editor-raw.rkr.zip [3.76 KiB]
Downloaded 139 times
19 Apr 2023 18:35
Profile WWW
Maniac

Joined: 21 Jan 2003 04:08
Posts: 224
Reply with quote
Lavr wrote:
Это в "Радио-86РК" так? :o F812 ещё и пищит? :esmile:

Да, и во многих (если не всех) РК-подобных тоже.

_________________
Эмулятор Emu80


20 Apr 2023 05:42
Profile ICQ WWW
Maniac

Joined: 21 Jan 2003 04:08
Posts: 224
Reply with quote
Alikberov wrote:
В общем, кое-что кое-как получилось.

Ну, не скроллер-шутер, конечно, но вполне достойно и юзабельно для эпизодического использования, особенно со световым пером ;)
Надеюсь, оставшегося места до 2 Кб будет достаточно для исправления глюков...

_________________
Эмулятор Emu80


20 Apr 2023 13:29
Profile ICQ WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 326
Location: Tashkent
Reply with quote
Практически воссоздал функционал предыдущей версии без использования подпрограмм вывода символа Монитора.
(Подпрограмма F809 может работать отдельным потоком.)

Очень капризный код получился и местами продолжает глючить, хотя и не критично.

После запуска G0 следует предустановить регистры:
  • PC - Адрес пользовательского кода (на "ленте" - 0800)
  • HL - Адрес буфера текста листинга (на "ленте" - 0A00)
  • DE - Координаты курсора для предустановки
Максимальная длина строки - 254 символа. Иначе - никаких гарантий.
Теперь отклик на клавиши стал несколько резвее.

Клавиши F1-F4 или двойной клик мышью по знакоместу вызывает пользовательскую оболочку (здесь она просто чистит экран, сигнализируя о запуске).
Всё остальное работает примерно так же, как и в прошлой (стабильной) версии.

Очень много времени отняли процедуры прохода курсором по позициям с табуляцией и только сегодня удалось разобраться в некоторых нюансах. Теперь стрелки влево-вправо на табуляциях корректно их проскакивают.
За исключением случая, когда экран прокручен, а курсор двигается влево в табуляцию: Там прокрутка идёт очень медленно.
Вот движение вправо и вставка табуляции за правый край области всё нормально отрабатывает.

Вот, как всегда, ссылка на онлайн демонстрацию прямо в ПЗУ через директиву U.
(Готовый повторный запуск через G0 или G1.)
Как видно, через регистры передаётся в пользовательский код вся нужная информация:
  • BC - Указатель на начало редактируемой строки
  • DE - Шестнадцатеричный номер редактируемой строки
  • HL - Адрес на первую отображаемую на экран строку в буфере
  • A - Столбец под курсором в редактируемой строке (позиция в памяти, а не на экране)
  • F - Флаги (CF - обновление листинга на экране; SF - строка редактируется и раздута до 256 байтов; ZF - двойной клик)


Attachments:
File comment: Более-менее стабильный вариант без обращения к процедурам вывода Монитора
rk86-editor-v2023-0422.rkr.zip [4.16 KiB]
Downloaded 136 times
22 Apr 2023 02:00
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 326
Location: Tashkent
Reply with quote
В общем, вот стабильная версия.

Файл с ленты запускается по G0
Строго требуется директивой X Монитора установить регистр HL на адрес 0A00 (обязательно) и PC на адрес 0800 (опционально).
По адресу 0A00 размещён буфер текста, а по адресу 0800 расположен набросок отладчика.

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

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

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

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

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


Attachments:
File comment: Стабильная версия редактора текста листинга
rk86-editor-v2023-0423.rkr.zip [4.18 KiB]
Downloaded 151 times
22 Apr 2023 14:00
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 326
Location: Tashkent
Reply with quote
Доработал и устранил мелкие недочёты.

В частности, если строка занимает всё экранное пространство в 64 символа, стрелка справа не отображается, чтобы не портить вид.
В конце области кода, перед текстом версии, располагаются ячейки с указателями на конкретные экранные позиции: Можно легко сместить область отображения листинга и его прокрутки.
(Смещение позиции курсора - другая ячейка внутри кода и при желании легко найти.)

Файл с ленты запускается только по G0
Строго требуется директивой X Монитора установить регистр HL на адрес 0A00 (обязательно) и PC на адрес 0800 (опционально).
По адресу 0A00 размещён буфер текста, а по адресу 0800 расположен набросок отладчика.

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

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

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

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

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

P.P.S.: Если имеются какие-то критические замечания - выслушаю.


Attachments:
File comment: Версия от 24 апреля
rk86-editor-v2023-0424.rkr.zip [4.27 KiB]
Downloaded 132 times
24 Apr 2023 00:37
Profile WWW
Maniac
User avatar

Joined: 14 Oct 2019 18:10
Posts: 326
Location: Tashkent
Reply with quote
Думаю, теперь можно отдохнуть от активной разработки данной утилиты.

На отладку срабатывания перемещения курсора по табуляции на границах строки ушла практически неделя, так как код критически вырывался за границы в 2 Кб.
Пришлось жёстко его чистить и оптимизировать (стыковать подпрограммы там, где одна вызывает в конце другую), из-за чего код получился достаточно плотным.

При этом имеется несколько универсальных API, которые могут пригодиться в разных случаях:
  • 0003 | F003 - помещения указателя на знакоместо в стек, координаты которого указываются непосредственно за CALL и адрес извлекается через POP
  • 0023 | F023 - прокрутка экрана (CF=0 - вправо / CF=1 - влево)
  • 0057 | F057 - прокрутка экрана (CF=0 - вверх / CF=1 - вниз)
Пример вызова:
Code:
        CALL    00003H
        DB      39      ; X-POSITION
        DB      15      ; Y-POSITION
        POP     H       ; LOAD POINTER

Чтобы адаптировать редактор к различным дисплеям и устранить "обрезание" краёв текста, имеются следующие адреса:
  • 0009/000A | F009/F00A - корректировка на ±2 знакоместа инструкциями DCX D / NOP / INX D
  • 0719/071A | F719/F71A - корректировка позиции курсора (обычно 8 по X и 3 по Y)
  • 07AA | F7AA - корректировка "светового пера"
  • 07FE | F7FE - адрес входа в редактор (сейчас это 00CA/F0CA)
Можно заметить, что все адреса достаточно красивые: Пришлось постараться с расположением подпрограмм и отдельных инструкций в них.

Клавиши работают следующим образом:
  • 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 удаляет текущую строку, а УС+У/К/Е/В прокручивают экран в одном из четырёх направлений.
Вот несколько подпрограмм, которые могут понадобиться в экстренных случаях:
  • 033B / F33B - Прокрутка листинга вперёд/влево (CF=0) или назад/вправо (CF=1)
  • 0567 / F567 - Прокрутка листинга вверх (CF=0) или вниз (CF=1)
  • 04A7 / F4A7 - Переключение на другой буфер текста (HL - указатель на ячейку буфера)

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

P.S.: Думаю, версия достаточно стабильная и может уже стать инструментальной (для личных нужд).

Спасибо за участие!


Attachments:
File comment: Версия от 27 апреля
rk86-editor-v2023-0427.rkr.zip [5.27 KiB]
Downloaded 138 times
26 Apr 2023 21:01
Profile WWW
Display posts from previous:  Sort by  
Reply to topic   [ 84 posts ]  Go to page Previous  1, 2, 3, 4, 5, 6  Next

Who is online

Users browsing this forum: No registered users and 3 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.