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

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

Moderator: Shaos

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

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

Post by Shaos »

Shaos wrote:> Флаг (байт) 7F в адрес 762D нужно записать (выполните D0,0 и сразу U).

Есть описание всех флагов какие можно устанавливать в 762D? Я чего-то с ходу не нашёл...
И всё-таки, где флаги посмотреть можно? Почему именно 7F (0111 1111) это включение нумерации?
Я тут за главного - если что шлите мыло на me собака shaos точка net
User avatar
Alikberov
Doomed
Posts: 347
Joined: 15 Oct 2019 01:10
Location: Tashkent
Contact:

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

Post by Alikberov »

Shaos wrote:
Shaos wrote:> Флаг (байт) 7F в адрес 762D нужно записать (выполните D0,0 и сразу U).

Есть описание всех флагов какие можно устанавливать в 762D? Я чего-то с ходу не нашёл...
И всё-таки, где флаги посмотреть можно? Почему именно 7F (0111 1111) это включение нумерации?
Можно и FF - разницы нет. В строке #618 это происходит.
Т.е. «GF000,» (с запятой), думаю, разрешит нумерацию строк (надо проверить)… :idea:
User avatar
Shaos
Admin
Posts: 23629
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:А поконкретенее? Какие ещё флаги могут быть и т.д.
Условно - это флаг, который Монитором обнуляется при чтении параметров директивы и при обнаружении Запятой «,» выставляет FF, чтобы сигнализировать директиве I о наличии второго параметра для изменения константы скорости ввода с магнитофона.

«Победит» этим кодом маскирует все десятичные символы при отображении нумерации строк. Значит:
  • При 00/A0/60/20 вся нумерация отображается как символ 00h/20h
  • При F0/70/30 вся нумерация строк отобразится символом 30h
  • При FF (а также 7F/3F) нумерация строк отображается кодами 30h-39h
  • При EF/6F/2F нумерация строк отобразится кодами 20h-29h
  • При DF/5F/1F нумерация строк отобразится кодами 10h-19h
  • При FE/7E/3E нумерация строк исказится с маскировкой до чётных цифр
То есть, это - просто маска для ASCII и больше нигде в редакторе не используется.

В Emu80 в отладчике можно поиграться значениями и увидеть результат (но только при обновлении столбца строк).
User avatar
Shaos
Admin
Posts: 23629
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:А зачем? :)
Нумерация она ведь либо есть, либо её нет - зачем остальные вариации? ;)
Ну, дык, я и говорю, что всё происходит в строке #618:

Code: Select all

;;;;;;;;;;;;;;;;;;;;;;;;;
;       BC - SCREEN POINTER
;;;;;;;;;;;;;;;;;;;;;;;;;
PUTHEX: CALL	PUTNBL	; Печать ниббла (дважды)
PUTNBL: RRC
        RRC
        RRC             ; Прокручиваем для вывода каждого ниббла
        RRC
        PUSH    PSW
        ANI     00FH    ; Маскируем, для печати младшего ниббла
        CPI     00AH
        SBI     02FH
        DAA             ; Приводим к стандартному 0-9 и A-F в Aккумуляторе
        PUSH    H       ; Сохраняем HL, так как
        LHLD    DIGITS  ; нужно загрузить "маску" из служебной области
        ANA     L       ; и "замаскировать" аккумулятор
        POP     H       ; Восстанавливаем HL
        STAX    B       ; Выводим символ на экран
        INX     B       ; и переходим к следующей позиции
        POP     PSW
        RET
Если использовать именно один единственный бит, код станет таким:

Code: Select all

;;;;;;;;;;;;;;;;;;;;;;;;;
;       BC - SCREEN POINTER
;;;;;;;;;;;;;;;;;;;;;;;;;
PUTHEX: CALL	PUTNBL	; Печать ниббла (дважды)
PUTNBL: RRC
        RRC
        RRC             ; Прокручиваем для вывода каждого ниббла
        RRC
        PUSH    PSW
        ANI     00FH    ; Маскируем, для печати младшего ниббла
        CPI     00AH
        SBI     02FH
        DAA             ; Приводим к стандартному 0-9 и A-F в Aккумуляторе
        PUSH    PSW     ; Сохраняем HL, так как
        LDA     DIGITS  ; нужно загрузить "флаги" из служебной области
        ANI     040H    ; и используем лишь один некий бит
        CPI     040H    ; Только он оказывает влияние
        CMC             ; Корректируем флаги
        SBB     A       ; Формируем маску
        XTHL            ; Читаем предыдущее значение Aккумулятора
        ANA     L       ; и маскируем цифры
        POP     H       ; Восстанавливаем HL
        STAX    B       ; Выводим символ на экран
        INX     B       ; и переходим к следующей позиции
        POP     PSW
        RET
