nedoPC.org

Electronics hobbyists community established in 2002
Atom Feed | View unanswered posts | View active topics It is currently 26 Apr 2024 08:28



Reply to topic  [ 204 posts ]  Go to page Previous  1 ... 7, 8, 9, 10, 11, 12, 13, 14  Next
Paguo-86PK - XXI BEK 
Author Message
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
barsik wrote:
Возможно, что и у Вас проблем со скоростью нет, а их Вам создаёт неточный эмулятор. Тут поможет знание арифметики, считайте число тактов разных вариантов ролика.
Угу… :roll:
После того «ADD HL,HL - 4 такта» я уже себе не доверяю! :mrgreen:
Хотя, сейчас прикинул и получил формулу прожорливости своего алгоритма прокрутки - (45*Y+66)*X+132…3832.
 Торсионное ядро
Code:
AFDD5:  PUSH    DE              ; 11 {
        PUSH    HL              ; 11
        SBC     A,A             ;  4
        LD      B,A             ;  5
        LD      A,(WINKOO+1)    ; 13
        XOR     B               ;  4
        SBC     A,B             ;  4
        ADD     A,D             ;  4
        INC     D               ;  5
        LD      D,A             ;  5
        CALL    COD_0D          ; 17 + 27..3727
        LD      A,C             ;  5
        SUB     E               ;  4
        LD      E,A             ;  5
        LD      A,(LNSTEP)      ; 13
        XOR     B               ;  4
        SBC     A,B             ;  4
        LD      C,A             ;  5 } - 105 + 27..3727 = 132..3832
AFDED:  PUSH    DE              ; 11 {
        PUSH    HL              ; 11
        XOR     A               ;  4
AFDF0:  LD      E,(HL)          ;  7   {
        LD      (HL),A          ;  7
        ADD     HL,BC           ; 11
        LD      A,E             ;  5
        DEC     D               ;  5
        JP      P,AFDF0         ; 10   } - 45*Y
        POP     HL              ; 10
        POP     DE              ; 10
        INC     HL              ;  5
        DEC     E               ;  5
        JP      P,AFDED         ; 10 } - (45*Y+66)*X
        POP     HL              ; 10
        POP     DE              ; 10
Если подставить параметры экрана 78×30, получим (45*30+66)*78+242 ≈ 110690 тактов + ещё прелюдия-обвёртка самой COUT_C и тот STATUS…

И получается, что при частоте 1777777 Гц получится примерно 16 кадров в секунду и 32 полных кадра в минуту - 112 секунд на те же 44 кадра…
Эмулятор не такой уж обманщик! :kruto:
barsik wrote:
А я и не знал, что где-то есть РК-программы с автозапуском…
Кaк губка я впитывал все публикации со страниц РАДИО в память РК. :roll:
В интернете заметка про автозапуск где-то попадалась, но самой статьи - нет. Нужно качать журналы целиком…

Но свою пародию, ради демонстрации, я накидал…
Это - не ремейк, а мой собственный код с потолка.
В оригинале была маленькая утилита, которая спрашивала адрес начала файла, адрес конца и точку запуска, затем выводя два файла на ленту.
Но я её быстро доработал и добавил возможность задавать имя файла.

Данная здесь моя версия умеет искать файлы, если нажать «Home» и через пробел набрать имя файла, потом через точку уже задать «I».
Естественно, всё работает только на оригинальном Мониторе!

К сожалению, данный код стряпал впопыхах и где-то допустил ошибку: Экран упрямо не выравнивается.
Но всё работает: Сначала даёте файл «Part-1.rkr», а затем - «Part-2.rkr»…
rw6hrm wrote:
Извиняюсь, что влез в обсуждение.
A незачем извиняться :lol:
Тема - не будка исповеди! :roll:

Напротив, интересно услышать самые разные мнения :idea:


Attachments:
AutoRun.zip [1.88 KiB]
Downloaded 248 times
19 Feb 2020 07:48
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 583
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Paguo-86PK wrote:
получил формулу прожорливости своего алгоритма прокрутки... получим (45*30+66)*78+222 ≈ 110670 тактов
А зачем при ролике двигать 30 строк, Вы же используете режим с 25-ю видимыми строками (из-за того, что в режиме с 32 видимыми строками п/п-мами ПЗУ пользоваться нельзя, т.к тогда из-за чрезмерного объёма экрана или рабочие ячейки затёрты или экран установлен вне стандартной экранной области 76D0).

Я тоже посчитал число маш.тактов для трёх нестековых алгоритмов ролика экрана (для Z80, т.к у меня в наличии только числа тактов для Z80). Получилось, что для КР580 наиболее выгодным является программный сдвиг только видимой области с двумя петлями. Вероятно и такой алгоритм можно улучшить.

Интересно посчитать и алгоритм сдвига стеком. Увы, готовый он мне не попадался, придётся его написать (т.к в текстовом редакторе, чем быстрее ролики экрана вверх и вниз, а главное, чем быстрее сдвижка и раздвижка текста в буфере, тем лучше).

 
Code:
ROLL:   LD      HL,76D0H +3*78 +8
        LD      DE,76D0H +2*78 +8
        LD      C,25                    =27
LOOP1:  LD      B,64                    7
LOOP2:  LD      A,(HL)                  7
        LD      (DE),A                  7
        INC     HL                      6
        INC     DE                      6
        DEC     B                       4
        JP      NZ,LOOP2                10 =40
                                       
        LD      A,C                     4
        LD      C,14                    7
        ADD     HL,BC                   11
        EX      DE,HL                   4
        ADD     HL,BC                   11
        EX      DE,HL                   4
        LD      C,A                     4
        DEC     C                       4
        JP      NZ,LOOP1                10 =59

        (40*64 +59)*25 +27= 65502

; ----------------------------------------------

ROLL:   LD      HL,76D0H +3*78 +8
        LD      DE,76D0H +2*78 +8
        LD      BC,78*25                =30
LOOP:   LD      A,(HL)                  7
        LD      (DE),A                  7
        INC     HL                      6
        INC     DE                      6
        DEC     BC                      6
        LD      A,B                     4
        OR      C                       4
        JP      NZ,LOOP                 10 = 50

        78*25*50 +30= 97530

; ----------------------------------------------

ROLL:   LD      HL,76D0H +3*78 +8
        LD      DE,76D0H +2*78 +8
        LD      BC,78*25                =30
        LDIR                            21*(BC)

        78*25*21 +30= 40980
.

Paguo-86PK wrote:
В интернете заметка про автозапуск где-то попадалась, но самой статьи - нет. Нужно качать журналы целиком…
Я тоже вот это и вот это читал, но это не стало для меня открытием, т.к уже за 5 лет до этого я встречал многоблочные программы для Специалиста и потому умел делать перехват при МГ-вводе (это использовалось на Специалисте и на на ОРИОНЕ).

Но я имел в виду то, что автостартующих программ не встречается в реальности, а есть только информация как это сделать. Это из-за того, что эта информация стала известна лишь в 1993 году, когда РК86 в пользовании у населения был практически вытеснен Синклером, уже для РК никто не писал программ. И, соответственно, кассет с автостартующими играми, используя эту статью, никто не создавал и не распространял, хотя торгующих программами для бытовых ЭВМ, в том числе и для РК86, мелких предпринимателей и частников в то время было тысячи.

К тому же автозапуск необходим только для многоблочных программ, что в свою очередь нужно для изготовления защищищённых от копирования программ. А т.к защищать от копирования в 1993 году было уже нечего (всё что было из ПО уже давно разошлось без защит), то и распространения такая методика не получила. Кстати, в мониторах некоторых ГДР-овских компьютеров был флаг автозапуска (в запись на ленте включалось не только имя файла, но и дата, автор и флаг автозапуска).

Хотя польза от этого нулевая. Т.к хорошая защита от копирования делается лишь с использованием другого формата записи, т.к даже при модификации стандартного двухфазного формата (например сменой констант, вводом огромного числа мелких блоков, что утомляет пирата, и т.п.) это копируется без труда программой SP-Copy Специалиста (она сама тоже защищена и в эмуляторы не грузится, а без эмулятора её не кракнуть). А чтобы применить на РК другие форматы МГ-записи нужно их адаптировать (введя в алгоритм регенерацию ОЗУ) и долго трахаться отлаживая.
Paguo-86PK wrote:
даёте файл «Part-1.rkr», а затем - «Part-2.rkr»… всё работает только на оригинальном Мониторе!
Точно, ни хрена не заработало с ПЗУ где стек на 76D0.
rw6hrm wrote:
необходимо вторгнуться (совсем немного!) в схему и сделать предзагружаемый фонт, как уже давно было решено на ZXPK
Идея оперативной загрузки фонта приближает возможности РК к Денди. Тогда графика в РК-играх была бы как в графической машине, программирование проще, а скорость движения спрайтов намного выше, чем в полноценно графической машине.

То что эта идея "не идёт" уже почти 10 лет (с момента разработки схемы Alex_LG) виноваты разработчики фотошаблонов печ.плат и производители плат новоделов РК86. Они ни за что не хотели вводить никакие, даже самые очевидные, доработки, что не стоят даже деталей (а лишь дополнительного печатного проводка). А главное, - нечем возразить на неопровержимый довод: "Если Вам нужна графика, то делайте Специалист, он проще, чем РК с прибамбасами" (к тому же Специалист намного быстрее и без захватов шины ПДП ).

Молодёжь не хочет монтировать схемы проводами (они могут только запаять детали в готовую печ.плату), а радиолюбители из 80-тых, кто мог это делать, сейчас уже почти все умерли, а тем, кто ещё жив трудно вручную спаять десяток микросхем трясущимися от старости руками. Получилось, что не видя наличия программ, изготовители плат не видели смысла в такой доработке. А те, кто мог бы программно поддержать такое железо не видели смысла это делать, зная, что нет машин с таким железом.

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

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

Я тоже когда-то нарисовал свой вариант доработки для загрузки фонта. На 565РУ2 (т.к, чтобы не требовалась коммутация нужны раздельные входы и выходы у ОЗУ) и на другом принципе, чем в двух уже опубликованных вариантах. А именно, - с загрузкой ОЗУ фонта через запасное ППА D14. При этом коррекции на плате РК не нужны, устройство не грузит шины, свободные области памяти и чип-селекты не занимаются. Платка втыкается в разъём ROM-диска и от неё идёт коса с разъёмом DIP-24 втыкаемым в панельку ПЗУ 573РФ1 знакогенератора. При этом, если использовать готовый отрезок платы с смонтированными ОЗУ 565РУ2, то монтажа меньше, чем в других вариантах.

Image

В РК86 неудобно не знать идёт ли ввод или синхробайт не "схватился" и компьютер висит. Экран погашен и не выводятся даже цветные полосы на бордюр по каждому биту, как в ZX. Если в подпрограмму загрузки массива в ПЗУ РК86 вставить те строки, что помечены жёлтым в вышеприведённом фрагменте, то при МГ-вводе появится индикация светодиодом РУС/ЛАТ (что стоит на PC3 порта клавиатуры). Здесь бит A6 адреса куда с ленты загружается текущий байт выводится в светодиод. Для этого бит D6 из младшего байта адреса с помощью трёх команд сдвига сдвигается на бит D3 и выводится в порт C ППА клавиатуры.

После того как будет отловлен синхробайт и начнётся ввод байтов блока, светодиод РУС/ЛАТ начнёт моргать с частотой ~0.85 ГЦ. Это потому, что скорость МГ-ввода в РК примерно 150 байт в секунду, а светодиод будет отображать бит D6 адреса загрузки.

Отмеченные жёлтым команды добавляют в период ввода последнего бита байта более 20 маш.тактов, потому для компенсации в п/п-мме LDBYTE надо пересчитать компенсирующую константу 0EH или уточнить её опытным путём. Это можно отладить только в реале с реальным магнитофоном. Если будут проблемы, то число сдвигов можно уменьшить или совсем их убрать, что одновременно с сокращением задержки увеличит частоту мерцаний светодиода.


Last edited by barsik on 20 Feb 2020 05:20, edited 1 time in total.