Что было бы универсальнее, но слишком громоздко (на целых 7 байтов) для ПЗУ в 2 Кб. :wink:
К тому же, в редакторе не так уж много флагов и упаковывать их в один байт не имеет смысла.
(Так же, как подпрограмма опроса клавиатуры Монитора F812 использует флаг 00 или FF в ячейке 7605, но реагирует лишь на 00 либо 01-FF в самом деле.)
User avatar
Shaos
Admin
Posts: 23629
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:

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

Post by Alikberov »

Shaos wrote:А какие ещё есть флаги и как они используются?
Ну, тут уже всё описывалось и ничего нового я не скажу.
Кроме того, что он сам передаёт флаги в PSW при вызове пользовательского кода.
Редактор в этом плане работает как некая замкнутая среда, с вызовом пользовательского кода при нажатии управляющих комбинаций клавиш:
  • F1…F5 или УС+A…D (коды 00…04)
  • УС+E…G (коды 05…07)
  • УС+K (код 0B)
  • УС+Т…W (коды 0E…17)
  • АР2 или УС+[ (код 1B)
  • УС+\]^ (коды 1С…1E)
То есть, при редактировании текста Музыкальных Партитур или Quick Basic управляющих комбинаций более, чем достаточно, для организации поиска по шаблону, компиляции, сохранения, копирования и т.д…
Всё - под ответственность пользовательского кода.

В качестве примера, именно пользовательский код по нажатию F1 переключает буферы текста (можно и страницы памяти просто переключать), скрывает/отображает нумерацию строк и боковые границы, а по УС+E удаляет целую строку.
User avatar
Shaos
Admin
Posts: 23629
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:А какие флаги то? :)
Если указан адрес вызова пользовательской вспомогательной подпрограммы, обращение к ней происходит при нажатиях любой клавиши или клике "световым пером".
При этом через регистры общего назначения передаётся следующая информация:
  • BC - Шестнадцатеричный индекс (редактируемой) текущей строки
  • DE - Адрес на начало самой верхней отображаемой строки
  • HL - Адрес на начало текущей (редактируемой) строки
  • A - Номер столбца по позиции курсора (начало - 01) с учётом панорамы (логическая позиция)
  • CF флаг - Экран готовится к полной перерисовке (при клике "световым пером" или перемещением стрелками)
  • PF флаг - Двойной (повторный) клик "светового пера" по знакоместу с курсором
  • ZF флаг - Клавиши F1-F4, АР2 или УС+A-Z (код читается через вызов F803 обязательно, иначе возникнет зацикливание редактора/!\)
  • SF флаг - Буферная строка (редактирование в активном состоянии)
Всего этого вполне достаточно, чтобы реализовать все необходимые операции работы с текстом.
User avatar
Shaos
Admin
Posts: 23629
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:И с какой стороны тут присовокупляется нумерация строк?…
Нумерация строк - это «LDA 762D | CMA | STA 762D» в область служебных ячеек Монитора напрямую…
И на обработке (компиляции) текста никак не сказывается - чисто декоративный элемент.

Вы страницы памяти как-то переключаете?
Применительно к 128 Кб, если служебная область 7600…76CF будет попадать под страничное переключение, нужно быть осторожным и дублировать все важные для редактора ячейки.
User avatar
Shaos
Admin
Posts: 23629
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:в других страницах монитором пользоваться будет нельзя
Т.е. регион F000-F7FF можно тоже переключать и, соответственно, выбирать нужное ПЗУ?
Типа:
  • Страница #0 - под КНГМД
  • Страница #1 - под ПобЭдит
  • Страница #2 - под Yozh
  • Страница #3 - под Паскаль или Форт (запускается из-под ПобЭдита, например)
User avatar
Shaos
Admin
Posts: 23629
Joined: 09 Jan 2003 06:22
Location: Silicon Valley
Contact:

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

Post by Shaos »

Надо подумать - может быть в будущем надо сделать область переменных монитора (и экрана) опционально непереключаемой…
Я тут за главного - если что шлите мыло на me собака shaos точка net
Post Reply