19 Feb 2020 16:21
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
barsik wrote:
А зачем при ролике двигать 30 строк, Вы же используете режим с 25-ю видимыми строками (из-за того, что в режиме с 32 видимыми строками п/п-мами ПЗУ пользоваться нельзя, т.к тогда из-за чрезмерного объёма экрана или рабочие ячейки затёрты или экран установлен вне стандартной экранной области 76D0).
A как тогда узнать пиковую производительность на максимальном разрешении?
Нет, хотя 78×30 - не максимум и можно сделать альтернативный фонт под 78×60 с псевдографикой.
Причём, вывод 3 от ВГ75 использовать для переключения знакогенератора: Если настройки ВГ75 не выходят за 4 линии, на выводе 3 всегда «0» и знакогенератор работает в режиме 6×4 с псевдо-графикой 3×2.
Например, 155ТМ2 сбрасывать выводом 8 ВГ75 (вторую половинку ТМ2 использовать за инвертор), а стробировать загрузку «1» выводом 3…
Тогда знакогенератор явно переключать не надо, а лишь устанавливать нужный режим ВГ75.

Вот интересно: Бит 7 байта #4 в настройке ВГ75 управляет сдвигом линии знакогенератора на 1 позицию…
То есть, линия 0000 гарантировано никогда вылазить не будет ни при ССИ, ни при КСИ?
Если так, то это тоже можно использовать опционально: Включать альтернативный знакогенератор по линии 0000.
barsik wrote:
Я тоже вот это и вот это читал, но это не стало для меня открытием, т.к уже за 5 лет до этого я встречал многоблочные программы для Специалиста и потому умел делать перехват при МГ-вводе (это использовалось на Специалисте и на на ОРИОНЕ).
Если бы почитали описание моей утилиты у глянули бы на её код - критики было бы гораздо больше!
Её я гружу прямо в область рабочих ячеек Монитора и без директивы «X» она не работает!
Оказывается, оригинальный Монитор по Сбросу трёт не все свои ячейки и мою утилиту можно было бы хранить там…

Кстати, есть идея директиву «X» сделать реальным Иксом: Запускать пользовательский код с передачей ему всех аргументов. То есть, тот же «G», но адрес хранится в специальных ячейках…
barsik wrote:
Молодёжь не хочет монтировать схемы проводами (они могут только запаять детали в готовую печ.плату), а радиолюбители из 80-тых, кто мог это делать, сейчас уже почти все умерли, а тем, кто ещё жив трудно вручную спаять десяток микросхем трясущимися от старости руками.
Когда брат с другом пытались паять мигалку на ЛА3 на велосипед по схеме из книжки, не могли понять, почему на схеме указаны одни ножки, а я им говорю гнуть и спаивать другие ножки (чтобы обойтись без лишних перемычек)…
Молодёжь привыкла сейчас работать по шаблону и не включая голову! :cry:
barsik wrote:
В РК86 неудобно не знать идёт ли ввод или синхробайт не "схватился" и компьютер висит. Экран погашен и не выводятся даже цветные полосы на бордюр по каждому биту, как в ZX.
Я поступал круче: Сам ВТ57 настраивал на ячейку 8002 и пытался устроить аппаратную визуализацию сигнала с магнитофона… :lol:
barsik wrote:
Платка втыкается в разъём ROM-диска и от неё идёт коса с разъёмом DIP-24 втыкаемым в панельку ПЗУ 573РФ1 знакогенератора.
Не пришло ли время обсудить «Супер-РФ1»‽ :lol:
По тому же принципу: Запись через чтение.
То есть чтобы перезаписать какой-то символ в знакогенераторе, просто на экране выводится особая последовательность кодов.
И никаких шлейфов к ППА не требуется! :roll:

ВГ75 - не самый удачный кристалл от инженеров Intel: Эту критику можно часто видеть, в частности, здесь на форуме…
Вот что мешало инженерам сделать не программирование позиции курсора через порт ввода-вывода, а считывать позицию курсора в самом начале кадра тем же циклом ПДП?
То есть, в РАДИО-86РК ячейками 76D0:76D1 хранилась бы позиция курсора и форма, а сам экран был бы по 76D2…7FF5.
И те же X:Y-курсора - всего 13 бит. Оставшиеся 3 бита могли бы и форму задавать, и частоту мерцания.
То есть, имели бы два бита частоты (1/64, 1/32, 1/16 и без мерцания) и бит Блок/Подчёркивание… :oidea:
――――――――――――――――――――――――――――――――
barsik wrote:
Такую п/п GETLIN нельзя вызвать имея флаг Z=1, это потеря универсальности.
Чуток подправил кодик:
 GETLIN
Code:
ZABOJ:  OR      H
        JP      P,GTLLO2
        DEC     H
        DEC     L
        DEC     DE
        CALL    RST_18
        DEFB    008H,020H,008H+128
        JP      GTLLO2

; ----------------------------------------------

GETLIN: LD      HL,03FF1H
        DEC     L
GTLLO1: LD      DE,COMBUF
        ADD     HL,HL
        RET     Z
GTLLO2: CALL    CONIN
        CP      02EH ; 01BH
        JP      Z,ABORT
        LD      (DE),A
        CP      00DH
        JP      Z,GTLLO1
        CP      008H
        JP      Z,ZABOJ
        CP      07FH
        JP      Z,ZABOJ
        CALL    COUT_A
        INC     H
        INC     L
        JP      Z,ERROR
        INC     DE
        JP      GTLLO2

; ----------------------------------------------

RST_18: EX      (SP),HL
        CALL    MSGH
        INC     HL
        EX      (SP),HL

; ----------------------------------------------

MSGLOO: RET     M
        RET     Z
        INC     HL
MSGH:   LD      A,(HL)
        OR      A
        CALL    NZ,COUT_A
        JP      MSGLOO
Но, теперь все точки, обращающиеся к F922 нужно корректировать, иначе возникают существенные проблемы!

К тому же, Вы зря сравниваете прокрутку экрана в РЛК «Специалист» и «Орион», где видеопамять, для упрощения дешифрации, идёт «по-китайски»: Сверху-вниз и слева-направо. :ebiggrin:
Там, при выводе символов/спрайтов, достаточно исполнять «INC L» и «INC H», тогда как в РК без «ADD HL,…» не обойтись :exclaim:


Attachments:
File comment: Под стандартной прошивкой МОНИТОР:
Хранится бесконечно долго в памяти по адресам 7660…076A6;
Не боится нажатия на кнопку СБРОС;
Имеет минимальный код.

AutoSave.zip [241 Bytes]
Downloaded 230 times
20 Feb 2020 04:26
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 583
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Paguo-86PK wrote:
К тому же, Вы зря сравниваете прокрутку экрана в РЛК «Специалист» и «Орион», где видеопамять, для упрощения дешифрации, идёт «по-китайски»: Сверху-вниз и слева-направо. Там, при выводе символов/спрайтов, достаточно исполнять «INC L» и «INC H», тогда как в РК без «ADD HL,…» не обойтись

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

INC R - 4 такта, а INC RR - 6 тактов - разница в два такта "погоды не делает". Если цикл 100...200 тактов, - отличие в нескольких командах на 2 такта навредит не фатально. И как раз экран РК для сдвига стеком выгоднее, т.к там применяют два цикла - один на 250, второй на 48, а здесь только один цикл на 195. Для графических машин ролик (и очистка) стеком важны, т.к там сдвигается (или заполняется) более, чем в 6 раз больший массив байтов.

Вот исходник ролика для РК86 стеком по невыгодному алгоритму LDIR (написано из головы, без проверки, сейчас просто нет времени проверять, но думаю всё верно).

Code:
ROLL:   LD      DE,76D0H +3*78          10 откуда
        LD      HL,76D0H +2*78          10 куда
        LD      A,25*78/10              7

        PUSH    HL                      11

        LD      HL,2                    10
        ADD     HL,SP                   11
        LD      (TMP_SP),HL             16
        EX      DE,HL                   4  HL откуда

        POP     DE                      10 DE куда

        LD      SP,HL                   6
        EX      DE,HL                   4  HL куда = 99
ROLLOO:
        rept    5
        POP     DE                      10
        LD      (HL),E                  7
        INC     HL                      6
        LD      (HL),D                  7
        INC     HL                      6 = 36*5= 180
        endm

        DEC     A                       4
        JP      NZ,ROLLOO               10  : весь цикл = 194

        LD      HL,(TMP_SP)             16
        LD      SP,HL                   6   = 36
        RET

        99 + 36 + (194*195) = 37965
.

Если я не ошибся в арифметике или программировании, то это более, чем вдвое быстрее, чем сдвиг программной реализации команды LDIR (которой у процессора КР580 не оказалось). В программной реализации (см.предыдущие мои посты) число тактов - 97530. А сдвиг 25-ю циклами по 64 байта будет ещё быстрее. Так что Вы очень неправы, считая, что стековые команды для сдвигов и очисток малополезны. Об этом даже в Википедии написано.


Last edited by barsik on 23 Feb 2020 06:38, edited 6 times in total.



23 Feb 2020 06:09
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
barsik wrote:
Paguo-86PK wrote:
К тому же, Вы зря сравниваете прокрутку экрана в РЛК «Специалист» и «Орион», где видеопамять, для упрощения дешифрации, идёт «по-китайски»: Сверху-вниз и слева-направо. Там, при выводе символов/спрайтов, достаточно исполнять «INC L» и «INC H», тогда как в РК без «ADD HL,…» не обойтись

INC R - 4 такта, а INC HL - 6 тактов --> "разница погоды не делает". Если цикл примерно 200 тактов, - намного ли изменит отличие в 2 такта.
Bсё точно у меня.
Вы не так прочитали:
Quote:
К тому же, Вы зря сравниваете прокрутку экрана в РЛК «Специалист» и «Орион», где видеопамять, для упрощения дешифрации, идёт «по-китайски»: Сверху-вниз и слева-направо. Там, при выводе символов/спрайтов, достаточно исполнять «INC L» и «INC H», тогда как в РК без «ADD HL,…» не обойтись
Quote:
INC R - 4 такта, а INC HL - 6 тактов
Не «INC R» и «INC HL», а именно «INC L» и «INC H».
В «Специалисте»/«Орионе» для смещения по столбцам следует использовать «INC H», а для смещения по строкам - «INC L». Так же, как и в «ZX-Spectrum», где для вывода одного символа достаточно использовать «INC H» и на форумах это много обсуждалось, так как ZX изначально разрабатывался для учебных целей с быстрым выводом текста, а не спрайтов.
Именно про это я и говорю. :idea:

А вот в РАДИО-86РК прокрутка, лично меня, интересует именно оконная, а не полноэкранная.
Именно ради окошек я и взялся за переделку COUT!
Иначе, я бы никогда не занялся переписыванием всего ПЗУ!
Это нужно учитывать в первую очередь :exclaim:

Если Вы настаиваете внедрить в код прокрутку экрана целиком через стек, тогда мне не останется ничего, кроме как просто выбросить весь свой код в мусорку и ничем не заниматься! :lol:

P.S.: «Окошки» мотивировали меня :exclaim:


23 Feb 2020 06:34
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 583
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Paguo-86PK wrote:
В «Специалисте»/«Орионе» для смещения по столбцам следует использовать «INC H», а для смещения по строкам - «INC L».
Какая разница как именно организован экран? Чтобы можно было использовать стек для работы с экраном достаточно, чтобы экранные байты шли подряд и окно по координате, где экр.байты впритык, имело ширину кратную 2. И тут без разницы, экран инкрементируется по горизонтали или по вертикали.

В Специалисте, ОРИОНЕ и Векторе экран инкрементируется по вертикали, а в ИРИШЕ экран инкрементируется по горизонтали, но с помощью того же стека это не помешало получить там быстрый ролик, причём при очень тормозном процессоре и огромном экране в 16 кб.
Paguo-86PK wrote:
в РАДИО-86РК прокрутка, лично меня, интересует именно оконная, а не полноэкранная. Именно ради окошек я и взялся за переделку COUT! Иначе, я бы никогда не занялся переписыванием всего ПЗУ!
При оконности для стековой процедуры не очень удобно, что ширина окна может быть нечётной, т.е не кратной двойке. Вот в 6502 и 6800 это бы не стало препятствием, т.к у них стековые команды читают/пишут по одному байту.

А при двухбайтовом стеке придётся существенно усложнять процедуру при нечётной ширине окна. Если устраивает, что все окна должны быть с шириной кратной двойке, то проблем для использования стека для ролика нет. Только для ролика в окне не годится ролик по алгоритму LDIR, т.к он сдвигает только весь экран целиком. А нужно использовать второй вариант с двумя циклами. В первом цикле в окне сдвигается одна строка, затем нач.адрес строки увеличивается на 78 и всё это повторяется столько раз сколько строк в окне минус 1. И последняя строка очищается.
Paguo-86PK wrote:
Если Вы настаиваете внедрить в код прокрутку экрана целиком через стек...
Кто я такой, чтобы настаивать? Я же не заказчик и в этой теме я даже не заинтересованное лицо, а просто делюсь своим мнением, чтобы был всё-же форум, а не монолог.

У меня по РК совсем другая тема. Например, как раз сегодня я начал писать простейшую DOS с размером в ~2.5 кб, причём резидентную в ПЗУ, в которой в качестве CCP DOS используется командный процессор монитора (что экономит 0.5 кб кода). Т.е необходимо, чтобы DOS уместилась в добавленное вот по такой схеме ПЗУ РФ2 с размером в 2 кб на адресе F000 плюс ещё 0.5 кб из ПЗУ F800.

Это д.быть аналог, а по возможности даже немного лучше, чем дискетная Хамелеон-ДОС от Львова, что имеет рекордный размер из всех дискетных DOS всего в 2 кб. Для РК задача уместить весь код, т.е ROM-BIOS и DOS, в одну микросхему ПЗУ 2732 с размером 4 кб. Уже потратил сегодня на написание этой DOS 5 часов труда и написал ~1 килобайт.

Для этого я и освобождал место в ПЗУ, т.к даже в 3 кб тяжело уложиться. Точнее, совсем примитивную DOS, без повторного использования места от удалённых файлов (как это в примитивной Хамелеон-ДОС) я могу уместить в те же 2 кб, но нужно лучше, хотя бы с повторным использованием места удалённых файлов (без опасной процедуры SQEEZE как было в ОС-ДВК).

В примитивных DOS (к которым, кстати, относится и популярная TR-DOS) новые файлы пишутся в конец занятой части диска, а чтобы вернуть для использования место занимаемое ранее удалённым файлом выполняется опасная (отдельная) программа SQEEZE (на английском языке означает "сжатие"), которая схлопывает последующие файлы на освободившееся место. Отчего позиция в конце диска, куда будут записываться новые файлы также сдвигается увеличивая доступный объём.

Попутно хотелось бы в те же 2.5 кб уместить работу с юзерами, датами файлов и размером файлов с кратностью до байта, а не сектора. И ещё к тому же с возможностью иметь диски размером до 16 мб (для винчестера). Но боюсь, что для КР580 всё это сделать не получится, а вот для Z80 есть шансы, т.к у него код плотнее.


Last edited by barsik on 24 Feb 2020 08:15, edited 1 time in total.



23 Feb 2020 07:48
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
barsik wrote:
Какая разница как именно организован экран?
Разницa не такая уж маленькая!
barsik wrote:
Чтобы можно было использовать стек для работы с экраном достаточно, чтобы экранные байты шли подряд и окно по координате, где экр.байты впритык, имело ширину кратную 2.
Вот в том и дело, что в «Специалисте»/«Орионе» два байта - это уже блок 8×2
barsik wrote:
И тут без разницы, экран инкрементируется по горизонтали или по вертикали.
Когда я писал вьювер графики с игры от Специалиста на РК, то понял, «японская грамота» в организации экрана сильно упрощает жизнь. :mrgreen:
barsik wrote:
В Специалисте, ОРИОНЕ и Векторе экран инкрементируется по вертикали…
И при прокрутке стеком сразу двигаются 2 строки блоком 8×2. :roll:
barsik wrote:
а в ИРИШЕ экран инкрементируется по горизонтали, но с помощью того же стека это не помешало получить там быстрый ролик, причём при очень тормозном процессоре и огромном экране в 16 кб.
А Ириша - вообще любопытное решение на 8-битном процессоре использовать графику IBM PC-XT с CGA-графикой. :ebiggrin:
barsik wrote:
Вот в 6502 и 6800 это бы не стало препятствием, т.к у них стековые команды читают/пишут по одному байту.
У 6502 стек жёстко аппаратно закреплён в регионе 0100…01FF и экран не прокрутишь с этим… :no:
barsik wrote:
А при двухбайтовом стеке придётся существенно усложнять процедуру при нечётной ширине окна.
В тех же «Специалист»/«Орион» ограничение на чётную высоту окошка - вообще не проблема. Так как минимальное оконце - 8×2 в таком случае…
barsik wrote:
Если устраивает, что все окна должны быть с шириной кратной двойке, то проблем для использования стека для ролика нет.
Для РК это сложный вопрос, так как реально «оконных» программ - нету. Задача в том, чтобы хоть что-то было уже на уровне Монитора, а не внешними костылями с кучей «но…». :wink:
И здесь важно - уложиться в ПЗУ, а не оптимизировать под игры-прыгалку!
barsik wrote:
Только для ролика в окне не годится ролик по алгоритму LDIR, т.к он сдвигает только весь экран целиком. А нужно использовать второй вариант с двумя циклами. В первом цикле в окне сдвигается одна строка, затем нач.адрес строки увеличивается на 78 и всё это повторяется столько раз сколько строк в окне минус 1.
Вот, сами подтверждаете, что алгоритм будет слишком разбухший. Причём, сомнительными методами… :roll:
barsik wrote:
И последняя строка очищается.
Как уже заметили, наверное, у меня очистка происходит сразу. Так как прокрутка достигается не копированием сверху-вниз, а вставкой пробела снизу-вверх. Это экономит кучу кода на самом деле. И позволяет сделать петлю: Самую верхнюю строку прокрутить и вывести в самом низу - для игр это очень полезно!
barsik wrote:
У меня по РК совсем другая тема…
К сожалению, в СУБД я - ноль.
Потому и вожусь только с визуальной частью, так как буфер экрана, как Вы и подчеркнули выше про экранный редактор, тот же файл.
Можно сказать, окна - и есть фрагментированные файлы, а экран - БД в целом… Друг некогда приглашал на работу помочь написать им БД, но я с ходу отказался. Так как мало расписать план, как хранить пакеты данных. Так ещё от взлома уберечь и защиту от краха продумать… :esurprised:

P.S.: Дорабатываю свой Монитор по мелочам…
Директива «M» теперь радактирует дамп по 16 байтов в строке - пришлось множество мелочей проделать в разных местах.
Сейчас пытаюсь понять суть подпрограммы ввода байта…
Напрягает избыток кусков инициации ВТ57/ВГ75. Думаю, нужно всё это дело выбросить куда-то…
Например, как у Вас: «Рус/Lat» меняет форму курсора. Так как РК - ЭВМ с клавиатурным терминалом и больший период находится в опросе клавиатуры, думаю, ничего страшного не произойдёт, если именно при опросе клавиатуры будет восстанавливаться экран (ячейки 760D/760E хранят адрес стека при вводе (добавить и в вывод следует) - можно использовать как «флажок» к восстановлению), а так же добавить ячейки пользовательской предустановки, чтобы ВТ57/ВГ75 приложения не сами программировали, а просили Монитор… :lol:
Правда, огорчают Ваши замечания про эмуляторы…
Так, если PUSK_VG занимает 47 байтов, то ввод/вывод байта - по 26 = 52 байта: Нужна унификация самой PUSK_VG… :roll:


23 Feb 2020 10:55
Profile WWW
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
Сейчaс закончил очередную правку кода и пока не знаю, на сколько критической окажется всё это… :roll:
  • Стек установлен на 76D0, верхушка памяти пользователя - на 7600, аварийный адрес (F836) - 76CE
  • Директива «B» - предустановка к директиве «R,7F»
  • Директива «F» - предустановка к директиве «T»
  • Так как директивы «D»+«L» и «M» занимали 43 и 39 ячеек, удалось их совместить в одну унифицированную «D»-директиву, проверяющую флаг ячейки 762D: «D<адрес>» работает как «M», «D<начало>,<конец>» выдаёт дамп с текстом
  • Директива «J» - пользовательская, хранящаяся в ячейках 7650…769F с четырьмя аргументами «J<HL>,<DE>,<BC>,<A>», для чего уменьшен буфер ввода и упразднена очистка рабочей области
  • Директивы «C»,«I»,«O»,«S»,«X» работают как обычно
  • Директивы «L» и «M» исключены
  • Директива «E» передаёт управление на адрес E000 с четырьмя аргументами
  • Любая другая ошибочная директива переходит на адрес F000 без аргуметов
Дизассемблировать не советую, так как ничего существенного там не обнаружите.
  • «Холодным стартом» Монитора область служебных ячеек не очищается, из-за чего флаг «РУС/LAT» клавиатуры не определён, а COUT может повести себя крайне непредсказуемо, если ESCAPE-статус не сброшен: Несколько 1F-кодов не очень защищают от этого
  • Подпрограмма GETLIN защищена от ошибочного возврата при вызове с ZF и буфер ввода уменьшен на четыре символа ради «J»
  • Подпрограмма MSG_PC врезается в MSGH, которая слегка перестроена
  • Подпрограмма HEX_A не портит регистр C
  • Подпрограмма COUT_A является трюковой пристройкой к COUT_C с подавлением команд «PUSH AF»+«LD A,C» посредством «SCF»+«JP NC», потому обходится без «PUSH/POP BC» и «LD C,A»
  • Магнитофонные константы исправлены
  • Директивы «D» и «I» прерываются клавишей Esc, а не нажатием «УС+C»
Для проверки примера директивы «J» загрузите файл «Dir_Jay.rkr» и выполните «J1234,5678,9ABC,DE». Директива не боится Сброса и может храниться бесконечно долго при штатном режиме работы и использования…

 Взялся за считыватель байтов
Code:
SAVESP: LD      HL,0E008H
        LD      (HL),080H
        LD      HL,0FFFEH
        ADD     HL,SP
        LD      (TMPSTK),HL
        POP     HL
        LD      SP,00000H
        JP      (HL)
; - - - LOAD BYTE
LDBYTE: PUSH    HL              ; 11
        PUSH    BC              ; 11
        PUSH    DE              ; 11
        LD      D,A             ;  5
LDBIT1: CALL    SAVESP          ; 17+
        LD      C,000H          ;  7
        LD      A,(PC)          ; 13
        AND     010H            ;  7
        LD      E,A             ;  5
        LD      HL,(KNS_RD)     ; 16
LDBIT2: POP     AF              ; 10
        LD      A,C             ;  5
        ADD     A,A             ;  4
        LD      C,A             ;  5
        LD      H,000H          ;  7
LDBIT3: POP     AF              ; 10
        DEC     H               ;  5
        JP      Z,LDBIT8        ; 10
        LD      A,(PC)          ; 13
        AND     010H            ;  7
        CP      E               ;  4
        JP      Z,LDBIT3        ; 10
        RRCA                    ;  4
        RRCA                    ;  4
        RRCA                    ;  4
        RRCA                    ;  4
        AND     001H            ;  7
        OR      C               ;  4
        LD      C,A             ;  5
        LD      A,D             ;  5
        CP      002H            ;  7
        SBC     A,A             ;  4
        AND     0EEH            ;  7
        ADD     A,L             ;  4
        LD      B,A             ;  5
LDBIT4: POP     AF              ; 10
        DEC     B               ;  5
        JP      NZ,LDBIT4       ; 10
        LD      A,(PC)          ; 13
        AND     010H            ;  7
        LD      E,A             ;  5
        LD      A,D             ;  5
        OR      A               ;  4
        JP      P,LDBIT7        ; 10
        LD      A,C             ;  5
        CP      0E6H            ;  7
        JP      NZ,LDBIT5       ; 10
        XOR     A               ;  4
        JP      LDBIT6          ; 10
LDBIT8: LD      HL,(TMPSTK)     ; 16
        LD      SP,HL           ;  5
        CALL    PUSK_VG         ; 17+
        LD      A,D             ;  5
        OR      A               ;  4
        JP      P,ERROR         ; 10
        CALL    WAITF4          ; 17+
        JP      LDBIT1          ; 10+
LDBIT5: CP      019H            ;  7
        JP      NZ,LDBIT2       ; 10
        LD      A,0FFH          ;  7
LDBIT6: LD      (INV_MG),A      ; 13
        LD      D,009H          ;  7
LDBIT7: DEC     D               ;  5
        JP      NZ,LDBIT2       ; 10
        LD      HL,(TMPSTK)     ; 16
        LD      SP,HL           ;  5
        LD      A,(INV_MG)      ; 13
        XOR     C               ;  4
        JP      POPBDH          ; 10


Кстати: Вы зря «СКРОЛЛИНГ» записываете во вредные жаргонизмы англицизма и советуете использовать вместо этого германизм «РОЛИК». Русский язык и так изобилует германизмами в самых неожиданных местах!
Так-как «Ролик Экрана» понятие не очень стабильное и длинное, тогда как «СКРОЛЛИНГ» - более ясное в узких кругах. А вообще, не забудем, что «СКРОЛЛ» означает «СВИТОК».
А так как ни «Свиток Экрана», ни «Ролик Экрана» не могут восприниматься однозначно и требуют пояснений, то лучше использовать именно «Скроллинг», так как понятие это более однозначно во всей индустрии.
Тем более, в медицине на термин «скрининг новорожденных» ещё никто не жаловался. :lol:
К чему тогда подозрительно относиться к «скроллингу» в сфере техники? :mrgreen:

Побочные эффекты:
  1. Если вместо директивы нажать Esc и Точку, произойдёт прокрутка области над курсором.
    С одной стороны это - баг. С другой стороны позволяет минимальными усилиями увидеть одну из «плюшек» моего экранного кода. :P
  2. Если набрать «D7600» и просто жать «ВК», то на ячейке 763F процесс прервётся. Эффект неожиданный и непонятный, но не смертельный и связан с особенностью самой директивы в цикле печати КОИ7 справа от дампа, которая и прерывается на ячейке 7633 именно при редактировании. Причём, при «D7634» сбоев не наблюдается… :o


Attachments:
File comment: МОНИТОР - нестабильная версия
Джэй-директива - пример пользовательской директивы

MONITOR_20200224.zip [2.03 KiB]
Downloaded 233 times
24 Feb 2020 09:32
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 583
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Paguo-86PK wrote:
закончил очередную правку кода
Вот бы вашу энергию перенаправить на полезные людям цели, например, на программную поддержку вышеупомянутой доработки загружаемого фонта (а ещё лучше на написание программ для Специалиста). Желающих программировать для 8-ми разрядок осталось так мало, что очень жалко когда их большое время (в сотни человеко-часов) тратится на что-то бесполезное.

Кстати, писать программы для 8-ми разрядок в наше время лучше на ЯВУ, т.к в Википедии пишут, что на ЯВУ программировать и легче и эффективнее, чем на ассемблере. А ЯВУ теперь как раз стали доступными (CP/M-компиляторы Паскаля, Фортрана, Си, PL1 и PL/M работают в Windows XP), что было недоступно отечественным программистам любителям 80-тых и начала 90-тых годов, когда 8-ми разрядки и были в пользовании у населения. Можно даже альтернативный РК-монитор написать на PL/M, он вполне влезет в 4 кб (т.к PL/M даёт компактный код), а соблюдать внутренние точки в альтернативном варианте не надо.
Paguo-86PK wrote:
Директивы «L» и «M» исключены
Теперь по директиве L сообщение ERROR не выдаётся, а по директиве M - просто происходит улёт. Это происходит из-за того, что в эмуляторах неточный конфиг и из-за вот этого:
Paguo-86PK wrote:
Любая другая ошибочная директива переходит на адрес F000 без аргументов
В базовом РК86 ПЗУ F800 дублируется 4 раза по адресам E000, E800, F000 и F800. Потому команда JMP F000 введённая автором журнального ПЗУ РК86 для расширения директив не приводила к краху. Крах начинал происходить только после установки РК-КНГМД без замены в ПЗУ команды JMP F000 на JMP F86C (о чём авторы RK-DOS забыли написать в своих статьях, т.к вероятно и не знали эксплуатируя РК86 не в среде монитора, а в среде RK-DOS).

Тем более, что делать JMP F000 ни Вам, ни даже авторам, вообще было нельзя, т.к на F000 при ПЗУ в 4 кб должен стоять JMP F836, а не процедура расширения CCP (иначе не сработает СБРОС). Так что JMP F000 и в оригинальном ПЗУ РК86 и у Вас - грубая ошибка. Видимо авторы РК86 этим показывали, как надо расширять директивами монитор, а Вы не думая просто скопировали эту ошибку. Чтобы команда JMP F000 имела смысл требуется аппаратная переделка идеологии старта по кнопке СБРОС (например, использование "теневого ПЗУ с 0" делающего по сбросу JMP F800).

А в эмуляторах в конфигах как раз реализован РК-КНГМД, который стоит на F000, а ПЗУ с RK-DOS включается на адресах E000...EFFF. И какой смысл Вам делать JMP F000, если Вы используете ПЗУ с окном не 4 кб, а всего 2 кб - F800...FFFF, ведь ради этого Вы и изобрели метод переключения страниц ПЗУ по чтению из адресов FFF0...FFFF?

Для отладки кода ПЗУ в реале, а также, чтобы JMP F000 работал, Вам будет удобно применить псевдо-ПЗУ. Применив конфиг реализующий эту идею, можно будет отлаживать ПЗУ программным отладчиком (например DDT на адресе 9000), т.е даже не пользуясь неудобным графическим отладчиком эмулятора. Код в ПЗУ нельзя отлаживать программным отладчиком , т.к в ПЗУ не записывается код команды RST в стоп-точке.
Paguo-86PK wrote:
Подпрограмма HEX_A не портит регистр C. Подпрограмма COUT_A является трюковой пристройкой к COUT_C с подавлением команд «PUSH AF»+«LD A,C» посредством «SCF»+«JP NC», потому обходится без «PUSH/POP BC» и «LD C,A»
В принципе идея (для пропуска прогона двух последующих байтов) очень хорошая, дающая выигрыш аж 5 байтов. Проблема в том, что при этом меняется порядок ПУШ-ей. А в уплющенном мной варианте ПЗУ, в отличие от вашего варианта и журнального оригинала, лишь один вариант PUSH-POP-ов, - общепринятый порядок HL, DE, BC, что позволяет иметь всего один экземпляр процедуры POP-ов (т.к расточительно иметь два варианта POPREG). На этом я уже ранее выиграл 3 байта. Мешает перестановка PUSH AF. Но подумаю, может где-то ещё такой трюк подойдёт. Кстати, такой трюк впервые применил Билл Гейтс в своём 4-х килобайтовом бейсике.
Paguo-86PK wrote:
«Ролик Экрана» понятие не очень стабильное и длинное
Ролик это не только рекламный ролик на телевидении, цилиндр с осевым отверстием или колесо с торцевым пропилом для пассика. Ролик не как что-то овеществлённое, а как процесс, это - всё, что прокручивается.

Ролик экрана точно отражает суть. Всяко лучше, чем слова прокрутка, сдвижка, панорамирование экрана. А "скроллинг" вообще ничего не отражает, неинформативен и непрофессионалу не знакомому с этим термином непонятен (лучше уж писать "скроллинг экрана"). В то время как термин ролик экрана понятен и обезъяне.

Слово "скролинг" придумал какой-то слабоумный в начале 90-тых, а другие идиоты подхватили, т.к считают очень крутым всё иностранное. В технических книгах 80-тых и 90-тых ещё не встретишь этого мерзкого слова, а вот насчёт более поздних книг - не уверен. Хотя слово scrolling пока ещё переводится грамотными переводчиками правильно, как прокрутка, а скроллинг всё ещё считается жаргоном. Но враги из пятой колонны, щедро оплачиваемые ЦРУ, уже забили слово "скроллинг" в Википедию, как якобы технический термин. Мерзкие англиканизмы, уголовный жаргон и детский сленг повсюду побеждают. Например, некоторые школьники с пониженным IQ сдуру называют DIP-панельку кроваткой (непонятно почему не диванчиком).

Как раз тем, что слова не от балды, а информативные, русский язык и превосходит убогий английский. Потому англоговорящим так необходим словарь Вебстера (и детские конкурсы на правописание), - большинство их слов не имеют однокоренных, а надёрганы отовсюду. А нам толковый словарь вообще не нужен, т.к в русском языке слов не 1.5 миллиона, а менее 100 тысяч и подавляющее большинство слов производные, имеют понятные корни, что облегчает запоминание и понимание. В свободолюбивых странах внедрение англиканизмов преследуется по закону.

Предпочтение англиканизма русскому термину это маленькая измена Родине. Хорошо оплачиваемая пятая колонна усердно стремится загубить русский язык англиканизмами. И враги уже сильно преуспели, - голливудской продукцией и т.п, и в том числе и внедрением англиканизмов, они изменили ценностные понятия молодёжи...


24 Feb 2020 20:29
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
Переписaл экранную подпрограмму…
Теперь коды 0C и 1F работают как и положено. Тем самым, без драйвера очистить часть экрана в окне уже нельзя. Только прокрутить область 64×25…

Метки я именовал на свой лад: Первые символы метки жёстко привязаны к основе подпрограммы. Остальные же отражают обрабатываемый код либо действие…
 Подпрограмма COUT
Code:
CONPTR  EQU     07600H          ; CONSOLE POINTER
CONPOS  EQU     07602H          ; CONSOLE POSITION
CONSTA  EQU     07604H          ; CONSOLE STATUS
BELLDT  EQU     07607H          ; BELL DURRATION & TONE
CONORG  EQU     07610H          ; CONSOLE ORGANIZE (X1,Y1)
CONBOX  EQU     07612H          ; CONSOLE BOX EDGE (W,H)
CONUSE  EQU     07620H          ; CONSOLE USER DRIVER
CONLEN  EQU     07622H          ; CONSOLE LENGTH
;;;;;;;;;;;;;;;;;;;;;;
STATUS  EQU     0FE01H
;;;;;;;;;;;;;;;;;;;;;;
; CONSOLE_OUT(C)
COUT_C: PUSH    AF
        LD      A,C
        PUSH    HL
        PUSH    DE
        PUSH    BC
        AND     07FH
        CP      00CH
        JP      Z,COUT0C
        CP      01FH
        JP      Z,COUT1F
        LD      HL,COUTER
        PUSH    HL
        LD      HL,(CONORG)
        EX      DE,HL
        LD      HL,(CONBOX)
        ADD     HL,DE
        LD      C,L
        LD      B,H
        LD      HL,(CONPOS)
        EX      DE,HL
        LD      HL,(CONSTA)
        DEC     L
        LD      HL,(CONPTR)
        JP      COUTCC
; CONSOLE_OUT(1F)
COUT1F: LD      HL,076D0H
COUTAF: XOR     A
        LD      (HL),A
        INC     HL
        OR      H
        JP      P,COUTAF
; CONSOLE_OUT(0C)
COUT0C: LD      HL,00308H
        LD      (CONORG),HL
        EX      DE,HL
        LD      HL,0183FH
        LD      (CONBOX),HL
        LD      HL,077C2H
        LD      A,04EH
        LD      (CONLEN),A
        XOR     A
; CONSOLE_OUTER
COUTER: LD      (CONSTA),A
        LD      (CONPTR),HL
        LD      HL,0C001H
        LD      (HL),080H
        DEC     L
        LD      (HL),E
        LD      (HL),D
        EX      DE,HL
        LD      (CONPOS),HL
        CALL    STATUS
        POP     BC
        POP     DE
        POP     HL
        POP     AF
        RET
; CONSOLE_OUT(07, BELLDT)
BELL:   PUSH    HL
        LD      HL,(BELLDT)
        EX      (SP),HL
        POP     BC
BEEP:   LD      A,B
BEEP1:  EI
        DEC     A
        JP      NZ,BEEP1
        LD      A,B
BEEP2:  DI
        DEC     A
        JP      NZ,BEEP2
        DEC     C
        JP      NZ,BEEP
        RET
; CONSOLE_OUT(18)
COUT18: INC     HL
        LD      A,E
        INC     E
        CP      C
        RET     C
        CALL    COUT0D
; CONSOLE_OUT(1A)
COUT1A: CALL    COUTUD
        DEC     A
        CP      B
        RET     C
; CONSOLE_OUT_TOP_LINE
COUTOP: LD      A,(CONORG+1)
        CP      D
        RET     NC
        CALL    COUTUD
        JP      COUTOP
; CONSOLE_OUT(08)
COUT08: LD      A,(CONORG)
        CP      E
        JP      NC,COUTLC
        DEC     HL
        DEC     E
        RET
; CONSOLE_OUT_LAST_COLUMN
COUTLC: INC     HL
        INC     E
        LD      A,E
        CP      C
        JP      NZ,COUTLC
; CONSOLE_OUT(19)
COUT19: LD      A,(CONORG+1)
        CP      D
        JP      C,COUTUD
; CONSOLE_OUT_LAST_LINE
COUTLL: CALL    COUTUD
        CP      B
        RET     NC
        CCF
        JP      COUTLL
; CONSOLE_OUT(0D)
COUT0D: LD      A,(CONORG)
        SUB     E
        RET     Z
        DEC     E
        DEC     HL
        JP      COUT0D
; CONSOLE_OUT(UP/DOWN)
COUTUD: PUSH    BC      ; 11    ; CF=0 : DOWN   HL+=CONLEN, D++
        SBC     A,A     ;  4    ; CF=1 : UP     HL-=CONLEN, D--
        LD      B,A     ;  5
        LD      A,(CONLEN); 13
        XOR     B       ;  4
        SUB     B       ;  4
        LD      C,A     ;  5
        ADD     HL,BC   ; 11
        LD      A,B     ;  5
        SCF             ;  4
        ADC     A,A     ;  4
        ADD     A,D     ;  4
        LD      D,A     ;  5
        POP     BC      ; 10
        RET             ; 10 = 99 TICKS
; CONSOLE_OUT_CONTROL_CODE
COUTCC: JP      Z,COUTS1; COUT_STATUS == 1
        JP      PO,COUTS2; COUT_STATUS == 2
        JP      P,COUTS3; COUT_STATUS == 4
        SUB     01AH
        CP      001H    ; IF(C == 0x1B)
        RET     Z       ;       GOTO COUTER(0x01)
        ADD     A,01AH
        EX      (SP),HL
        DEC     HL      ; COUTER(0x00)
        EX      (SP),HL
        CP      007H
        JP      Z,BELL
        CP      008H
        JP      Z,COUT08
        CP      00AH
        JP      Z,COUT0A
        CP      00DH
        JP      Z,COUT0D
        CP      018H
        JP      Z,COUT18
        CP      019H
        JP      Z,COUT19
        CP      01AH
        JP      Z,COUT1A
        LD      (HL),A  ; WRITE CHARACTER TO SCREEN
        INC     HL      ; ONE STEP RIGHT AT SCREEN
        LD      A,E     ;
        INC     E       ; ONE STEP RIGHT BY CURSOR
        CP      C       ; TEST FOR RIGHT-SIDE EDGE
        RET     C       ; RETURN, IF EDGE NOT REACHED
        CALL    COUT0D  ; CURSOR RETURN
; CONSOLE_OUT(0A)
COUT0A: LD      A,B     ; LINE FEED
        DEC     A       ; TEST FOR LAST LINE
        CP      D       ; AT BOTTOM EDGE OF BOX
        JP      NC,COUTUD; GOTO NEXT LINE BY HL & D
        SBC     A,A     ; CF=1 FOR SCROLL-UP
        LD      B,A     ; CF=0 FOR SCROLL-DOWN
        LD      A,(CONORG+1)
        XOR     B
        SBC     A,B
        ADD     A,D
        PUSH    DE
        PUSH    HL
        LD      D,A
        CALL    COUT0D
        LD      A,C
        SUB     E
        LD      E,A
        LD      A,(CONLEN)
        XOR     B
        SBC     A,B
        LD      C,A
COUTNC: PUSH    DE      ; COUT_NEXT_COLUMN
        PUSH    HL
        XOR     A
COUTRS: LD      E,(HL)  ; COUT_ROW_SCROLL
        LD      (HL),A
        LD      A,E
        ADD     HL,BC
        DEC     D
        JP      P,COUTRS
        POP     HL
        POP     DE
        INC     HL
        DEC     E
        JP      P,COUTNC
        POP     HL
        POP     DE
        XOR     A
        RET
        ORG     0FA45H
COUTS1: PUSH    HL      ; COUT_STATUS #1
        LD      HL,(CONUSE)
        EX      (SP),HL
        CP      059H
        RET     NZ
        POP     AF
        CALL    COUT0D
COUTL1: LD      A,(CONORG+1); COUT_LOOP #1
        CP      D
        LD      A,002H
        RET     NC
        CALL    COUTUD
        JP      COUTL1
COUTS2: SUB     01CH    ; COUT_STATUS #2
COUTL2: CP      004H    ; COUT_LOOP #2
        RET     Z
        PUSH    AF
        CALL    NC,COUT1A
        POP     AF
        DEC     A
        JP      COUTL2
COUTS3: SUB     01FH    ; COUT_STATUS #3
COUTL3: DEC     A       ; COUT_LOOP #3
        RET     Z
        PUSH    AF
        CALL    COUT18
        POP     AF
        JP      COUTL3

barsik wrote:
Вот бы вашу энергию перенаправить на полезные людям цели, например, на программную поддержку вышеупомянутой доработки загружаемого фонта (а ещё лучше на написание программ для Специалиста).
Отнюдь! :-?
Энергии не так много, как может показаться со стороны: На бинари РК я трачу не остаточную энергию трудовых будней, а основную энергию. Потому и кажется многое, чего нет… :no:
А Специалиста я знаю лишь по публикациям журнала «Моделист-Конструктор», так как у отца не хватило ресурсов до полной его сборки…
И РК я знаю вдоль и поперёк, на сколько мне хватает компетентности. Других - я знаю намного хуже…
barsik wrote:
Желающих программировать для 8-ми разрядок осталось так мало, что очень жалко когда их большое время (в сотни человеко-часов) тратится на что-то бесполезное.
Разве прокачивать Монитор РК - бесполезное занятие‽ :lol:

barsik wrote:
Можно даже альтернативный РК-монитор написать на PL/M, он вполне влезет в 4 кб (т.к PL/M даёт компактный код), а соблюдать внутренние точки в альтернативном варианте не надо.
Можно, но интереснее самому писать оптимизированный код: Мозги напрягаются сильнее…
А пользоваться компилятором можно ради изучения принципов самой их компиляции…
barsik wrote:
Теперь по директиве L сообщение ERROR не выдаётся, а по директиве M - просто происходит улёт.
Меня это тоже бесит: Вместо «D<адрес>» жму рефлекторно «M» и - привет! :D
barsik wrote:
Тем более, что делать JMP F000 ни Вам, ни даже авторам, вообще было нельзя, т.к на F000 при ПЗУ в 4 кб должен стоять JMP F836, а не процедура расширения CCP (иначе не сработает СБРОС). Так что JMP F000 и в оригинальном ПЗУ РК86 и у Вас - грубая ошибка
Обезьяничать никто не запрещал. А я уже сказал, что прощупываю почву и оцениваю, насколько компактно можно утрамбовать полный функционал.
barsik wrote:
А в эмуляторах в конфигах как раз реализован РК-КНГМД, который стоит на F000, а ПЗУ с RK-DOS включается на адресах E000...EFFF.
По дампу это я и наблюдаю…
Буду иметь в виду про правку «U»… :idea:
barsik wrote:
И какой смысл Вам делать JMP F000…
Да какая разница, если моя версия - полный утиль.
На практике пользуюсь либо оригинальным Монитором, либо Вашим. Так как у моей версии подводных камней уйма. А так как устранить пока их не могу, сильно раздражает недоработанность своего продукта. :evil:
А Ваши, в частности, недоработки вызывают лишь ухмылку и ожидание очередной версии… :mrgreen:
barsik wrote:
если Вы используете ПЗУ с окном не 4 кб, а всего 2 кб - F800...FFFF, ведь ради этого Вы и изобрели метод переключения страниц ПЗУ по чтению из адресов FFF0...FFFF?
Изобрёл? :o
Ни одна из предложенных мною схем не выполняет поставленную функцию!
Какое это изобретение без наглядного практического результата?
Даже плагин к онлайн-эмулятору сильно гонит при активации этой самой страничности. :evil:
Идея сырая и, боюсь, плесенью попахивает! :(
barsik wrote:
Для отладки кода ПЗУ в реале…
До этого дело не дойдёт по независящим от меня причинам… :neutral:
barsik wrote:
В принципе идея (для пропуска прогона двух последующих байтов) очень хорошая, дающая выигрыш аж 5 байтов. Проблема в том, что при этом меняется порядок ПУШ-ей.
Да, обилие ПУШистиков и их ПОПочек не даёт покоя. И поделать с этим ничего нельзя абсолютно!
barsik wrote:
А в уплющенном мной варианте ПЗУ, в отличие от вашего варианта и журнального оригинала, лишь один вариант PUSH-POP-ов, - общепринятый порядок HL, DE, BC, что позволяет иметь всего один экземпляр процедуры POP-ов (т.к расточительно иметь два варианта POPREG).
Выше говорили, что прыгать внутрь подпрограммы - не очень хорошо! А сами - грешите этим! :ebiggrin:
barsik wrote:
На этом я уже ранее выиграл 3 байта. Мешает перестановка PUSH AF. Но подумаю, может где-то ещё такой трюк подойдёт. Кстати, такой трюк впервые применил Билл Гейтс в своём 4-х килобайтовом бейсике.
А за что его ругать, раз он умело пользовался всем потенциалом процессора :question:
barsik wrote:
Предпочтение англиканизма русскому термину это маленькая измена Родине.
Так уж измена‽ :esurprised:
Вот кто-то в будущем ковырнёт мой исходник Монитор и воскликнет «Сталина на них нет!»… :lol:

Во-первых, «там» тоже проявляют хоть какой-то интерес к технологиям СССР. Ну и пусть мои исходники будут более понятны «им»… :roll:
Во-вторых, некоторые тексты от VRML меня удивили комментариями на Кириллице, что сразу сигнализировало, чьи мозги там работали. Было приятно изучать, да… :idea:
В-третьих, «1С-Бухгалтерия» критикуется и за то, что разработчики переусердствовали тем, что отруссифицировали больше, чем надо. И пользователям MS-Excel пришлось доучиваться под 1С…


25 Feb 2020 11:22
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 583
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
rw6hrm wrote:
Сергей Киселёв выкатил свежую версию платы РК... Ничего нового, кроме... альтернативного фонта, переключаемого GPA0
Более 30 лет понадобилось, чтобы кто-то из изготовителей плат наконец сообразил, что иметь второй фонт это хорошо.

Кстати, если уж атрибуты наконец пошли в дело, то стоило задействовать 3 атрибута, чтобы поиметь 8 фонтов, а атрибут RVV (ReVerse Video) отдать на инверсию знакомест. Всё равно от резервирования атрибутов на цвет толку нет. Их резервировали для цвета, но увы, - никто за 28 лет так и не удосужился сделать печ.плату цветного РК. Если бы развели и выпустили такую платку хотя бы лет 15...20 назад, то может и был бы сейчас десяток цветных РК-программ. А так как теперь время упущено и ясно, что ни плат цветного РК, ни цветных РК-программ уже не будет, то вполне разумно получить от атрибутов "хотя бы шерсти клок", т.е отдать их на коммутацию фонтов.

Но увы, программно поддержать даже всего два фонта не получится, в эмуляторах это не поддерживается.
Paguo-86PK wrote:
Переписaл экранную подпрограмму…
Сразу заимствовал у Вас подпрограмму CLS, что с'экономило в ПЗУ 5 байтов (теперь свободно 285 ячеек). В ответ дам Вам для этой процедуры COUT_C подсказку на три байта. Если заметить, что коды 18, 19, 1A и 1B отличаются на единицу, то если поставить их в цепочке сравнения подряд и последними, то команды CP 18/19/1A/1B можно заменить на DEC A и выиграть 3 байта.

 
Code:
NO_ESC: LD      A,C
        AND     7FH
        CP      7
        JP      Z,BEEP
        CP      8
        JP      Z,COD_08
        CP      10
        JP      Z,COD_0A
        CP      0CH
        JP      Z,HOME
        CP      13
        JP      Z,COD_0D
        CP      1FH
        JP      Z,CLS
        LD      C,A
        SUB     18H
        JP      Z,COD_18
        DEC     A
        JP      Z,COD_19
        DEC     A
        JP      Z,COD_1A
        DEC     A
        JP      Z,COD_1B

        LD      (HL),C          ; Видимый на экране символ
        CALL    COD_18          ; сместить на следующее знакоместо

Paguo-86PK wrote:
Специалиста я знаю лишь по публикациям журнала «Моделист-Конструктор»
Этого более, чем достаточно, даже с избытком. Достаточно лишь знать организацию экрана и можно начинать писать "Принц Персии" или "Doom" для Специалиста. Подпрограммы C8xx те же, что и в РК86 на F8xx. Специалист даже проще, чем РК, быстрее и экран удобнее. А главное, экран графический. Это значит, что можно написать любую программу. А РК86 пригоден только, чтобы обкатывать системные программы, предназначенные для Специалиста или тренироваться в написании программ на Паскале или Си. Игры для РК писать бессмысленно.

Чтобы программировать для Специалиста иметь работающий Специалист не обязательно. Имеющиеся эмуляторы вполне точные. В отличие от РК для Специалиста нет программ, что не работают в эмуляторе.
Paguo-86PK wrote:
РК я знаю вдоль и поперёк
Тогда объясните мне за счёт чего гаснет экран в 9-той и 10-той линиях знакоместа.
Paguo-86PK wrote:
Разве прокачивать Монитор РК - бесполезное занятие?
Дорабатывать монитор совместимо, добавляя новые возможности, что-то дающие пользователю, - полезно, а несовместимо - это занятие только для себя. Вы ведь так и не отвечаете на сколько больше программ станет доступно пользователю РК, если он заменит ПЗУ на ваше. Или как улучшится удобство пользования РК?

Но для меня эта тема полезна. Без неё я бы не вернулся к уплющиванию ПЗУ РК, т.к РК из-за отсутствия графики мне неинтересен (осталось бы всего 200 свободных байт, а в них поддержка ROM-диска не умещалась). Не считая заимствований кодов, важнее моральная поддержка. Что и ценно в первую очередь на тематических форумах.
Paguo-86PK wrote:
А пользоваться компилятором можно ради изучения принципов самой их компиляции
А чего принципы компиляции изучать? Я Вам и без изучения скажу, что написать компилятор ЯВУ очень сложно. На это уйдут годы. Дело неблагодарное и сейчас нет смысла, т.к лучше, чем имеющиеся фирменные компиляторы ЯВУ (написанные целыми коллективами профессионалов) за разумный срок не напишешь. Лучше этими компиляторами ЯВУ пользоваться.
Paguo-86PK wrote:
А Ваши, в частности, недоработки вызывают лишь ухмылку и ожидание очередной версии
А вот это уже интересно. О каких версиях идёт речь? Я только чуть оптимизировал код ПЗУ, чтобы выиграть место. На это выигранное место удалось вставить и улучшенные директивы М и D и запуск программ из ROM-диска, но и их я не писал, а взял из ПЗУ других 8-ми разрядок. Существенно менять код ПЗУ РК я даже не брался. Так что, если недоработки есть, то не мои, а Дмитрия Горшкова. Именно он конвертирова монитор Микро-80 в монитор РК согласно воспоминаниям С.Попова, а монитор Микро-80 неизвестно кто написал.
Paguo-86PK wrote:
говорили, что прыгать внутрь подпрограммы - не очень хорошо! А сами - грешите этим!
Это совсем разное. Зачем дублировать абсолютно один и тот же код несколько раз?

PS. Нашёл в Интернете дизассемблированный монитор Микро-80, - неумело дизассемблированный и с комментариями там, где они абсолютно не нужны, т.е для полных идиотов. Попытался отредактировать, но понял, что из этого выйдет хуже, чем дизассемблировать самому. Для дизассемблирования ретро CPU современные версии IDA неудобны, я использую версию IDA из середины 90-тых. Всего за 20 минут с помощью IDA получил приличный исходник.

Кстати, в мониторе Микро-80 подпрограмма COUT_A делает все четыре PUSH-а, это значит, что это Д.Горшков зачем-то убрал PUSH AF оттуда. И PUSH HL BC DE в COUT-ах и PUSH-и в другом порядке в CONIN и МГ-п/п "пошёл" из монитора Микро-80, это не исправил Д.Горшков.

Любопытно, что взятие HEX-параметров из командной строки делается не один раз, как после ввода командной строки в мониторе РК, а в каждой директиве стоит свой вызов CALL GETPRM (отчего она вызывается аж 14 раз). Т.о целых 13 трёх байтовых CALL-ей лишние, их выирал Д.Горшков при конверсии под РК. Также там две процедуры ввода строки. Код в этом ПЗУ вообще не самый оптимальный (также полно LD A,0 ; RET после CALL и т.п.). Оптимизацией можно выиграть много байтов. Если заскучаю, то может быть займусь.
Code:
COUT_A: PUSH    HL
        PUSH    BC
        PUSH    DE
        PUSH    AF
        LD      C,A
        JP      @COUT

COUT_C: PUSH    HL
        PUSH    BC
        PUSH    DE
        PUSH    AF
@COUT:  LD      HL,(EK_ADR)
.


25 Feb 2020 13:18
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
barsik wrote:
Кстати, если уж атрибуты наконец пошли в дело, то стоило задействовать 3 атрибута, чтобы поиметь 8 фонтов, а атрибут RVV (ReVerse Video) отдать на инверсию знакомест.
Вoт именно!
Какие-то недоделки - из-за чего? Излишняя осторожность из-за обратной совместимости?
barsik wrote:
Всё равно от резервирования атрибутов на цвет толку нет.
Если хотя бы механический тумблер или JP-перемычку внедрить для переключения режимов поддержки…
barsik wrote:
А так как теперь время упущено и ясно, что ни плат цветного РК, ни цветных РК-программ уже не будет, то вполне разумно получить от атрибутов "хотя бы шерсти клок", т.е отдать их на коммутацию фонтов.
Как говорится, пока тело способно сохранять личность индивидуума - никогда не поздно!
Было бы желание и желающие…
barsik wrote:
Но увы, программно поддержать даже всего два фонта не получится, в эмуляторах это не поддерживается.
Эмуляторы - не молекулы графена: Электронный микроскоп или адронный коллайдер не требуется - переписать/дописать можно на уровне клавиш клавиатуры… :idea:
barsik wrote:
Сразу заимствовал у Вас подпрограмму CLS, что с'экономило в ПЗУ 5 байтов (теперь свободно 285 ячеек).
Неужели код столь уникален? :o
barsik wrote:
Если заметить, что коды 18, 19, 1A и 1B отличаются на единицу, то …
А Вы не заметили, что регистры B и C хранят границы текущего окна? Никак нельзя уже код символа считать из C…
Это место меня всегда напрягало и даже пытался таблицу использовать, так как все ключевые куски кода находятся в одном 256-байтовом пространстве и адресовать их можно одним байтом с использованием трюка с маскированием директив. Но код получался ещё толще…
Тем не менее, сейчас удалось те же 3 байта выиграть.
Спасибо!
Правда, тупо - «SUB 1AH + … + ADD A,18H». Всегда задавался вопросом в таких случаях: Стоит ли? :mrgreen:
barsik wrote:
Достаточно лишь знать организацию экрана и можно начинать писать "Принц Персии" или "Doom" для Специалиста.
Да уж… От «Принца» до «Думы» - рукой подать! :ebiggrin:
barsik wrote:
Подпрограммы C8xx те же, что и в РК86 на F8xx. Специалист даже проще, чем РК, быстрее и экран удобнее.
Всегда задавался вопросом: А что мешало Волкову ПЗУ разместить как в РК? Было бы совсем всё просто!
barsik wrote:
А главное, экран графический.
Я уже высказывался на этот счёт: Все 90-е я в тетрадках малевал схемки собственных синхрогенераторов, изучая книжку Овечкина про телевизионные игры Хоккей и Скачки…
Если бы РК имел бы графику, я совсем не разбирался бы в основах формирования телевизионного матраца.
Как раз РК тем и привлекателен, что графики в нём - нет. А узел формирования видео не занимает половину схемы.
Можно сказать РК - не хитрее отладочного стенда в этом смысле, где вместо тумблеров и индикаторов - нормальный терминал.
barsik wrote:
Это значит, что можно написать любую программу. А РК86 пригоден только, чтобы обкатывать системные программы, предназначенные для Специалиста или тренироваться в написании программ на Паскале или Си. Игры для РК писать бессмысленно.

Если этот терминал на базе ВГ75 оставить в покое и не изощряться с оконностью, то его более, чем достаточно, чтобы нагло подключить контроллер от Денди и начать разрабатывать игры с графикой и цветом. Получим систему покруче того же Сюбора с двумя дисплеями и с возможностью портировать игры 1 в 1 графикой, но уже с CISC-кодом против RISC :exclaim:
Ещё в 90-е я поглядывал на Денди с искушением её PPU подключить к D14 и попытаться его программировать… :twisted:
Хотя, если внедрить несколько ВГ75 с разными каналами ПДП, можно как в том же Atari/Commodore чередовать текст и графику, если КСИ первого ВГ75 запускает тактирование второго ВГ75, который, в свою очередь, своим КСИ запустит третий ВГ75 - своеобразная карусель. И у каждого ВГ75 свои настройки развёртки.
Или теми же атрибутами основного ВГ75 организовать селективное тактирование вспомогательных ВГ75. Тогда в одной строке основного знакоместа можно разместить 2…4 строки вспомогательных знакомест и даже добиться подобия спрайтов…
barsik wrote:
Чтобы программировать для Специалиста иметь работающий Специалист не обязательно. Имеющиеся эмуляторы вполне точные. В отличие от РК для Специалиста нет программ, что не работают в эмуляторе.
Быстро проверить код - нету онлайн-эмуляторов.
Приходится запускать VMware и там уже возиться.
К тому же, в Специалисте нету директивы «M» и дамп травится как в «Микро-80» - очень резко, без прокрутки.
А так как я привык к плюшкам (да, плюшкам!) РК, для меня такая среда очень непривычно и всё для меня дико! :o
Подчёркиваю: 99% кода своего написал и отладил именно тут, так как в промежутках между пролистыванием форумов и новостных сайтов, если в голову пришла мысль - достаточно кликнуть на закладку.
Кстати, когда питомец запрыгивает на стол - сразу открываю страницу КСОНИКСА. Чем и призывает меня дорабатывать свои идеи! :oidea:
Какой из эмуляторов ПК исполнен так минималистически просто и гениально‽ :roll:
Именно в нём я и перелопатил весь Монитор, так как в случае краха достаточно нажать «Refresh» браузера. Тогда как другие эмуляторы принуждают создавать резервные копии файлов и возиться с их перекопировкой.
Практически 100% rom-файлов и 99% rkr-файлов моих здесь сгенерировано именно им: Мой Chrome-плагин (выложил ниже, если интересно) перехватывает точки вывода файла и по «OF800,FFFF» сохраняет rom-файл автоматически, а также и «световое перо» симулирует… То есть, я его превратил в настоящий инструмент, удобный именно мне. Причём, сейчас в нём же сгенерировал rkr-файл с прокруткой экрана стеком под ОРИОН-128 для Emu80 - всё работает.
(Хотя, вот сейчас нашёл онлайн ОРИОН-128. Но эмулятор - демонстрационный и инструментально на нём мало чего добиться можно…)

Вот и ZX-Spectrum я пытался за-РК'шить, вымыв его Бейсик и написать МОНИТОР. Но дальше той подпрограммы с выводом полноценного дампа и символами 6×8 дело не дошло из-за слишком неудобного редактора встроенного ассемблера. Из-за чего сообщество Спектрумистов обозлилось на меня и послали меня писать свой эмулятор, заявив, что в 8-битных технологиях я ничего не смыслю со своими PHP и JavaScript.
Из-за чего я и ушёл в подполье и стал проверять, правда ли мои мозги с этими PHP/JS/SVG совсем расплавились и не способны решать базовые задачи на реальных ЭВМ пост-апокалипсиса?
И всплыл именно здесь со своей «оконной подпрограммой» для РК как пародия на современные технологии.
В том и суть, что Вы свой Монитор переделываете со знанием своего дела.
А я лишь, в отместку сторонников Спектрума, с головой ушёл в РК.
Так как тот же Commodore/Atari - технологии соседнего континента, ZX-Spectrum - технологии Европы. А вот РК - наш, родной. Да и самый первый из доступных.
Он - как пластилин, как ядро, на которое можно навесить всё, что угодно! 8)

barsik wrote:
Тогда объясните мне за счёт чего гаснет экран в 9-той и 10-той линиях знакоместа.
В схеме D13 по LTEN сбрасывает ИР13 по-видимому… :neutral:
Выше я тоже задавался вопросом:
Quote:
Вот интересно: Бит 7 байта #4 в настройке ВГ75 управляет сдвигом линии знакогенератора на 1 позицию…
То есть, линия 0000 гарантировано никогда вылазить не будет ни при ССИ, ни при КСИ?
Если так, то это тоже можно использовать опционально: Включать альтернативный знакогенератор по линии 0000.

barsik wrote:
Дорабатывать монитор совместимо, добавляя новые возможности, что-то дающие пользователю, - полезно, а несовместимо - это занятие только для себя. Вы ведь так и не отвечаете на сколько больше программ станет доступно пользователю РК, если он заменит ПЗУ на ваше. Или как улучшится удобство пользования РК?
Прежде всего, я проверяю свои мозги! :lol:
barsik wrote:
А чего принципы компиляции изучать?
Не принципы, а выходной код.
На форумах часто сравнивают разные компиляторы и обсуждают, от чего тот или иной компилятор так или иначе чудит в таких-то случаях…
barsik wrote:
Я Вам и без изучения скажу, что написать компилятор ЯВУ очень сложно.
Всегда свой Бейсик хотел написать, но спотыкался на редакторе строки. А к арифметике вещественной вообще не знал, как подойти! :o
Сейчас - опыт какой-никакой имеется. Выше я делилки/умножалки свои показал. Осталось их допилить до вещества
А экранный редактор мне в Atari-XE (он у меня в шкафу лежит с двумя дисководами) нравится, но дискет под него нет.
(Вот жалею, что не додумался 20 лет назад выкупить Atari-ST у одного, когда тот мне на тест его принёс на месяц с кучей дискет с играми. На Бейсике я там быстро разобрался и пищать/трещать удалось. Да потом дети хозяина его куда-то дели или разобрали в хлам, так как не смогли с мышкой разобраться и с телевизором.)

Кое-что…
Тут подумал, что в MS-DOS имелся FIFO-буфер клавиатуры. В РК любопытно было бы это тоже попытаться сделать, чтобы во время вывода долгого дампа можно было бы не одну букву нажать, а десяток.
В таком случае, в том же Бейсике, можно вызывать COUT, CHSUMM и WRBYTE через PRINT с параметрами…

Вообще-то…
В самом начале темы я прикидывал, как бы в РК сделать ОЗУ 128 Кб, где 64 Кб - системное и 64 Кб - пользовательское.
В отличии от остальных РЛК типа Ориона и Специалиста, в РК 128 Кб сделать, в каком-то смысле, легче…
Именно оттуда и вытекла идея переключать страницы по FF00…FFFF. Правда, если Вы внимательны, там - всего две страницы / банка по 64 Кб. Причём, память 128 Кб - лишь для одновременного доступа. А так, она может быть и в 1 Мб из 16 банков, лишь два банка доступны в один момент. А для доступа к соседним страницам не обязательно обращаться к подпрограмме Монитора, как в Орионе…
Тем более, сама микросхема ПДП прозрачно сигнализирует о своём доступе к памяти: Можно 1 Мб ОЗУ иметь и под экран подставить именно нужную страницу из 16.
Потому, именно РК привлекателен тем, что в нём нет ничего лишнего - ни теневого регенератора ОЗУ, ни рассыпухи под графический экран :obye:


Attachments:
File comment: Пример стек-прокрутки для ОРИОНА-128
Программа составлена онлайн и сохранена моим плагином AutoSave

ORION-SPRITE.zip [835 Bytes]
Downloaded 225 times
File comment: chrome://extensions
Включить режим разработчика, загрузить данное расширение, указав путь.
Теперь на страннице http://rk86.ru/ появится кнопка «Tape/Page».
Чтобы сохранить файл, достаточно набрать, например
O7650,76AF,F
Скорость изменить необходимо для предотвращения ложного срабатывания плагина…

AutoSave.zip [4.68 KiB]
Downloaded 218 times
26 Feb 2020 06:29
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 583
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Paguo-86PK wrote:
barsik wrote:
А главное, экран графический.
Я уже высказывался на этот счёт: Все 90-е я в тетрадках малевал схемки собственных синхрогенераторов
Это Вы опоздали ровно на десятилетие. Это надо было делать в 80-тые годы, тогда это было актуально.
Paguo-86PK wrote:
Если бы РК имел бы графику, я совсем не разбирался бы в основах формирования телевизионного матраца.
Я узнал о 64 МКС строчного периода, когда ускорял свой Специалист до 2.5 МГЦ. Как раз именно в Специалисте понятно как формируется растр, тогда как ВГ75 это "таинственный чёрный ящик" дающий видео.
Paguo-86PK wrote:
Можно сказать РК - не хитрее отладочного стенда
Как же? Я свой РК86 настраивал пару месяцев. А первый Специалист спаял и настроил за два дня. Там искать ошибки на порядок проще, т.к работает экран.
Paguo-86PK wrote:
Если... не изощряться с оконностью, то его более, чем достаточно, чтобы нагло подключить контроллер от Денди и начать разрабатывать игры с графикой и цветом. Получим систему покруче
Идея внешнего граф.адаптера. Только зачем для этого плата тормозного РК, - лучше любое МП-ядро, например, скоростное на Z80H. Это будет уже не РК и чем этот тормозной монстр с внешним видеоадаптером имеющий ноль программ превзойдёт Специалист?

По этому пути я уже прошёл в своё время. Когда настроил РК, то убогие РК-игры меня не взволновали (т.к тогда я уже видел игры ДВК и даже графические на БК-010), а огорчило отсутствие графики. Я делал РК, чтобы на нём изучать иностранные языки. Заучивание слов на РК вместо карточек шло намного быстрее (не надо на карточках ставить галочки, когда слово не вспомнил и сортировать их). Но выяснилось, что многих французских и немецких букв в РК просто нет. И тут знающие люди подсказали мне, что чтобы иметь на экране любые буквы необходим графический компьютер.

А тут как раз в журнале RFE 10.1987 опубликовали схему внешнего граф.адаптера на 29 микросхемах на 4116 (экран точно как у Специалиста). В начале 1988 я спаял себе эту платку. Но ассемблер только начинал осваивать и не смог сразу написать полноценный драйвер. Зато в ходе экспериментов с выводом букв обнаружил, что скорость вывода графики из РК низкая. Почти одновременно я настроил плату Специалиста, и выбор между нестандартным РК с прибамбасом или стандартным Специалистом был очевиден. Позднее я превратил платку граф.адаптера в плату эл.диска на РУ5.

А Вы теперь предлагаете снова использовать РК с прибамбасом, что означает создать новую платформу. Даже если не учитывать, что сейчас невозможно создать новую платформу с массовостью более, чем в один экземпляр, то вести речь о таком можно только предлагая готовую печатную платку прибамбаса и кучу программ. А зачем нужны графические прибамбасы к РК86, если есть Специалист и его маленькие по размеру печ.платы доступны.
Paguo-86PK wrote:
Хотя, если внедрить несколько ВГ75 с разными каналами ПДП... И у каждого ВГ75 свои настройки развёртки... Или теми же атрибутами основного ВГ75 организовать селективное тактирование вспомогательных ВГ75
Это уже пошла чистая маниловщина.
Paguo-86PK wrote:
Быстро проверить код - нет онлайн-эмуляторов [Специалиста]
А онлайн-эмуляторы вообще не нужны, это просто извращение. У Вас просто такое хобби (если не сказать мания или можно это считать экстремальным видом спорта) - мучить себя машинными кодами в онлайн-эмуляторе.

Я быстрее проверяю код странслированный ассемблером или Паскалем, чем Вы в своём онлайн-эмуляторе. После того, как я закончил редактирование и моментом, когда написанная программа начала исполняться проходит не более двух секунд. Хлоп на кнопку и через 1.5 секунды я вижу на экране прогон. BAT-файл транслирует, запускает эмулятор, а эмулятор загружает в себя программу и запускает её. В нормальном эмуляторе есть отладчик, а не только какой-то убогий "режим консоли". Нормальные эмуляторы позволяют отлаживать программы и для DOS, эмулируют ВГ93, а онлайн-эмуляторы все предельно убогие.

Использовать онлайн эмулятор и программировать в нём в маш.кодах - это мазохизм. Конечно в этом хобби (по критериям полезности) все немного сдвинутые, но настолько, чтобы мазохистки мучить себя машинными кодами - это уж чересчур. Если уж так надо программировать прямо в эмуляторе, то в нём должен быть встроен текстов редактор и компилятор (лучше Си или Паскаля), что образует IDE. В своё время у меня промелькнула мысль встроить в свой эмулятор текстов редактор и ассемблер, но разработка в самом эмуляторе не стала бы быстрее и удобнее, потому отказался от этого.

Онлайн-эмуляторы для разработки это чушь. В онлайн-эмуляторах единственный смысл (и то сомнительный) в том, что это надо для случайных людей, чтобы просто познакомиться - пользователю не нужно иметь в своём архиве прогоняемые программы и разбираться в ОС конкретной ретро ЭВМ. Т.е это средство для забавы полных чайников. Довод о том, что не надо перекачивать себе программы несостоятелен, т.к расход трафика на работу эмулятора гораздо больше, чем объём прогоняемой программы.

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

Онлайн-эмулятор это возврат в 70-тые годы, когда пользователь имел дома терминал, модем со скоростью в 300 бод и связывался с многопользовательским майн-фреймом на другом конце страны и гонял на нём программы (в том числе, кросс-ассемблер и эмулятор-отладчик процессора 8080, чтобы отлаживать программы). Это имело бы смысл, если бы на том конце стоял супер-компьютер, который иметь дома невозможно, а какой смысл дистанционно гонять эмулятор для работы которого у человека достаточно своего железа (для эмуляции достаточно компьютера 40 летней давности, а я эмулировал РК86 на ОРИОНЕ и игры шли в нормальном темпе).
Paguo-86PK wrote:
К тому же, в Специалисте нет директивы «M» и дамп травится как в «Микро-80» - очень резко, без прокрутки
Это Вы про оригинальный монитор Волкова на 8D00. Я им пользовался, но после середины 1988 уже никто им не пользуется. В ROM-BIOS А.Волкова нет ролика экрана (по ВК на последней строке экран чистится и курсор на первую строку). Это недоработка не монитора, а ROM-BIOS.

Если запустить этот монитор с ленинградским ROM-BIOS (в котором и п/п C037 исправлена и делает ролик), то длинный дамп идёт с роликом. И если уж так хочется волковский монитор с роликом, то разве проблема в нём заменить вызовы C037 на вызов п/п-ммы C809, которая делает вывод с роликом. Монитор Волкова использовали только самые первые владельцы Специалиста, а 99.9% пользователей собравших его в 1988 и позднее использовали орловский монитор.
Paguo-86PK wrote:
Кстати, когда питомец запрыгивает на стол - сразу открываю страницу КСОНИКСА
Имеете в виду кошатину и то, что она любит наблюдать бегающих по экрану ксониксов? У меня тоже кошатина лежит перед дисплеем. Кстати, на кинескопном экране бегающие объекты её не интересуют, только на плоском.
Paguo-86PK wrote:
Какой из эмуляторов ПК исполнен так минималистически просто и гениально? Именно в нём я и перелопатил весь Монитор, так как в случае краха достаточно нажать «Refresh» браузера
В любом эмуляторе есть эквивалент кнопки СБРОС. Гениально - это когда всё хорошо и правильно, а не когда всё примитивно.
Paguo-86PK wrote:
Тогда как другие эмуляторы принуждают создавать резервные копии файлов и возиться с их перекопировкой
Вы напрасно пытаетесь восхвалять убожество онлайн-эмулятора. Какие резервные копии? Какая перекопировка?

Вы можете запускать игры командной строкой из ОС, тогда эмулятор после загрузки сразу стартует игру. Кроме как монитором по МГ-директиве в эмуляторе можете грузить из отладчика по L, восстанавливать и сохранять состояние игры (всю память, регистры и адрес возобновления).

Что Вам ещё требуется? Из программ без DOS не надо ничего записывать в файл, а разработкой программ прямо в эмуляторах никто, кроме Вас, не занимается. Да и кто мешает записать файл на эмулируемую дискету или выгрузить в виде файла RKS или WAV.
Paguo-86PK wrote:
Из-за чего сообщество Спектрумистов обозлилось на меня и послали меня... А я лишь, в отместку сторонникам Спектрума, с головой ушёл в РК
Вообще-то думаю, что фанатам Спектрума "глубоко плевать какие там цветы", иными словами всем до лампочки, чем занимаются другие, пока это не мешает их хобби.

В отместку получилось бы, если бы Вы положили бы все силы, энергию и деньги на то, чтобы для РК86 появилось бы 5 тысяч игр качеством не хуже, чем игры ZX-Spectrum и переманили бы этим на платформу РК всех синклеристов. Один человек это не сможет, потому нужно много денег, чтобы нанять 200 программистов. Но увы, без платки прибамбаса к РК86 это невозможно в силу нехватки его изобразительных возможностей.

А вот для Специалиста, даже с его всего лишь 8-ю цветами игры уровня ZX-Spectrum возможны (особенно, если в Специалисте отключением ПЗУ "открыть" ОЗУ в 62 кб, добавить прерывания и м.быть даже заменить CPU на Z80). Я уверен, что несколько человек Вашего уровня владения ассемблером в состоянии написать "Принц Персии" для Специалиста, если объединятся. Я бы этим занялся и сам, но нет нужной графики, а если рисовать самому, то выйдет убожество.
Paguo-86PK wrote:
Всегда свой Бейсик хотел написать, но спотыкался на редакторе строки. А к арифметике вещественной вообще не знал, как подойти!
Для чисел с плавающей запятой есть библиотеки (они были у всех с ОРИОНОМ). Я написал свой целочисленный бейсик в середине 90-тых (не из потребности, а из интереса, чтобы доказать себе, что не глупее Билла Гейтса). Это заняло 3 недели, но объём кода получился 5 кб, хотя это был TINY бейсик и писал я для Z80.
Paguo-86PK wrote:
... FIFO-буфер клавиатуры. В РК любопытно было бы это тоже попытаться сделать, чтобы во время вывода долгого дампа можно было бы не одну букву нажать, а десяток
Это легко (я делал на один символ), достаточно после вывода каждой строки вызывать п/п F81B.
Paguo-86PK wrote:
я прикидывал, как бы в РК сделать ОЗУ 128 Кб, где 64 Кб - системное и 64 Кб - пользовательское
Чем Вам не нравится прокачка доп.ОЗУ в окне размером в 8 кб (на A000...BFFF) ? Сейчас реально добавлять в РК только что-то очень простое, что каждый легко может сделать на базовой плате РК имея маленький электропаяльник. Установка статики в окне, требует кроме самого этого ОЗУ только регистр (для адресов A13 и выше).
Paguo-86PK wrote:
именно РК привлекателен...
Ну так и поднимите его своим творчеством на недосягаемую высоту сделав много программ высокого качества. А делать из РК86 новую платформу этому не способствует.
Paguo-86PK wrote:
РК - наш, родной. Он... как ядро, на которое можно навесить всё, что угодно!
Не к тому у вас патриотизм и симпатии. Это гнилое и очень тормозное небуферизованное ядро с уродской архитектурой, к тому же не могущее работать в реальном времени. Что-то на него навешивать не имеет смысла. Есть Специалист, где есть всё что надо. Он простой и параметры приличные. И их при нужде ещё и улучшить можно простейшими доработками, которые можно сделать за полчаса имея электропаяльник.


27 Feb 2020 02:27
Profile
Maniac
User avatar

Joined: 12 Apr 2011 20:43
Posts: 267
Location: Tashkent
Reply with quote
barsik wrote:
Это Вы опоздали ровно на десятилетие. Это надо было делать в 80-тые годы, тогда это было актуально.
Нe так я стар. :o
Среднюю школу только окончил тогда (25 лет назад) :exclaim:
barsik wrote:
Я узнал о 64 МКС строчного периода, когда ускорял свой Специалист до 2.5 МГЦ. Как раз именно в Специалисте понятно как формируется растр, тогда как ВГ75 это "таинственный чёрный ящик" дающий видео.
ZX-Spectrum тоже дискретно построен. Однако, там специфический растр и тогда я толком не смог разобраться с ним. Изучал схемы Специалиста и Ориона, а ещё Иришу - книжку масштабных размеров изучал… :dj:
barsik wrote:
Как же? Я свой РК86 настраивал пару месяцев.

А онлайн-эмуляторы вообще не нужны, это просто извращение.

barsik wrote:
Какой смысл в онлайн-эмуляторах вообще? Что они дают пользователю, кроме повышенного трафика и необходимости Интернета.
Если в чате познакомился с кем-то и нужно быстро показать предмет своих исследований - идеальнее онлайн-эмулятора не найти способа, чем парить человека инструкциями по установке чуждой ему среды… :idea:
А трафик у меня сейчас (наконец-то) - анлим за 750 рублей в месяц.
Правда, ADSL-связь - как в поганом колодце с тиной бывает временами.
Причём, в соседней комнате у сестры - оптика. Но качество и цена… Мой ADSL выгоднее…
barsik wrote:
Онлайн-эмулятор это возврат в 70-тые годы, когда пользователь имел дома терминал, модем со скоростью в 300 бод и связывался с многопользовательским майн-фреймом на другом конце страны и гонял на нём программы (в том числе, кросс-ассемблер и эмулятор-отладчик процессора 8080, чтобы отлаживать программы).
То ли здесь, то ли на других форумах, я уже обсуждал вопрос о возврате мэйн-фреймов.
Сейчас вон Облачные технологии всюду - от простых файловых помоек, до оплачиваемых аккаунтов для аренды игровых серверов под запуск прожорливых игр, позволяющих на слабых ноутбуках гонять новейшие игры.
barsik wrote:
Вы можете запускать игры командной строкой из ОС, тогда эмулятор после загрузки сразу стартует игру. Кроме как монитором по МГ-директиве в эмуляторе можете грузить из отладчика по L, восстанавливать и сохранять состояние игры (всю память, регистры и адрес возобновления).
На том же РК игры меня интересовали, пока перебивал их на свои 16 Кб. Как перебил и, в целом, научился программировать, взялся за написание своих Тетриса и Жизни в машинном коде. А на Бейсике лишь переделывал листинги с IBM-PC Альфа-Бейсика и мечтал о графике! :lol:
barsik wrote:
В отместку получилось бы, если бы Вы положили бы все силы, энергию и деньги на то, чтобы для РК86 появилось бы 5 тысяч игр качеством не хуже, чем игры ZX-Spectrum и переманили бы этим на платформу РК всех синклеристов. Один человек это не сможет, потому нужно много денег, чтобы нанять 200 программистов.
Смейтесь, смейтесь! :mrgreen:
Тут одну бы игру написать получилось бы!
barsik wrote:
Не к тому у вас патриотизм и симпатии. Это гнилое и очень тормозное небуферизованное ядро с уродской архитектурой, к тому же не могущее работать в реальном времени. Что-то на него навешивать не имеет смысла. Есть Специалист, где есть всё что надо.
В том и дело, что в РК с его ВГ75 для вывода символа на экран достаточно двух команд «LD HL…LD (HL)» в пять байтов и без стека :exclaim:
В том же Специалисте без организованного стека для вызова подпрограммы вывода символа на экран не обойтись!

Понимаете, в чём суть?
Сейчас маломальских электронщиков со всякими PIC/ATMEGA графика вообще не интересует.
Им главное считать сигнал с АЦП, произвести анализ и пощёлкать там реле под тёплый пол… :roll:

И вот здесь РК - идеально подходит для оттачивания 8-битных алгоритмов в условиях сильнейшего дефицита регистров.
И тут даже не в производительности дело. А в компактности кода.

P.S.: Кстати, вчера вечером начал в онлайн-эмуляторе и сейчас закончил написание/отладку сложнейщего (для меня) кода деления 24-битных чисел (пф-ффф)…
Теперь дамп (в демке) травится 24-битными целыми без знака.
Можно будет приступить и к плавающей запятой, когда пойму базовые принципы. А там - и до Бейсика не далеко… :idea:
(Написание целочисленного Бейсика, как в Правце, меня не интересует…)

P.P.S.:
barsik wrote:
А делать из РК86 новую платформу этому не способствует.

В своей теме CISC-x80 я тихо продвигаюсь вперёд к своей школьной мечте - реализовать свой РК на своём процессоре. И в эмуляторе я симулирую именно экран РК, так как в том эмуляторе свой первый вариант оконной подпрограммы и прогонял, чтобы выявить баги.
ГигаТрон - тоже платформа с нулевой поддержкой готовых программ. Однако, люди как-то этим занимаются и нарабатывают.
(Эмулятор онлайн позволяет, не захламляя лишний раз свой диск, за минуту получить общее представление о платформе и понять, нужно ли скачивать вообще это или нет…)

Кстати… Будь у i8080/z80 одна единственная инструкция с реверсией порядка бит HL, это значительно бы упростило всё! Вот «ADC HL,HL» прокручивает все 16 бит влево без всяких мелких «RLC». Если бы была реверсия, то и вправо крутить можно было бы. Даже в x86 «BSWAP» просто меняет местами октеты, а не биты.
(RLD/RRD не в счёт, так как это две отдельные специфические команды…
К тому же у Z80 не всё так гладко: Инструкция BIT могла бы возвращать бит не флагом ZF, а флагом CF: ZF годен только для операций ветвления, тогда как CF позволяет без ветвлений строить линейный код - обратите внимание на мой вариант вывода байта на магнитофон, где константа 14 отнимается линейно и формируется маской…)
Будто это так сложно на кристалле сделать, перекрестив все 16 проводков. В подпрограмме деления эта реверсия здорово бы помогла!
Неужели за 50 лет этой инструкцией никто не востребовался‽ :o
(В своём x80 я сразу эту инструкцию ввёл в систему команд, так как аппаратно она до элементарного проста и требует 4 такта, но в узких местах программы позволяет существенно упростить код…)


Attachments:
File comment: По «G0» травит дамп (F800…FFFF).
Сравнительная производительность - 1/4.
(«D» - 7 секунд, «G» - около 30 секунд)
Интересно сравнить производительность на разных платформах…

По моим подсчётам здесь деление 24-битного числа затрачивает от 494 до 8061 тактов…
При стандартной РК-частоте производительность составляет от 220 до 3598 операций деления в секунду.
Тем самым, печать десятичного порядкового - от 32 до 514 чисел в секунду…

MULDIV24.zip [752 Bytes]
Downloaded 211 times
27 Feb 2020 23:16
Profile WWW
Doomed
User avatar

Joined: 19 Feb 2017 03:46
Posts: 583
Location: Санкт-Петербург, Россия, третья планета от Солнца, галактика Млечный Путь
Reply with quote
Post 
Если уж речь в этой теме пошла о полезных доработках ПЗУ РК86, то стОит упомянуть о двух недоработках драйвера клавиатуры.

Драйвер в ПЗУ РК надо чуть изменить, чтобы вводился так называемый "код подчёркивания" (5F), который стандартным драйвером не вводится, но код в ПЗУ знакогенератора есть. В доработанном мониторе ОРИОНА (который называется М3) добавка возможности вводить этот символ обходится всего в две команды ассемблера, но оказалась очень полезной. Благодаря этому у меня во всех ассемблерных исходниках набранных на самом ОРИОНЕ использованы символы подчёркивания (хотя лишь в 1999 году, когда закончил свой эмулятор ОРИОНА Z80 я смог набирать и отлаживать программы для ОРИОНА на PC, где символ подчёркивания есть на клавиатуре).

Кстати, хотя этот довод не актуален, ибо никто не программировал на РК86 на Си в силу полного отсутствия CP/M на базовом РК (CP/M не было на оригинальном РК и даже на РК-подобных с большим ОЗУ не было, т.к секрет подключения дисковода открылся только в 1993 году, когда в стране уже полностью прекратился выпуск РК-подобных, а популярность самого РК86 резко упала), но без символа подчёркивания не удастся на Си часть модулей делать на ассемблере или других ЯВУ, т.к компиляторы Си перед именами переменных из внешних модулей прибавляют символ подчёркивания.

Второе замечание о том, что в подпрограмму GETLIN надо добавить обслуживание кода клавиши <BAKSPC> или <ЗАБОЙ> (это код 7F). Использование вместо этого кода курсорной клавиши <ВЛЕВО> это какой-то маразм распространившийся из-за авторов Микро-80, совершенно вне общемировой практики (возможно на ранних версиях клавиатуры Микро-80 не было нужной клавиши).

Идея конечно не для ПЗУ (т.к там для этого нет места), - помню, что в каком-то моём драйвере GETLIN клавиша <ВЛЕВО> работает как положено, - перемещает курсор без забоя (и клавиша <ВПРАВО> соответственно тоже работает как положено, позволяя полноценное редактирование строки с помощью вставок/удалений символов). Вроде бы в каком-то бейсике РК редактирование строки сделано также. А у меня в этом драйвере GETLIN дополнительно ещё курсорная клавиша <ВВЕРХ> вводит на экран (и соответственно в буфер редактирования) предыдущую введённую строку введённую этой подпрограммой ввода строк (что-то типа памяти на введённые ранее строки драйвера DOSEDIT в MSDOS, что кстати, есть также при вводе команд в окне MSDOS в Win XP, но у меня это лишь на одну строку).


02 Mar 2020 20:00
Profile
Display posts from previous:  Sort by  
Reply to topic   [ 204 posts ]  Go to page Previous  1 ... 7, 8, 9, 10, 11, 12, 13, 14  Next

Who is online

Users browsing this forum: Shaos and 37 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.